Compare commits

...

97 Commits

Author SHA1 Message Date
Kamil Myśliwiec
ad08626ea7 chore(@nestjs) publish v9.0.5 release 2022-07-20 10:57:56 +02:00
Kamil Myśliwiec
d893469018 fix(microservices): updated outdated redis options interface 2022-07-20 10:46:29 +02:00
Kamil Myśliwiec
c09337ded2 fix(microservices): update kafka interfaces to match v2 2022-07-20 10:45:07 +02:00
Kamil Mysliwiec
566301232b Merge pull request #9798 from frankmangone/frankmangone/feature/avoid-queue-declaration-rmq
feat(microservices): add noAssert option for RMQ connection
2022-07-20 10:40:26 +02:00
Kamil Mysliwiec
429dfa1382 Merge pull request #9819 from jmcdo29/fix/pipeline-over-pipe
fix: use pipeline over stream.pipe
2022-07-20 10:39:36 +02:00
Kamil Mysliwiec
4eacd875c1 Merge pull request #9926 from tolgap/fix/9901-urlencoded-raw-body
fix(express,fastify): raw body for urlencoded requests
2022-07-20 10:39:18 +02:00
Kamil Mysliwiec
0b24affe6e Merge pull request #9959 from nestjs/dependabot/npm_and_yarn/sample/30-event-emitter/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/30-event-emitter
2022-07-20 10:38:21 +02:00
Kamil Mysliwiec
d478feb65f Merge pull request #9960 from nestjs/dependabot/npm_and_yarn/sample/32-graphql-federation-schema-first/users-application/terser-5.14.2
chore(deps): bump terser from 5.14.1 to 5.14.2 in /sample/32-graphql-federation-schema-first/users-application
2022-07-20 10:38:15 +02:00
Kamil Mysliwiec
27efd41459 Merge pull request #9961 from nestjs/dependabot/npm_and_yarn/sample/31-graphql-federation-code-first/gateway/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/31-graphql-federation-code-first/gateway
2022-07-20 10:38:11 +02:00
Kamil Mysliwiec
1ccaeab23c Merge pull request #9962 from nestjs/dependabot/npm_and_yarn/sample/31-graphql-federation-code-first/users-application/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/31-graphql-federation-code-first/users-application
2022-07-20 10:38:06 +02:00
Kamil Mysliwiec
efcfd0261f Merge pull request #9963 from nestjs/dependabot/npm_and_yarn/sample/32-graphql-federation-schema-first/posts-application/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/32-graphql-federation-schema-first/posts-application
2022-07-20 10:38:03 +02:00
Kamil Mysliwiec
3b0c968ee5 Merge pull request #9964 from nestjs/dependabot/npm_and_yarn/sample/32-graphql-federation-schema-first/gateway/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/32-graphql-federation-schema-first/gateway
2022-07-20 10:37:58 +02:00
Kamil Mysliwiec
8a9310909b Merge pull request #9965 from nestjs/dependabot/npm_and_yarn/sample/29-file-upload/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/29-file-upload
2022-07-20 10:37:52 +02:00
Kamil Mysliwiec
3f3a3c2d8b Merge pull request #9966 from nestjs/dependabot/npm_and_yarn/sample/28-sse/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/28-sse
2022-07-20 10:37:48 +02:00
Kamil Mysliwiec
bdba706ed5 Merge pull request #9967 from nestjs/dependabot/npm_and_yarn/sample/31-graphql-federation-code-first/posts-application/terser-5.14.2
chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/31-graphql-federation-code-first/posts-application
2022-07-20 10:37:39 +02:00
dependabot[bot]
9e22b7a470 chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:33 +00:00
dependabot[bot]
95a6defd32 chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/29-file-upload
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:26 +00:00
dependabot[bot]
f7715defaf chore(deps): bump terser from 5.10.0 to 5.14.2 in /sample/28-sse
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:26 +00:00
dependabot[bot]
2b70d17062 chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:24 +00:00
dependabot[bot]
9e9b11b23f chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:15 +00:00
dependabot[bot]
b6ba905768 chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:06 +00:00
dependabot[bot]
25806abac0 chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:04 +00:00
dependabot[bot]
cd6d5cbe4a chore(deps): bump terser
Bumps [terser](https://github.com/terser/terser) from 5.14.1 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:36:01 +00:00
dependabot[bot]
dad922ae2e chore(deps): bump terser in /sample/30-event-emitter
Bumps [terser](https://github.com/terser/terser) from 5.10.0 to 5.14.2.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 08:35:57 +00:00
Kamil Mysliwiec
89e5b74a06 Merge pull request #9950 from nestjs/dependabot/npm_and_yarn/light-my-request-5.2.0
chore(deps): bump light-my-request from 5.1.0 to 5.2.0
2022-07-20 10:35:12 +02:00
Kamil Mysliwiec
5b39d537de Merge pull request #9951 from nestjs/dependabot/npm_and_yarn/mongoose-6.4.5
chore(deps-dev): bump mongoose from 6.4.4 to 6.4.5
2022-07-20 10:35:08 +02:00
Kamil Mysliwiec
8fcd80b32b Merge pull request #9952 from nestjs/dependabot/npm_and_yarn/concurrently-7.3.0
chore(deps-dev): bump concurrently from 7.2.2 to 7.3.0
2022-07-20 10:35:03 +02:00
Kamil Mysliwiec
816bc91be0 Merge pull request #9954 from kosh-b/feature/kafka-heartbeat-passed-to-endpoint
feat(microservices): add Kafka heartbeat callback to KafkaContext
2022-07-20 10:34:37 +02:00
kosh-b
380d230716 Add Kafka heartbeat callback to KafkaContext arguments and pass it to the endpoint 2022-07-19 11:53:37 +03:00
dependabot[bot]
e8f188e78b chore(deps-dev): bump concurrently from 7.2.2 to 7.3.0
Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.2.2 to 7.3.0.
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.2.2...v7.3.0)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-19 00:09:25 +00:00
dependabot[bot]
d22f7496e0 chore(deps-dev): bump mongoose from 6.4.4 to 6.4.5
Bumps [mongoose](https://github.com/Automattic/mongoose) from 6.4.4 to 6.4.5.
- [Release notes](https://github.com/Automattic/mongoose/releases)
- [Changelog](https://github.com/Automattic/mongoose/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Automattic/mongoose/compare/6.4.4...6.4.5)

---
updated-dependencies:
- dependency-name: mongoose
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-19 00:07:52 +00:00
dependabot[bot]
ac3c8c78c4 chore(deps): bump light-my-request from 5.1.0 to 5.2.0
Bumps [light-my-request](https://github.com/fastify/light-my-request) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/fastify/light-my-request/releases)
- [Commits](https://github.com/fastify/light-my-request/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: light-my-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-19 00:05:29 +00:00
Jay McDoniel
9739aa6a1a fix: move logger to class member 2022-07-18 07:56:45 -07:00
Kamil Myśliwiec
df4d99d92e chore(@nestjs) publish v9.0.4 release 2022-07-18 10:23:53 +02:00
Kamil Myśliwiec
03e1a91b85 fix(common): auto-constructed configurable async options should use any 2022-07-18 10:22:52 +02:00
Kamil Mysliwiec
a4de5f93e8 Merge pull request #9940 from nestjs/dependabot/npm_and_yarn/ws-8.8.1
chore(deps): bump ws from 8.8.0 to 8.8.1
2022-07-18 09:23:49 +02:00
Kamil Mysliwiec
839acdf232 Merge pull request #9939 from nestjs/dependabot/npm_and_yarn/types/node-18.0.6
chore(deps-dev): bump @types/node from 18.0.4 to 18.0.6
2022-07-18 09:23:45 +02:00
Kamil Mysliwiec
ab8ec345d4 Merge pull request #9932 from nestjs/dependabot/npm_and_yarn/ts-node-10.9.1
chore(deps-dev): bump ts-node from 10.9.0 to 10.9.1
2022-07-18 09:23:33 +02:00
Kamil Mysliwiec
fd859f4ac7 Merge pull request #9931 from nestjs/dependabot/npm_and_yarn/grpc/proto-loader-0.7.0
chore(deps-dev): bump @grpc/proto-loader from 0.6.13 to 0.7.0
2022-07-18 09:23:14 +02:00
dependabot[bot]
bf41df7da3 chore(deps): bump ws from 8.8.0 to 8.8.1
Bumps [ws](https://github.com/websockets/ws) from 8.8.0 to 8.8.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.8.0...8.8.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 07:10:39 +00:00
Kamil Mysliwiec
bd494201d6 Merge pull request #9941 from nestjs/dependabot/npm_and_yarn/ioredis-5.2.1
chore(deps-dev): bump ioredis from 5.2.0 to 5.2.1
2022-07-18 09:07:56 +02:00
Kamil Mysliwiec
6cb41a5e00 Merge pull request #9942 from nestjs/dependabot/npm_and_yarn/core-js-3.23.5
chore(deps-dev): bump core-js from 3.23.4 to 3.23.5
2022-07-18 09:07:51 +02:00
Kamil Mysliwiec
eb2c6df9ba Merge pull request #9943 from nestjs/dependabot/npm_and_yarn/light-my-request-5.1.0
chore(deps): bump light-my-request from 5.0.0 to 5.1.0
2022-07-18 08:51:52 +02:00
Jay McDoniel
248596ba59 fix: rename handler to to better represent what it is handling 2022-07-17 23:09:30 -07:00
dependabot[bot]
8172c09435 chore(deps): bump light-my-request from 5.0.0 to 5.1.0
Bumps [light-my-request](https://github.com/fastify/light-my-request) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/fastify/light-my-request/releases)
- [Commits](https://github.com/fastify/light-my-request/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: light-my-request
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 00:20:21 +00:00
dependabot[bot]
d68bead326 chore(deps-dev): bump core-js from 3.23.4 to 3.23.5
Bumps [core-js](https://github.com/zloirock/core-js) from 3.23.4 to 3.23.5.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/compare/v3.23.4...v3.23.5)

---
updated-dependencies:
- dependency-name: core-js
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 00:18:06 +00:00
dependabot[bot]
fd310916c6 chore(deps-dev): bump ioredis from 5.2.0 to 5.2.1
Bumps [ioredis](https://github.com/luin/ioredis) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/luin/ioredis/releases)
- [Changelog](https://github.com/luin/ioredis/blob/main/CHANGELOG.md)
- [Commits](https://github.com/luin/ioredis/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: ioredis
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 00:15:48 +00:00
dependabot[bot]
840071dbdb chore(deps-dev): bump @types/node from 18.0.4 to 18.0.6
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.0.4 to 18.0.6.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-18 00:09:07 +00:00
Jay McDoniel
f59cf5e81c feat: update handler to be protected and only handle errors once 2022-07-17 14:56:45 -07:00
dependabot[bot]
b1b024e7c7 chore(deps-dev): bump ts-node from 10.9.0 to 10.9.1
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.9.0 to 10.9.1.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.9.0...v10.9.1)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-15 00:08:31 +00:00
dependabot[bot]
44a655d820 chore(deps-dev): bump @grpc/proto-loader from 0.6.13 to 0.7.0
Bumps [@grpc/proto-loader](https://github.com/grpc/grpc-node) from 0.6.13 to 0.7.0.
- [Release notes](https://github.com/grpc/grpc-node/releases)
- [Commits](https://github.com/grpc/grpc-node/compare/@grpc/proto-loader@0.6.13...@grpc/grpc-js@0.7.0)

---
updated-dependencies:
- dependency-name: "@grpc/proto-loader"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-15 00:07:00 +00:00
Kamil Mysliwiec
009f6d2fc3 Merge pull request #9928 from nestjs/dependabot/npm_and_yarn/types/node-18.0.4
chore(deps-dev): bump @types/node from 18.0.3 to 18.0.4
2022-07-14 08:45:32 +02:00
Kamil Mysliwiec
e682c4c1cf Merge pull request #9929 from nestjs/dependabot/npm_and_yarn/ts-node-10.9.0
chore(deps-dev): bump ts-node from 10.8.2 to 10.9.0
2022-07-14 08:44:09 +02:00
dependabot[bot]
2e3b51ba06 chore(deps-dev): bump ts-node from 10.8.2 to 10.9.0
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.8.2 to 10.9.0.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.8.2...v10.9.0)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-14 00:09:12 +00:00
dependabot[bot]
db3d442d19 chore(deps-dev): bump @types/node from 18.0.3 to 18.0.4
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.0.3 to 18.0.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-14 00:04:00 +00:00
Tolga Paksoy
50716eb0cd fix(express,fastify): raw body for urlencoded requests 2022-07-13 18:47:03 +02:00
Kamil Mysliwiec
8cd150d55c Merge pull request #9915 from thiagomini/refactor/instance-wrapper
refactor(core): extract instance wrapper merge logic
2022-07-13 08:39:23 +02:00
Kamil Mysliwiec
dd23098856 Merge pull request #9924 from nestjs/dependabot/npm_and_yarn/fastify-4.2.1
chore(deps): bump fastify from 4.2.0 to 4.2.1
2022-07-13 08:31:07 +02:00
dependabot[bot]
e500beaaf1 chore(deps): bump fastify from 4.2.0 to 4.2.1
Bumps [fastify](https://github.com/fastify/fastify) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/fastify/fastify/releases)
- [Commits](https://github.com/fastify/fastify/compare/v4.2.0...v4.2.1)

---
updated-dependencies:
- dependency-name: fastify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-13 00:04:33 +00:00
Thiago Martins
4c16d2010c refactor(core): remove providers type assertions
change provider classifier functions to work as type guards
2022-07-12 10:03:40 -03:00
Kamil Myśliwiec
39c3dfe3c6 test(injector): update optional factory provider integration tests 2022-07-12 11:08:03 +02:00
Kamil Myśliwiec
f4b3c7fd04 chore(@nestjs) publish v9.0.3 release 2022-07-12 10:33:48 +02:00
Kamil Mysliwiec
76923e7849 Merge pull request #9922 from nestjs/fix/scoped-factories-optional-deps
fix(core): scoped factories should not fail with optional deps
2022-07-12 10:27:18 +02:00
Kamil Myśliwiec
ced2acff61 test(): hotfix - use deep equal instead 2022-07-12 10:07:16 +02:00
Kamil Myśliwiec
8e5b1f426c test(): add test case for optional deps in scoped providers 2022-07-12 09:58:45 +02:00
Kamil Myśliwiec
1ff1389c9c fix(core): scoped factories should not fail with optional deps 2022-07-12 09:55:08 +02:00
Kamil Mysliwiec
976cdf3d59 Merge pull request #9920 from nestjs/dependabot/npm_and_yarn/apollo-server-express-3.10.0
chore(deps-dev): bump apollo-server-express from 3.9.0 to 3.10.0
2022-07-12 09:00:19 +02:00
Kamil Mysliwiec
c488f2552b Merge pull request #9917 from nestjs/dependabot/npm_and_yarn/ioredis-5.2.0
chore(deps-dev): bump ioredis from 5.1.0 to 5.2.0
2022-07-12 08:54:21 +02:00
Kamil Mysliwiec
14b728c57b Merge pull request #9918 from nestjs/dependabot/npm_and_yarn/rxjs-7.5.6
chore(deps): bump rxjs from 7.5.5 to 7.5.6
2022-07-12 08:52:37 +02:00
Kamil Mysliwiec
75a4e1a52d Merge pull request #9919 from nestjs/dependabot/npm_and_yarn/fast-json-stringify-5.1.0
chore(deps): bump fast-json-stringify from 5.0.6 to 5.1.0
2022-07-12 08:52:32 +02:00
dependabot[bot]
40233bf0c4 chore(deps-dev): bump apollo-server-express from 3.9.0 to 3.10.0
Bumps [apollo-server-express](https://github.com/apollographql/apollo-server/tree/HEAD/packages/apollo-server-express) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/apollographql/apollo-server/releases)
- [Changelog](https://github.com/apollographql/apollo-server/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apollographql/apollo-server/commits/apollo-server-express@3.10.0/packages/apollo-server-express)

---
updated-dependencies:
- dependency-name: apollo-server-express
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-12 06:50:32 +00:00
Kamil Mysliwiec
d531742278 Merge pull request #9921 from nestjs/dependabot/npm_and_yarn/apollo-server-core-3.10.0
chore(deps-dev): bump apollo-server-core from 3.9.0 to 3.10.0
2022-07-12 08:44:49 +02:00
dependabot[bot]
bb8a650154 chore(deps-dev): bump apollo-server-core from 3.9.0 to 3.10.0
Bumps [apollo-server-core](https://github.com/apollographql/apollo-server/tree/HEAD/packages/apollo-server-core) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/apollographql/apollo-server/releases)
- [Changelog](https://github.com/apollographql/apollo-server/blob/main/CHANGELOG.md)
- [Commits](https://github.com/apollographql/apollo-server/commits/apollo-server-core@3.10.0/packages/apollo-server-core)

---
updated-dependencies:
- dependency-name: apollo-server-core
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-12 00:10:08 +00:00
dependabot[bot]
22048db7b7 chore(deps): bump fast-json-stringify from 5.0.6 to 5.1.0
Bumps [fast-json-stringify](https://github.com/fastify/fast-json-stringify) from 5.0.6 to 5.1.0.
- [Release notes](https://github.com/fastify/fast-json-stringify/releases)
- [Commits](https://github.com/fastify/fast-json-stringify/compare/v5.0.6...v5.1.0)

---
updated-dependencies:
- dependency-name: fast-json-stringify
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-12 00:05:44 +00:00
dependabot[bot]
e950798ea9 chore(deps): bump rxjs from 7.5.5 to 7.5.6
Bumps [rxjs](https://github.com/reactivex/rxjs) from 7.5.5 to 7.5.6.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/7.5.5...7.5.6)

---
updated-dependencies:
- dependency-name: rxjs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-12 00:04:46 +00:00
dependabot[bot]
3f68733084 chore(deps-dev): bump ioredis from 5.1.0 to 5.2.0
Bumps [ioredis](https://github.com/luin/ioredis) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/luin/ioredis/releases)
- [Changelog](https://github.com/luin/ioredis/blob/main/CHANGELOG.md)
- [Commits](https://github.com/luin/ioredis/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: ioredis
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-12 00:03:48 +00:00
Thiago Martins
a2f4b342e2 test(core): add instance wrapper test
ensure mergeWith handles FactoryProviders with no depencies
2022-07-11 17:02:48 -03:00
Thiago Martins
b0d735d90b test(core): add instance wrapper test
ensure mergeWith handles FactoryProviders with injected dependencies
2022-07-11 17:01:02 -03:00
Thiago Martins
7696f43a07 test(core): add instance wrapper test
ensure mergeWith handles ClassProviders
2022-07-11 16:56:33 -03:00
Thiago Martins
2a7fc84470 test(core): add instance wrapper test
ensure mergeWith handles ValueProviders
2022-07-11 16:54:21 -03:00
Thiago Martins
62f1fa3a79 refactor(core): use provider classifier
refactor instance-wrapper to use provider classifier methods
2022-07-11 16:42:35 -03:00
Thiago Martins
aa2ee95f54 feat(core): add falsy values handling
ensure isValueProvider returns true for falsy values
2022-07-11 16:39:05 -03:00
Thiago Martins
75b45775bf test(core): add provider classifier test case
ensure isFactoryProvider returns false when useFactory is undefined
2022-07-11 16:33:31 -03:00
Thiago Martins
a052e0cac2 test(core): add provider classifier test case
ensure isFactoryProvider returns false when useFactory is not present
2022-07-11 16:32:46 -03:00
Thiago Martins
d1ec1e2640 feat(core): add method to verify factory provider
ensure isFactoryProvider returns true when useFactory is present
2022-07-11 16:29:16 -03:00
Thiago Martins
57cd765bb1 feat(core): finish is value provider
ensure isValueProvider returns false when given provider is undefined
2022-07-11 16:22:58 -03:00
Thiago Martins
7b759d52e6 test(core): add provider classifier test
ensure isValueProvider returns false when useValue is not present
2022-07-11 16:21:06 -03:00
Thiago Martins
6b9ed77cda test(core): add provider classifier test
ensure useValue returns false for undefined values
2022-07-11 16:19:59 -03:00
Thiago Martins
ad154067e0 feat(core): add provider classifier method
ensure isValueProvider returns true when useValue is defined
2022-07-11 16:18:55 -03:00
Thiago Martins
1da899f2c0 feat(core): add provider-classifier
ensure isClassProvider works as expected
2022-07-11 16:15:09 -03:00
Kamil Mysliwiec
1d9930eb3c Merge pull request #9907 from nestjs/dependabot/npm_and_yarn/nestjs/mongoose-9.2.0
chore(deps-dev): bump @nestjs/mongoose from 9.1.1 to 9.2.0
2022-07-11 15:06:32 +02:00
Kamil Myśliwiec
c1d006dbbc Merge branch 'master' of https://github.com/nestjs/nest 2022-07-11 09:42:42 +02:00
dependabot[bot]
bf8791f20c chore(deps-dev): bump @nestjs/mongoose from 9.1.1 to 9.2.0
Bumps [@nestjs/mongoose](https://github.com/nestjs/mongoose) from 9.1.1 to 9.2.0.
- [Release notes](https://github.com/nestjs/mongoose/releases)
- [Changelog](https://github.com/nestjs/mongoose/blob/master/.release-it.json)
- [Commits](https://github.com/nestjs/mongoose/compare/9.1.1...9.2.0)

---
updated-dependencies:
- dependency-name: "@nestjs/mongoose"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-11 07:34:35 +00:00
Kamil Mysliwiec
14fc05f7ff Merge pull request #9909 from nestjs/dependabot/npm_and_yarn/nestjs/apollo-10.0.17
chore(deps-dev): bump @nestjs/apollo from 10.0.16 to 10.0.17
2022-07-11 09:31:30 +02:00
dependabot[bot]
29ab36bfe8 chore(deps-dev): bump @nestjs/apollo from 10.0.16 to 10.0.17
Bumps [@nestjs/apollo](https://github.com/nestjs/graphql) from 10.0.16 to 10.0.17.
- [Release notes](https://github.com/nestjs/graphql/releases)
- [Commits](https://github.com/nestjs/graphql/compare/v10.0.16...v10.0.17)

---
updated-dependencies:
- dependency-name: "@nestjs/apollo"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-11 07:16:39 +00:00
Jay McDoniel
18c27cd790 fix: use pipeline over stream.pipe
`pipeline` ends up destroying streams used if there is an error in one of
the streams. Due to this, there's no chance of a memory leak from errored out
streams. There's also now an addition of adding an error handler to the
`StreamableFile` so that stream errors by default return a 400 and can be
customized to return an error message however a developer would like. These
only effect the express adapter because of how Fastify already internally
handles streams.

fix: #9759
2022-06-23 08:49:57 -07:00
Franco Mangone
bb7e9d7837 feat(microservices): add noAssert option for RMQ connection
Rabbit MQ brokers may not allow for queue declaration, so a check is needed to avoid 403 errors in that scenario
2022-06-17 23:56:32 -03:00
47 changed files with 1663 additions and 526 deletions

View File

@@ -1,3 +1,4 @@
import { Scope } from '@nestjs/common';
import { UnknownDependenciesException } from '@nestjs/core/errors/exceptions/unknown-dependencies.exception';
import { Test } from '@nestjs/testing';
import { expect } from 'chai';
@@ -38,6 +39,42 @@ describe('Optional factory provider deps', () => {
const factoryProvider = moduleRef.get('FACTORY');
expect(factoryProvider).to.equal(defaultValue);
});
it('"undefined" should be injected into the factory function (scoped provider)', async () => {
const MY_PROVIDER = 'MY_PROVIDER';
const FIRST_OPTIONAL_DEPENDENCY = 'FIRST_OPTIONAL_DEPENDENCY';
const SECOND_OPTIONAL_DEPENDENCY = 'SECOND_OPTIONAL_DEPENDENCY';
const module = await Test.createTestingModule({
providers: [
{
provide: SECOND_OPTIONAL_DEPENDENCY,
useValue: 'second',
},
{
provide: MY_PROVIDER,
scope: Scope.REQUEST,
inject: [
{
token: FIRST_OPTIONAL_DEPENDENCY,
optional: true,
},
{
token: SECOND_OPTIONAL_DEPENDENCY,
optional: true,
},
],
useFactory: (first?: string, second?: string) => {
return { first, second };
},
},
],
}).compile();
expect(await module.resolve(MY_PROVIDER)).to.deep.equal({
first: undefined,
second: 'second',
});
});
});
});
describe('otherwise', () => {

View File

@@ -6,7 +6,6 @@ import { ExpressModule } from '../src/express.module';
describe('Raw body (Express Application)', () => {
let app: NestExpressApplication;
const body = '{ "amount":0.0 }';
beforeEach(async () => {
const moduleFixture = await Test.createTestingModule({
@@ -16,33 +15,63 @@ describe('Raw body (Express Application)', () => {
app = moduleFixture.createNestApplication<NestExpressApplication>({
rawBody: true,
});
});
it('should return exact post body', async () => {
await app.init();
const response = await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/json')
.send(body)
.expect(201);
expect(response.body).to.eql({
parsed: {
amount: 0,
},
raw: '{ "amount":0.0 }',
});
});
it('should work if post body is empty', async () => {
await app.init();
await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/json')
.expect(201);
});
afterEach(async () => {
await app.close();
});
describe('application/json', () => {
const body = '{ "amount":0.0 }';
it('should return exact post body', async () => {
const response = await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/json')
.send(body)
.expect(201);
expect(response.body).to.eql({
parsed: {
amount: 0,
},
raw: body,
});
});
it('should work if post body is empty', async () => {
await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/json')
.expect(201);
});
});
describe('application/x-www-form-urlencoded', () => {
const body = 'content=this is a post\'s content by "Nest"';
it('should return exact post body', async () => {
const response = await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/x-www-form-urlencoded')
.send(body)
.expect(201);
expect(response.body).to.eql({
parsed: {
content: 'this is a post\'s content by "Nest"',
},
raw: body,
});
});
it('should work if post body is empty', async () => {
await request(app.getHttpServer())
.post('/')
.set('Content-Type', 'application/x-www-form-urlencoded')
.expect(201);
});
});
});

View File

@@ -8,7 +8,6 @@ import { FastifyModule } from '../src/fastify.module';
describe('Raw body (Fastify Application)', () => {
let app: NestFastifyApplication;
const body = '{ "amount":0.0 }';
beforeEach(async () => {
const moduleFixture = await Test.createTestingModule({
@@ -21,43 +20,79 @@ describe('Raw body (Fastify Application)', () => {
rawBody: true,
},
);
});
it('should return exact post body', async () => {
await app.init();
const response = await app.inject({
method: 'POST',
url: '/',
headers: { 'content-type': 'application/json' },
payload: body,
});
expect(JSON.parse(response.body)).to.eql({
parsed: {
amount: 0,
},
raw: '{ "amount":0.0 }',
});
});
it('should fail if post body is empty', async () => {
await app.init();
const response = await app.inject({
method: 'POST',
url: '/',
headers: {
'content-type': 'application/json',
accept: 'application/json',
},
});
// Unlike Express, when you send a POST request without a body
// with Fastify, Fastify will throw an error because it isn't valid
// JSON. See fastify/fastify#297.
expect(response.statusCode).to.equal(400);
});
afterEach(async () => {
await app.close();
});
describe('application/json', () => {
const body = '{ "amount":0.0 }';
it('should return exact post body', async () => {
const response = await app.inject({
method: 'POST',
url: '/',
headers: { 'content-type': 'application/json' },
payload: body,
});
expect(JSON.parse(response.body)).to.eql({
parsed: {
amount: 0,
},
raw: body,
});
});
it('should fail if post body is empty', async () => {
const response = await app.inject({
method: 'POST',
url: '/',
headers: {
'content-type': 'application/json',
accept: 'application/json',
},
});
// Unlike Express, when you send a POST request without a body
// with Fastify, Fastify will throw an error because it isn't valid
// JSON. See fastify/fastify#297.
expect(response.statusCode).to.equal(400);
});
});
describe('application/x-www-form-urlencoded', () => {
const body = 'content=this is a post\'s content by "Nest"';
it('should return exact post body', async () => {
const response = await app.inject({
method: 'POST',
url: '/',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
payload: body,
});
expect(JSON.parse(response.body)).to.eql({
parsed: {
content: 'this is a post\'s content by "Nest"',
},
raw: body,
});
});
it('should work if post body is empty', async () => {
const response = await app.inject({
method: 'POST',
url: '/',
headers: {
'content-type': 'application/x-www-form-urlencoded',
},
});
expect(response.statusCode).to.equal(201);
});
});
});

View File

@@ -65,4 +65,7 @@ describe('Express FileSend', () => {
expect(res.text).to.be.eq(readmeString);
});
});
it('should return an error if the file does not exist', async () => {
return request(app.getHttpServer()).get('/file/not/exist').expect(400);
});
});

View File

@@ -31,4 +31,9 @@ export class AppController {
getFileWithHeaders(): StreamableFile {
return this.appService.getFileWithHeaders();
}
@Get('file/not/exist')
getNonExistantFile(): StreamableFile {
return this.appService.getFileThatDoesNotExist();
}
}

View File

@@ -35,4 +35,8 @@ export class AppService {
},
);
}
getFileThatDoesNotExist(): StreamableFile {
return new StreamableFile(createReadStream('does-not-exist.txt'));
}
}

View File

@@ -3,5 +3,5 @@
"packages": [
"packages/*"
],
"version": "9.0.2"
"version": "9.0.5"
}

477
package-lock.json generated
View File

@@ -1431,6 +1431,11 @@
"vary": "^1.1.2"
}
},
"@fastify/deepmerge": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.1.0.tgz",
"integrity": "sha512-E8Hfdvs1bG6u0N4vN5Nty6JONUfTdOciyD5rn8KnEsLKIenvOVcr210BQR9t34PRkNyjqnMLGk3e0BsaxRdL+g=="
},
"@fastify/error": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.0.0.tgz",
@@ -1601,13 +1606,13 @@
"dev": true
},
"@graphql-tools/merge": {
"version": "8.2.13",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.2.13.tgz",
"integrity": "sha512-lhzjCa6wCthOYl7B6UzER3SGjU2WjSGnW0WGr8giMYsrtf6G3vIRotMcSVMlhDzyyMIOn7uPULOUt3/kaJ/rIA==",
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz",
"integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==",
"dev": true,
"requires": {
"@graphql-tools/utils": "8.6.12",
"tslib": "~2.4.0"
"@graphql-tools/utils": "8.8.0",
"tslib": "^2.4.0"
}
},
"@graphql-tools/mock": {
@@ -1620,60 +1625,27 @@
"@graphql-tools/utils": "8.8.0",
"fast-json-stable-stringify": "^2.1.0",
"tslib": "^2.4.0"
},
"dependencies": {
"@graphql-tools/merge": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.3.0.tgz",
"integrity": "sha512-xRa7RAQok/0DD2YnjuqikMrr7dUAxTpdGtZ7BkvUUGhYs3B3p7reCAfvOVr1DJAqVToP7hdlMk+S5+Ylk+AaqA==",
"dev": true,
"requires": {
"@graphql-tools/utils": "8.8.0",
"tslib": "^2.4.0"
}
},
"@graphql-tools/schema": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz",
"integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==",
"dev": true,
"requires": {
"@graphql-tools/merge": "8.3.0",
"@graphql-tools/utils": "8.8.0",
"tslib": "^2.4.0",
"value-or-promise": "1.0.11"
}
},
"@graphql-tools/utils": {
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz",
"integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==",
"dev": true,
"requires": {
"tslib": "^2.4.0"
}
}
}
},
"@graphql-tools/schema": {
"version": "8.3.13",
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.13.tgz",
"integrity": "sha512-e+bx1VHj1i5v4HmhCYCar0lqdoLmkRi/CfV07rTqHR6CRDbIb/S/qDCajHLt7FCovQ5ozlI5sRVbBhzfq5H0PQ==",
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.5.0.tgz",
"integrity": "sha512-VeFtKjM3SA9/hCJJfr95aEdC3G0xIKM9z0Qdz4i+eC1g2fdZYnfWFt2ucW4IME+2TDd0enHlKzaV0qk2SLVUww==",
"dev": true,
"requires": {
"@graphql-tools/merge": "8.2.13",
"@graphql-tools/utils": "8.6.12",
"tslib": "~2.4.0",
"@graphql-tools/merge": "8.3.0",
"@graphql-tools/utils": "8.8.0",
"tslib": "^2.4.0",
"value-or-promise": "1.0.11"
}
},
"@graphql-tools/utils": {
"version": "8.6.12",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.6.12.tgz",
"integrity": "sha512-WQ91O40RC+UJgZ9K+IzevSf8oolR1QE+WQ21Oyc2fgDYYiqT0eSf+HVyhZr/8x9rVjn3N9HeqCsywbdmbljg0w==",
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.8.0.tgz",
"integrity": "sha512-KJrtx05uSM/cPYFdTnGAS1doL5bftJLAiFCDMZ8Vkifztz3BFn3gpFiy/o4wDtM8s39G46mxmt2Km/RmeltfGw==",
"dev": true,
"requires": {
"tslib": "~2.4.0"
"tslib": "^2.4.0"
}
},
"@graphql-typed-document-node/core": {
@@ -1691,18 +1663,54 @@
"requires": {
"@grpc/proto-loader": "^0.6.4",
"@types/node": ">=12.12.47"
},
"dependencies": {
"@grpc/proto-loader": {
"version": "0.6.13",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz",
"integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==",
"dev": true,
"requires": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^6.11.3",
"yargs": "^16.2.0"
}
},
"protobufjs": {
"version": "6.11.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
"integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
"dev": true,
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
"long": "^4.0.0"
}
}
}
},
"@grpc/proto-loader": {
"version": "0.6.13",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz",
"integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==",
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.0.tgz",
"integrity": "sha512-SGPZtVmqOvNfPFOA/nNPn+0Weqa5wubBgQ56+JgTbeLY2VezwtMjwPPFzh0kvQccwWT3a2TXT0ZGK/pJoOTk1A==",
"dev": true,
"requires": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^6.11.3",
"protobufjs": "^7.0.0",
"yargs": "^16.2.0"
}
},
@@ -1954,9 +1962,9 @@
}
},
"@nestjs/apollo": {
"version": "10.0.16",
"resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-10.0.16.tgz",
"integrity": "sha512-aN9jR0Y3F9wWxQ3qiVLbJ9GIKnqrG9QbztQbjIv1ODByKEXJnhvqXlCDTDj32DFYkZudsUjQEbdOda3EQNR5DQ==",
"version": "10.0.17",
"resolved": "https://registry.npmjs.org/@nestjs/apollo/-/apollo-10.0.17.tgz",
"integrity": "sha512-FQUaMtxQgn42jD2z2Z1Stqct4WO9SUj/dtDCj/b9XWW9GPWf8l8LRR8ftEiyrDBG7f0A2m2B0hSHhIpkGcFNOQ==",
"dev": true,
"requires": {
"iterall": "1.3.0",
@@ -2152,6 +2160,12 @@
"requires": {
"is-number": "^7.0.0"
}
},
"ws": {
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
"dev": true
}
}
},
@@ -2162,9 +2176,9 @@
"dev": true
},
"@nestjs/mongoose": {
"version": "9.1.1",
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-9.1.1.tgz",
"integrity": "sha512-sKZKI+walquKbCu3wSgO9X6a8MAkfsOlUTdPGv6IFo9NtTSp4sdrfiWFk2rQVc1N05J4Jdt94fnPKWJf+7U8uQ==",
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/@nestjs/mongoose/-/mongoose-9.2.0.tgz",
"integrity": "sha512-fC33b8nwR7C3y6hlTyKjiHQVU57SFOd3Dwa6alWj3BOhK5bHt8Ld6qOK2G35/XXPHjtSIk3LIKEqwyK5xGcmBA==",
"dev": true
},
"@nestjs/typeorm": {
@@ -2974,9 +2988,9 @@
"dev": true
},
"@types/node": {
"version": "18.0.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz",
"integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ=="
"version": "18.0.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.6.tgz",
"integrity": "sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw=="
},
"@types/normalize-package-data": {
"version": "2.4.0",
@@ -3753,9 +3767,9 @@
}
},
"apollo-server-core": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.9.0.tgz",
"integrity": "sha512-WS54C33cTriDaBIcj7ijWv/fgeJICcrQKlP1Cn6pnZp/eumpMraezLeJ3gFWAXprOuR2E3fZe64lNlup0fMu8w==",
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-3.10.0.tgz",
"integrity": "sha512-ln5drIk3oW/ycYhcYL9TvM7vRf7OZwJrgHWlnjnMakozBQIBSumdMi4pN001DhU9mVBWTfnmBv3CdcxJdGXIvA==",
"dev": true,
"requires": {
"@apollo/utils.keyvaluecache": "^1.0.1",
@@ -3767,11 +3781,11 @@
"@graphql-tools/schema": "^8.0.0",
"@josephg/resolvable": "^1.0.0",
"apollo-datasource": "^3.3.2",
"apollo-reporting-protobuf": "^3.3.1",
"apollo-reporting-protobuf": "^3.3.2",
"apollo-server-env": "^4.2.1",
"apollo-server-errors": "^3.3.1",
"apollo-server-plugin-base": "^3.6.1",
"apollo-server-types": "^3.6.1",
"apollo-server-plugin-base": "^3.6.2",
"apollo-server-types": "^3.6.2",
"async-retry": "^1.2.1",
"fast-json-stable-stringify": "^2.1.0",
"graphql-tag": "^2.11.0",
@@ -3780,6 +3794,56 @@
"sha.js": "^2.4.11",
"uuid": "^8.0.0",
"whatwg-mimetype": "^3.0.0"
},
"dependencies": {
"@apollo/protobufjs": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.4.tgz",
"integrity": "sha512-npVJ9NVU/pynj+SCU+fambvTneJDyCnif738DnZ7pCxdDtzeEz7WkpSIq5wNUmWm5Td55N+S2xfqZ+WP4hDLng==",
"dev": true,
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
}
},
"@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
"dev": true
},
"apollo-reporting-protobuf": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.2.tgz",
"integrity": "sha512-j1tx9tmkVdsLt1UPzBrvz90PdjAeKW157WxGn+aXlnnGfVjZLIRXX3x5t1NWtXvB7rVaAsLLILLtDHW382TSoQ==",
"dev": true,
"requires": {
"@apollo/protobufjs": "1.2.4"
}
},
"apollo-server-types": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.2.tgz",
"integrity": "sha512-9Z54S7NB+qW1VV+kmiqwU2Q6jxWfX89HlSGCGOo3zrkrperh85LrzABgN9S92+qyeHYd72noMDg2aI039sF3dg==",
"dev": true,
"requires": {
"@apollo/utils.keyvaluecache": "^1.0.1",
"@apollo/utils.logger": "^1.0.0",
"apollo-reporting-protobuf": "^3.3.2",
"apollo-server-env": "^4.2.1"
}
}
}
},
"apollo-server-env": {
@@ -3798,9 +3862,9 @@
"dev": true
},
"apollo-server-express": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.9.0.tgz",
"integrity": "sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA==",
"version": "3.10.0",
"resolved": "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-3.10.0.tgz",
"integrity": "sha512-ww3tZq9I/x3Oxtux8xlHAZcSB0NNQ17lRlY6yCLk1F+jCzdcjuj0x8XNg0GdTrMowt5v43o786bU9VYKD5OVnA==",
"dev": true,
"requires": {
"@types/accepts": "^1.3.5",
@@ -3809,8 +3873,8 @@
"@types/express": "4.17.13",
"@types/express-serve-static-core": "4.17.29",
"accepts": "^1.3.5",
"apollo-server-core": "^3.9.0",
"apollo-server-types": "^3.6.1",
"apollo-server-core": "^3.10.0",
"apollo-server-types": "^3.6.2",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"parseurl": "^1.3.3"
@@ -3840,24 +3904,112 @@
}
},
"apollo-server-plugin-base": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.1.tgz",
"integrity": "sha512-bFpxzWO0LTTtSAkGVBeaAtnQXJ5ZCi8eaLN/eMSju8RByifmF3Kr6gAqcOZhOH/geQEt3Y6G8n3bR0eHTGxljQ==",
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-3.6.2.tgz",
"integrity": "sha512-erWXjLOO1u7fxQkbxJ2cwSO7p0tYzNied91I1SJ9tikXZ/2eZUyDyvrpI+4g70kOdEi+AmJ5Fo8ahEXKJ75zdg==",
"dev": true,
"requires": {
"apollo-server-types": "^3.6.1"
"apollo-server-types": "^3.6.2"
},
"dependencies": {
"@apollo/protobufjs": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.4.tgz",
"integrity": "sha512-npVJ9NVU/pynj+SCU+fambvTneJDyCnif738DnZ7pCxdDtzeEz7WkpSIq5wNUmWm5Td55N+S2xfqZ+WP4hDLng==",
"dev": true,
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
}
},
"@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
"dev": true
},
"apollo-reporting-protobuf": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.2.tgz",
"integrity": "sha512-j1tx9tmkVdsLt1UPzBrvz90PdjAeKW157WxGn+aXlnnGfVjZLIRXX3x5t1NWtXvB7rVaAsLLILLtDHW382TSoQ==",
"dev": true,
"requires": {
"@apollo/protobufjs": "1.2.4"
}
},
"apollo-server-types": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.2.tgz",
"integrity": "sha512-9Z54S7NB+qW1VV+kmiqwU2Q6jxWfX89HlSGCGOo3zrkrperh85LrzABgN9S92+qyeHYd72noMDg2aI039sF3dg==",
"dev": true,
"requires": {
"@apollo/utils.keyvaluecache": "^1.0.1",
"@apollo/utils.logger": "^1.0.0",
"apollo-reporting-protobuf": "^3.3.2",
"apollo-server-env": "^4.2.1"
}
}
}
},
"apollo-server-types": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.1.tgz",
"integrity": "sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ==",
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-3.6.2.tgz",
"integrity": "sha512-9Z54S7NB+qW1VV+kmiqwU2Q6jxWfX89HlSGCGOo3zrkrperh85LrzABgN9S92+qyeHYd72noMDg2aI039sF3dg==",
"dev": true,
"requires": {
"@apollo/utils.keyvaluecache": "^1.0.1",
"@apollo/utils.logger": "^1.0.0",
"apollo-reporting-protobuf": "^3.3.1",
"apollo-reporting-protobuf": "^3.3.2",
"apollo-server-env": "^4.2.1"
},
"dependencies": {
"@apollo/protobufjs": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.4.tgz",
"integrity": "sha512-npVJ9NVU/pynj+SCU+fambvTneJDyCnif738DnZ7pCxdDtzeEz7WkpSIq5wNUmWm5Td55N+S2xfqZ+WP4hDLng==",
"dev": true,
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.0",
"@types/node": "^10.1.0",
"long": "^4.0.0"
}
},
"@types/node": {
"version": "10.17.60",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
"integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==",
"dev": true
},
"apollo-reporting-protobuf": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.3.2.tgz",
"integrity": "sha512-j1tx9tmkVdsLt1UPzBrvz90PdjAeKW157WxGn+aXlnnGfVjZLIRXX3x5t1NWtXvB7rVaAsLLILLtDHW382TSoQ==",
"dev": true,
"requires": {
"@apollo/protobufjs": "1.2.4"
}
}
}
},
"apollo-upload-client": {
@@ -4698,15 +4850,14 @@
"dev": true
},
"avvio": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/avvio/-/avvio-8.1.3.tgz",
"integrity": "sha512-tl9TC0yDRKzP6gFLkrInqPyx8AkfBC/0QRnwkE9Jo31+OJjLrE/73GJuE0QgSB0Vpv38CTJJZGqU9hczowclWw==",
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/avvio/-/avvio-8.2.0.tgz",
"integrity": "sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==",
"dev": true,
"requires": {
"archy": "^1.0.0",
"debug": "^4.0.0",
"fastq": "^1.6.1",
"queue-microtask": "^1.1.2"
"fastq": "^1.6.1"
},
"dependencies": {
"debug": {
@@ -6276,9 +6427,9 @@
}
},
"concurrently": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.2.tgz",
"integrity": "sha512-DcQkI0ruil5BA/g7Xy3EWySGrFJovF5RYAYxwGvv9Jf9q9B1v3jPFP2tl6axExNf1qgF30kjoNYrangZ0ey4Aw==",
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.3.0.tgz",
"integrity": "sha512-IiDwm+8DOcFEInca494A8V402tNTQlJaYq78RF2rijOrKEk/AOHTxhN4U1cp7GYKYX5Q6Ymh1dLTBlzIMN0ikA==",
"dev": true,
"requires": {
"chalk": "^4.1.0",
@@ -8595,9 +8746,9 @@
}
},
"core-js": {
"version": "3.23.4",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.4.tgz",
"integrity": "sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ==",
"version": "3.23.5",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.5.tgz",
"integrity": "sha512-7Vh11tujtAZy82da4duVreQysIoO2EvVrur7y6IzZkH1IHPSekuDi8Vuw1+YKjkbfWLRD7Nc9ICQ/sIUDutcyg==",
"dev": true
},
"core-util-is": {
@@ -8999,7 +9150,8 @@
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
"default-compare": {
"version": "1.0.0",
@@ -10843,13 +10995,13 @@
"dev": true
},
"fast-json-stringify": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.0.6.tgz",
"integrity": "sha512-iZM2VJ19wBOjznp9AQ3PEXTAvwcwJXDsz5xEoTs+31s/lCyOYrqHicXHzt0VoLz16pZStsWx3HIvRFB6AQaWeA==",
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.1.0.tgz",
"integrity": "sha512-IybGfbUc1DQgyrp9Myhwlr1Z5vjV37mBkdgcbuvsvUxv5fayG+cHlTQQpXH9nMwUPgp+5Y3RT7QDgx5zJ9NS3A==",
"requires": {
"@fastify/deepmerge": "^1.0.0",
"ajv": "^8.10.0",
"ajv-formats": "^2.1.1",
"deepmerge": "^4.2.2",
"fast-uri": "^2.1.0",
"rfdc": "^1.2.0"
},
@@ -10895,12 +11047,12 @@
"integrity": "sha512-qKRta6N7BWEFVlyonVY/V+BMLgFqktCUV0QjT259ekAIlbVrMaFnFLxJ4s/JPl4tou56S1BzPufI60bLe29fHA=="
},
"fastify": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-4.2.0.tgz",
"integrity": "sha512-0QXEp+8ceKc0fwVakeBLM/1Ss/+fc7a3auuygT+1GjbSAgHfwqxSucUuu0rYjziu32UgEZXfjItYN/a89HWKhw==",
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-4.2.1.tgz",
"integrity": "sha512-eyAWHN9+8IPTnhvGz+leseASGV/JZ75Y+jXXV7tid4awUjCMInY1gazZXuTD95xUW+Ve5vfgLjQ2i1i0/XJjdw==",
"dev": true,
"requires": {
"@fastify/ajv-compiler": "^3.1.0",
"@fastify/ajv-compiler": "^3.1.1",
"@fastify/error": "^3.0.0",
"@fastify/fast-json-stringify-compiler": "^4.0.0",
"abstract-logging": "^2.0.1",
@@ -10916,12 +11068,6 @@
"tiny-lru": "^8.0.2"
},
"dependencies": {
"@fastify/error": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.0.0.tgz",
"integrity": "sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==",
"dev": true
},
"process-warning": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.0.0.tgz",
@@ -14058,9 +14204,9 @@
"dev": true
},
"ioredis": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.1.0.tgz",
"integrity": "sha512-HYHnvwxFwefeUBj0hZFejLvd8Q/YNAfnZlZG/hSRxkRhXMs1H8soMEVccHd1WlLrKkynorXBsAtqDGskOdAfVQ==",
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.2.1.tgz",
"integrity": "sha512-+rgPUIawiT+L3am9FbUcwjI7R7KtLDUSJNYWF82NZmlUXCZELws7iJkVDuECQoNUHqZTf/EGn3uw9IA+PlBiyg==",
"dev": true,
"requires": {
"@ioredis/commands": "^1.1.1",
@@ -15664,40 +15810,21 @@
}
},
"light-my-request": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.0.0.tgz",
"integrity": "sha512-0OPHKV+uHgBOnRokzL1LqeMCnSAo5l/rZS7kyB6G1I8qxGCvhXpq1M6WK565Y9A5CSn50l3DVaHnJ5FCdpguZQ==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.2.0.tgz",
"integrity": "sha512-U5Dga8U59VKydIAnHt2XvPVyDfaHsDIpoO+/FPrm4Qnn1tHeczNnLrGjI1bko6BFWgFwTXjTiQN6PkohWiwwcA==",
"dev": true,
"requires": {
"ajv": "^8.1.0",
"cookie": "^0.5.0",
"process-warning": "^1.0.0",
"process-warning": "^2.0.0",
"set-cookie-parser": "^2.4.1"
},
"dependencies": {
"ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"cookie": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
"dev": true
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
}
}
},
@@ -16147,7 +16274,7 @@
"lodash.defaults": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz",
"integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=",
"integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==",
"dev": true
},
"lodash.escape": {
@@ -17655,18 +17782,24 @@
},
"dependencies": {
"denque": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz",
"integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"dev": true
},
"ip": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
"dev": true
},
"socks": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz",
"integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
"integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
"dev": true,
"requires": {
"ip": "^1.1.5",
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
}
}
@@ -17683,9 +17816,9 @@
}
},
"mongoose": {
"version": "6.4.4",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.4.4.tgz",
"integrity": "sha512-r6sp96veRNhNIWFtHHe4Lqak+ilgiExYnnMLhYTGdzjIMR90G1ayx0JKFVdHuC6dKNHGFX0ETJGbf36N8Romjg==",
"version": "6.4.5",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.4.5.tgz",
"integrity": "sha512-2E56DnJ4z5pWnBH4/pFGWuDFRn1Wt/JxU31Hcu0ZZtsd8I6piHavLawC9ND6GgyBpHov/aVLPLXtzB+HPKeKQg==",
"dev": true,
"requires": {
"bson": "^4.6.2",
@@ -19418,9 +19551,9 @@
},
"dependencies": {
"readable-stream": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.0.0.tgz",
"integrity": "sha512-Mf7ilWBP6AV3tF3MjtBrHMH3roso7wIrpgzCwt9ybvqiJQVWIEBMnp/W+S//yvYSsUUi2cJIwD7q7m57l0AqZw==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.1.0.tgz",
"integrity": "sha512-sVisi3+P2lJ2t0BPbpK629j8wRW06yKGJUcaLAGXPAUhyUxVJm7VsCTit1PFgT4JHUDMrGNR+ZjSKpzGaRF3zw==",
"dev": true,
"requires": {
"abort-controller": "^3.0.0"
@@ -19631,9 +19764,9 @@
}
},
"process-warning": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz",
"integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==",
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.0.0.tgz",
"integrity": "sha512-+MmoAXoUX+VTHAlwns0h+kFUWFs/3FZy+ZuchkgjyOu3oioLAo2LB5aCfKPh2+P9O18i3m43tUEv3YqttSy0Ww==",
"dev": true
},
"progress": {
@@ -19703,9 +19836,9 @@
}
},
"protobufjs": {
"version": "6.11.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
"integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.0.0.tgz",
"integrity": "sha512-ffNIEm+quOcYtQvHdW406v1NQmZSuqVklxsXk076BtuFnlYZfigLU+JOMrTD8TUOyqHYbRI/fSVNvgd25YeN3w==",
"dev": true,
"requires": {
"@protobufjs/aspromise": "^1.1.2",
@@ -19720,7 +19853,15 @@
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
"long": "^4.0.0"
"long": "^5.0.0"
},
"dependencies": {
"long": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.0.tgz",
"integrity": "sha512-9RTUNjK60eJbx3uz+TEGF7fUr29ZDxR5QzXcyDpeSfeH28S9ycINflOgOlppit5U+4kNTe83KQnMEerw7GmE8w==",
"dev": true
}
}
},
"proxy-addr": {
@@ -19806,12 +19947,6 @@
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
"dev": true
},
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
"quick-format-unescaped": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
@@ -20479,9 +20614,9 @@
}
},
"rxjs": {
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
"integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
"version": "7.5.6",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz",
"integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==",
"requires": {
"tslib": "^2.1.0"
}
@@ -20674,9 +20809,9 @@
"dev": true
},
"set-cookie-parser": {
"version": "2.4.8",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
"integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==",
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.5.0.tgz",
"integrity": "sha512-cHMAtSXilfyBePduZEBVPTCftTQWz6ehWJD5YNUg4mqvRosrrjKbo4WS8JkB0/RxonMoohHm7cOGH60mDkRQ9w==",
"dev": true
},
"set-value": {
@@ -22404,9 +22539,9 @@
}
},
"ts-node": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.2.tgz",
"integrity": "sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==",
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"dev": true,
"requires": {
"@cspotcode/source-map-support": "^0.8.0",
@@ -23590,9 +23725,9 @@
"dev": true
},
"ws": {
"version": "8.8.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz",
"integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==",
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
"integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
"dev": true
},
"xdg-basedir": {

View File

@@ -58,14 +58,14 @@
"cli-color": "2.0.3",
"cors": "2.8.5",
"express": "4.18.1",
"fast-json-stringify": "5.0.6",
"fast-json-stringify": "5.1.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.1.13",
"rxjs": "7.5.5",
"rxjs": "7.5.6",
"socket.io": "4.5.1",
"tslib": "2.4.0",
"uuid": "8.3.2"
@@ -81,10 +81,10 @@
"@fastify/static": "6.4.0",
"@fastify/view": "7.0.0",
"@grpc/grpc-js": "1.6.7",
"@grpc/proto-loader": "0.6.13",
"@nestjs/apollo": "10.0.16",
"@grpc/proto-loader": "0.7.0",
"@nestjs/apollo": "10.0.17",
"@nestjs/graphql": "10.0.18",
"@nestjs/mongoose": "9.1.1",
"@nestjs/mongoose": "9.2.0",
"@nestjs/typeorm": "9.0.0",
"@types/amqplib": "0.8.2",
"@types/bytes": "3.1.1",
@@ -96,7 +96,7 @@
"@types/gulp": "4.0.9",
"@types/http-errors": "1.8.2",
"@types/mocha": "9.1.1",
"@types/node": "18.0.3",
"@types/node": "18.0.6",
"@types/redis": "4.0.11",
"@types/reflect-metadata": "0.1.0",
"@types/sinon": "10.0.12",
@@ -106,8 +106,8 @@
"@typescript-eslint/parser": "4.33.0",
"amqp-connection-manager": "4.1.3",
"amqplib": "0.10.0",
"apollo-server-core": "3.9.0",
"apollo-server-express": "3.9.0",
"apollo-server-core": "3.10.0",
"apollo-server-express": "3.10.0",
"artillery": "1.7.9",
"body-parser": "1.20.0",
"bytes": "3.1.2",
@@ -117,9 +117,9 @@
"chai-as-promised": "7.1.1",
"clang-format": "1.8.0",
"commitlint-circle": "1.0.0",
"concurrently": "7.2.2",
"concurrently": "7.3.0",
"conventional-changelog": "3.1.25",
"core-js": "3.23.4",
"core-js": "3.23.5",
"coveralls": "3.1.1",
"delete-empty": "3.0.0",
"engine.io-client": "6.2.2",
@@ -128,7 +128,7 @@
"eslint-plugin-import": "2.26.0",
"eventsource": "2.0.2",
"fancy-log": "2.0.0",
"fastify": "4.2.0",
"fastify": "4.2.1",
"graphql": "15.8.0",
"graphql-tools": "8.3.0",
"gulp": "4.0.2",
@@ -140,17 +140,17 @@
"http-errors": "2.0.0",
"husky": "8.0.1",
"imports-loader": "4.0.0",
"ioredis": "5.1.0",
"ioredis": "5.2.1",
"json-loader": "0.5.7",
"kafkajs": "2.1.0",
"lerna": "2.11.0",
"lerna-changelog": "2.2.0",
"light-my-request": "5.0.0",
"light-my-request": "5.2.0",
"lint-staged": "13.0.3",
"markdown-table": "2.0.0",
"merge-graphql-schemas": "1.7.8",
"mocha": "10.0.0",
"mongoose": "6.4.4",
"mongoose": "6.4.5",
"mqtt": "4.3.7",
"multer": "1.4.4",
"mysql2": "2.3.3",
@@ -166,11 +166,11 @@
"subscriptions-transport-ws": "0.11.0",
"supertest": "6.2.4",
"ts-morph": "15.1.0",
"ts-node": "10.8.2",
"ts-node": "10.9.1",
"typeorm": "0.3.7",
"typescript": "4.7.4",
"wrk": "1.2.1",
"ws": "8.8.0"
"ws": "8.8.1"
},
"engines": {
"node": ">= 12.9.0"

View File

@@ -3,9 +3,22 @@ import { types } from 'util';
import { isFunction } from '../utils/shared.utils';
import { StreamableFileOptions } from './streamable-options.interface';
export interface StreamableHandlerResponse {
statusCode: number;
send: (msg: string) => void;
}
export class StreamableFile {
private readonly stream: Readable;
protected handleError: (
err: Error,
response: StreamableHandlerResponse,
) => void = (err: Error, res) => {
res.statusCode = 400;
res.send(err.message);
};
constructor(buffer: Uint8Array, options?: StreamableFileOptions);
constructor(readable: Readable, options?: StreamableFileOptions);
constructor(
@@ -38,4 +51,18 @@ export class StreamableFile {
length,
};
}
get errorHandler(): (
err: Error,
response: StreamableHandlerResponse,
) => void {
return this.handleError;
}
setErrorHandler(
handler: (err: Error, response: StreamableHandlerResponse) => void,
) {
this.handleError = handler;
return this;
}
}

View File

@@ -43,7 +43,7 @@ export interface ConfigurableModuleAsyncOptions<
* Function returning options (or a Promise resolving to options) to configure the
* cache module.
*/
useFactory?: (...args: unknown[]) => Promise<ModuleOptions> | ModuleOptions;
useFactory?: (...args: any[]) => Promise<ModuleOptions> | ModuleOptions;
/**
* Dependencies that a Factory may inject.
*/

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/common",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@common)",
"author": "Kamil Mysliwiec",
"homepage": "https://nestjs.com",

View File

@@ -0,0 +1,26 @@
import {
ClassProvider,
FactoryProvider,
Provider,
ValueProvider,
} from '@nestjs/common';
import { isUndefined } from '@nestjs/common/utils/shared.utils';
export function isClassProvider<T = any>(
provider: Provider,
): provider is ClassProvider<T> {
return Boolean((provider as ClassProvider<T>)?.useClass);
}
export function isValueProvider<T = any>(
provider: Provider,
): provider is ValueProvider<T> {
const providerValue = (provider as ValueProvider)?.useValue;
return !isUndefined(providerValue);
}
export function isFactoryProvider<T = any>(
provider: Provider,
): provider is FactoryProvider<T> {
return Boolean((provider as FactoryProvider).useFactory);
}

View File

@@ -778,7 +778,7 @@ export class Injector {
inquirer?: InstanceWrapper,
parentInquirer?: InstanceWrapper,
): Promise<any[]> {
const hosts = await Promise.all(
const hosts: Array<InstanceWrapper<any> | undefined> = await Promise.all(
metadata.map(async item =>
this.resolveScopedComponentHost(
item,
@@ -791,7 +791,7 @@ export class Injector {
const inquirerId = this.getInquirerId(inquirer);
return hosts.map(
item =>
item.getInstanceByContextId(
item?.getInstanceByContextId(
this.getContextId(contextId, item),
inquirerId,
).instance,

View File

@@ -13,6 +13,11 @@ import {
} from '@nestjs/common/utils/shared.utils';
import { iterate } from 'iterare';
import { STATIC_CONTEXT } from './constants';
import {
isClassProvider,
isFactoryProvider,
isValueProvider,
} from './helpers/provider-classifier';
import { InstanceToken, Module } from './module';
export const INSTANCE_METADATA_SYMBOL = Symbol.for('instance_metadata:cache');
@@ -384,22 +389,23 @@ export class InstanceWrapper<T = any> {
}
public mergeWith(provider: Provider) {
if (!isUndefined((provider as ValueProvider).useValue)) {
if (isValueProvider(provider)) {
this.metatype = null;
this.inject = null;
this.scope = Scope.DEFAULT;
this.setInstanceByContextId(STATIC_CONTEXT, {
instance: (provider as ValueProvider).useValue,
instance: provider.useValue,
isResolved: true,
isPending: false,
});
} else if ((provider as ClassProvider).useClass) {
} else if (isClassProvider(provider)) {
this.inject = null;
this.metatype = (provider as ClassProvider).useClass;
} else if ((provider as FactoryProvider).useFactory) {
this.metatype = (provider as FactoryProvider).useFactory;
this.inject = (provider as FactoryProvider).inject || [];
this.metatype = provider.useClass;
} else if (isFactoryProvider(provider)) {
this.metatype = provider.useFactory;
this.inject = provider.inject || [];
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/core",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@core)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -36,7 +36,7 @@
"uuid": "8.3.2"
},
"devDependencies": {
"@nestjs/common": "9.0.2"
"@nestjs/common": "9.0.5"
},
"peerDependencies": {
"@nestjs/common": "^9.0.0",

View File

@@ -0,0 +1,132 @@
import { ClassProvider, FactoryProvider, ValueProvider } from '@nestjs/common';
import { expect } from 'chai';
import {
isClassProvider,
isFactoryProvider,
isValueProvider,
} from '../../../injector/helpers/provider-classifier';
describe('provider classifier', () => {
describe('isClassProvider', () => {
it('should return true if useClass is present', () => {
const classProvider: ClassProvider = {
useClass: class TestClass {},
provide: 'token',
};
expect(isClassProvider(classProvider)).to.be.true;
});
it('should return false if useClass is undefined', () => {
const classProvider: ClassProvider = {
useClass: undefined,
provide: 'token',
};
expect(isClassProvider(classProvider)).to.be.false;
});
it('should return false if useClass is not present', () => {
const classProvider = {
provide: 'token',
};
expect(isClassProvider(classProvider as ClassProvider)).to.be.false;
});
it('should return false if provider is undefined', () => {
const classProvider = undefined;
expect(isClassProvider(classProvider as ClassProvider)).to.be.false;
});
});
describe('isValueProvider', () => {
it('should return true if useValue is not undefined', () => {
const valueProvider: ValueProvider = {
useValue: 'value',
provide: 'token',
};
expect(isValueProvider(valueProvider)).to.be.true;
});
it('should return true if useValue is "false"', () => {
const valueProvider: ValueProvider = {
useValue: false,
provide: 'token',
};
expect(isValueProvider(valueProvider)).to.be.true;
});
it('should return true if useValue is "null"', () => {
const valueProvider: ValueProvider = {
useValue: null,
provide: 'token',
};
expect(isValueProvider(valueProvider)).to.be.true;
});
it('should return true if useValue is an empty string', () => {
const valueProvider: ValueProvider = {
useValue: null,
provide: '',
};
expect(isValueProvider(valueProvider)).to.be.true;
});
it('should return false if useValue is undefined', () => {
const valueProvider: ValueProvider = {
useValue: undefined,
provide: 'token',
};
expect(isValueProvider(valueProvider)).to.be.false;
});
it('should return false if useValue is not present', () => {
const valueProvider = {
provide: 'token',
};
expect(isValueProvider(valueProvider as ValueProvider)).to.be.false;
});
it('should return false if provider is undefined', () => {
const valueProvider = undefined;
expect(isValueProvider(valueProvider as ValueProvider)).to.be.false;
});
});
describe('isFactoryProvider', () => {
it('should return true if useFactory is present', () => {
const factoryProvider: FactoryProvider = {
provide: 'token',
useFactory: () => {},
};
expect(isFactoryProvider(factoryProvider)).to.be.true;
});
it('should return false if useFactory is not present', () => {
const factoryProvider = {
provide: 'token',
};
expect(isFactoryProvider(factoryProvider as FactoryProvider)).to.be.false;
});
it('should return false if useFactory is undefined', () => {
const factoryProvider: FactoryProvider = {
provide: 'token',
useFactory: undefined,
};
expect(isFactoryProvider(factoryProvider as FactoryProvider)).to.be.false;
});
});
});

View File

@@ -434,4 +434,68 @@ describe('InstanceWrapper', () => {
});
});
});
describe('mergeWith', () => {
describe('when provider is a ValueProvider', () => {
it('should provide the given value in the STATIC_CONTEXT', () => {
const wrapper = new InstanceWrapper();
wrapper.mergeWith({
useValue: 'value',
provide: 'token',
});
expect(
wrapper.getInstanceByContextId(STATIC_CONTEXT).instance,
).to.be.equal('value');
});
});
describe('when provider is a ClassProvider', () => {
it('should alter the instance wrapper metatype with the given class', () => {
const wrapper = new InstanceWrapper();
wrapper.mergeWith({
useClass: TestClass,
provide: 'token',
});
expect(wrapper.metatype).to.be.eql(TestClass);
});
});
describe('when provider is a FactoryProvider', () => {
describe('and it has injected dependencies', () => {
it('should alter the instance wrapper metatype and inject attributes with the given values', () => {
const wrapper = new InstanceWrapper();
const factory = (_dependency1: any, _dependency2: any) => {};
const injectedDependencies = ['dependency1', 'dependency2'];
wrapper.mergeWith({
provide: 'token',
useFactory: factory,
inject: injectedDependencies,
});
expect(wrapper.metatype).to.be.eql(factory);
expect(wrapper.inject).to.be.eq(injectedDependencies);
});
});
describe('and it has no injected dependencies', () => {
it('should alter the instance wrapper metatype with the given values', () => {
const wrapper = new InstanceWrapper();
const factory = (_dependency1: any, _dependency2: any) => {};
wrapper.mergeWith({
provide: 'token',
useFactory: factory,
});
expect(wrapper.metatype).to.be.eql(factory);
expect(wrapper.inject).to.be.eql([]);
});
});
});
});
});

View File

@@ -16,6 +16,7 @@ import {
RQM_DEFAULT_QUEUE,
RQM_DEFAULT_QUEUE_OPTIONS,
RQM_DEFAULT_URL,
RQM_DEFAULT_NO_ASSERT,
} from '../constants';
import { RmqUrl } from '../external/rmq-url.interface';
import { ReadPacket, RmqOptions, WritePacket } from '../interfaces';
@@ -38,6 +39,7 @@ export class ClientRMQ extends ClientProxy {
protected responseEmitter: EventEmitter;
protected replyQueue: string;
protected persistent: boolean;
protected noAssert: boolean;
constructor(protected readonly options: RmqOptions['options']) {
super();
@@ -51,6 +53,9 @@ export class ClientRMQ extends ClientProxy {
this.getOptionsProp(this.options, 'replyQueue') || REPLY_QUEUE;
this.persistent =
this.getOptionsProp(this.options, 'persistent') || RQM_DEFAULT_PERSISTENT;
this.noAssert =
this.getOptionsProp(this.options, 'noAssert') || RQM_DEFAULT_NO_ASSERT;
loadPackage('amqplib', ClientRMQ.name, () => require('amqplib'));
rqmPackage = loadPackage('amqp-connection-manager', ClientRMQ.name, () =>
require('amqp-connection-manager'),
@@ -143,7 +148,9 @@ export class ClientRMQ extends ClientProxy {
this.getOptionsProp(this.options, 'isGlobalPrefetchCount') ||
RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT;
await channel.assertQueue(this.queue, this.queueOptions);
if (!this.queueOptions.noAssert) {
await channel.assertQueue(this.queue, this.queueOptions);
}
await channel.prefetch(prefetchCount, isGlobalPrefetchCount);
this.responseEmitter = new EventEmitter();

View File

@@ -39,6 +39,7 @@ export const RQM_DEFAULT_IS_GLOBAL_PREFETCH_COUNT = false;
export const RQM_DEFAULT_QUEUE_OPTIONS = {};
export const RQM_DEFAULT_NOACK = true;
export const RQM_DEFAULT_PERSISTENT = false;
export const RQM_DEFAULT_NO_ASSERT = false;
export const GRPC_DEFAULT_PROTO_LOADER = '@grpc/proto-loader';
export const NO_EVENT_HANDLER = (text: TemplateStringsArray, pattern: string) =>

View File

@@ -6,6 +6,7 @@ type KafkaContextArgs = [
partition: number,
topic: string,
consumer: Consumer,
heartbeat: () => Promise<void>,
];
export class KafkaContext extends BaseRpcContext<KafkaContextArgs> {
@@ -40,4 +41,11 @@ export class KafkaContext extends BaseRpcContext<KafkaContextArgs> {
getConsumer() {
return this.args[3];
}
/**
* Returns the Kafka heartbeat callback.
*/
getHeartbeat() {
return this.args[4];
}
}

View File

@@ -5,7 +5,6 @@
*/
/// <reference types="node" />
import * as net from 'net';
import * as tls from 'tls';
@@ -17,17 +16,44 @@ type XOR<T, U> = T | U extends object
export declare class Kafka {
constructor(config: KafkaConfig);
producer(config?: ProducerConfig): Producer;
consumer(config?: ConsumerConfig): Consumer;
consumer(config: ConsumerConfig): Consumer;
admin(config?: AdminConfig): Admin;
logger(): Logger;
}
export type BrokersFunction = () => string[] | Promise<string[]>;
type SaslAuthenticationRequest = {
encode: () => Buffer | Promise<Buffer>;
};
type SaslAuthenticationResponse<ParseResult> = {
decode: (rawResponse: Buffer) => Buffer | Promise<Buffer>;
parse: (data: Buffer) => ParseResult;
};
type Authenticator = {
authenticate: () => Promise<void>;
};
type AuthenticationProviderArgs = {
host: string;
port: number;
logger: Logger;
saslAuthenticate: <ParseResult>(
request: SaslAuthenticationRequest,
response?: SaslAuthenticationResponse<ParseResult>,
) => Promise<ParseResult | void>;
};
type Mechanism = {
mechanism: string;
authenticationProvider: (args: AuthenticationProviderArgs) => Authenticator;
};
export interface KafkaConfig {
brokers: string[] | BrokersFunction;
ssl?: tls.ConnectionOptions | boolean;
sasl?: SASLOptions;
sasl?: SASLOptions | Mechanism;
clientId?: string;
connectionTimeout?: number;
authenticationTimeout?: number;
@@ -101,11 +127,18 @@ export interface PartitionerArgs {
export type ICustomPartitioner = () => (args: PartitionerArgs) => number;
export type DefaultPartitioner = ICustomPartitioner;
export type JavaCompatiblePartitioner = ICustomPartitioner;
export type LegacyPartitioner = ICustomPartitioner;
export let Partitioners: {
DefaultPartitioner: DefaultPartitioner;
JavaCompatiblePartitioner: JavaCompatiblePartitioner;
LegacyPartitioner: LegacyPartitioner;
/**
* @deprecated Use DefaultPartitioner instead
*
* The JavaCompatiblePartitioner was renamed DefaultPartitioner
* and made to be the default in 2.0.0.
*/
JavaCompatiblePartitioner: DefaultPartitioner;
};
export type PartitionMetadata = {
@@ -118,7 +151,7 @@ export type PartitionMetadata = {
};
export interface IHeaders {
[key: string]: Buffer | string | undefined;
[key: string]: Buffer | string | (Buffer | string)[] | undefined;
}
export interface ConsumerConfig {
@@ -141,7 +174,11 @@ export interface ConsumerConfig {
rackId?: string;
}
export type PartitionAssigner = (config: { cluster: Cluster }) => Assigner;
export type PartitionAssigner = (config: {
cluster: Cluster;
groupId: string;
logger: Logger;
}) => Assigner;
export interface CoordinatorMetadata {
errorCode: number;
@@ -153,6 +190,10 @@ export interface CoordinatorMetadata {
}
export type Cluster = {
getNodeIds(): number[];
metadata(): Promise<BrokerMetadata>;
removeBroker(options: { host: string; port: number }): void;
addMultipleTargetTopics(topics: string[]): Promise<void>;
isConnected(): boolean;
connect(): Promise<void>;
disconnect(): Promise<void>;
@@ -178,10 +219,7 @@ export type Cluster = {
partitions: Array<{ partition: number }>;
} & XOR<{ fromBeginning: boolean }, { fromTimestamp: number }>
>,
): Promise<{
topic: string;
partitions: Array<{ partition: number; offset: string }>;
}>;
): Promise<TopicOffsets[]>;
};
export type Assignment = { [topic: string]: number[] };
@@ -211,6 +249,7 @@ export interface RetryOptions {
factor?: number;
multiplier?: number;
retries?: number;
restartOnFailure?: (e: Error) => Promise<boolean>;
}
export interface AdminConfig {
@@ -222,7 +261,7 @@ export interface ITopicConfig {
numPartitions?: number;
replicationFactor?: number;
replicaAssignment?: object[];
configEntries?: object[];
configEntries?: IResourceConfigEntry[];
}
export interface ITopicPartitionConfig {
@@ -236,20 +275,6 @@ export interface ITopicMetadata {
partitions: PartitionMetadata[];
}
/**
* @deprecated
* Use ConfigResourceTypes or AclResourceTypes
*/
export enum ResourceTypes {
UNKNOWN = 0,
ANY = 1,
TOPIC = 2,
GROUP = 3,
CLUSTER = 4,
TRANSACTIONAL_ID = 5,
DELEGATION_TOKEN = 6,
}
export enum AclResourceTypes {
UNKNOWN = 0,
ANY = 1,
@@ -267,6 +292,16 @@ export enum ConfigResourceTypes {
BROKER_LOGGER = 8,
}
export enum ConfigSource {
UNKNOWN = 0,
TOPIC_CONFIG = 1,
DYNAMIC_BROKER_CONFIG = 2,
DYNAMIC_DEFAULT_BROKER_CONFIG = 3,
STATIC_BROKER_CONFIG = 4,
DEFAULT_CONFIG = 5,
DYNAMIC_BROKER_LOGGER_CONFIG = 6,
}
export enum AclPermissionTypes {
UNKNOWN = 0,
ANY = 1,
@@ -299,7 +334,7 @@ export enum ResourcePatternTypes {
}
export interface ResourceConfigQuery {
type: ResourceTypes | ConfigResourceTypes;
type: ConfigResourceTypes;
name: string;
configNames?: string[];
}
@@ -308,6 +343,7 @@ export interface ConfigEntries {
configName: string;
configValue: string;
isDefault: boolean;
configSource: ConfigSource;
isSensitive: boolean;
readOnly: boolean;
configSynonyms: ConfigSynonyms[];
@@ -316,7 +352,7 @@ export interface ConfigEntries {
export interface ConfigSynonyms {
configName: string;
configValue: string;
configSource: number;
configSource: ConfigSource;
}
export interface DescribeConfigResponse {
@@ -325,15 +361,20 @@ export interface DescribeConfigResponse {
errorCode: number;
errorMessage: string;
resourceName: string;
resourceType: ResourceTypes | ConfigResourceTypes;
resourceType: ConfigResourceTypes;
}[];
throttleTime: number;
}
export interface IResourceConfig {
type: ResourceTypes | ConfigResourceTypes;
export interface IResourceConfigEntry {
name: string;
configEntries: { name: string; value: string }[];
value: string;
}
export interface IResourceConfig {
type: ConfigResourceTypes;
name: string;
configEntries: IResourceConfigEntry[];
}
type ValueOf<T> = T[keyof T];
@@ -387,11 +428,11 @@ export type RequestQueueSizeEvent = InstrumentationEvent<{
queueSize: number;
}>;
export interface SeekEntry {
partition: number;
offset: string;
}
export type SeekEntry = PartitionOffset;
export type FetchOffsetsPartition = PartitionOffset & {
metadata: string | null;
};
export interface Acl {
principal: string;
host: string;
@@ -408,7 +449,7 @@ export interface AclResource {
export type AclEntry = Acl & AclResource;
export type DescribeAclResource = AclResource & {
acl: Acl[];
acls: Acl[];
};
export interface DescribeAclResponse {
@@ -472,9 +513,9 @@ export type Admin = {
}): Promise<{ topics: Array<ITopicMetadata> }>;
fetchOffsets(options: {
groupId: string;
topic: string;
topics?: string[];
resolveOffsets?: boolean;
}): Promise<Array<SeekEntry & { metadata: string | null }>>;
}): Promise<Array<{ topic: string; partitions: FetchOffsetsPartition[] }>>;
fetchTopicOffsets(
topic: string,
): Promise<Array<SeekEntry & { high: string; low: string }>>;
@@ -517,10 +558,30 @@ export type Admin = {
}): Promise<void>;
logger(): Logger;
on(
eventName: ValueOf<AdminEvents>,
listener: (...args: any[]) => void,
eventName: AdminEvents['CONNECT'],
listener: (event: ConnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
events: AdminEvents;
on(
eventName: AdminEvents['DISCONNECT'],
listener: (event: DisconnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: AdminEvents['REQUEST'],
listener: (event: RequestEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: AdminEvents['REQUEST_QUEUE_SIZE'],
listener: (event: RequestQueueSizeEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: AdminEvents['REQUEST_TIMEOUT'],
listener: (event: RequestTimeoutEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ValueOf<AdminEvents>,
listener: (event: InstrumentationEvent<any>) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
readonly events: AdminEvents;
};
export let PartitionAssigners: { roundRobin: PartitionAssigner };
@@ -575,38 +636,44 @@ export type Logger = {
error: (message: string, extra?: object) => void;
warn: (message: string, extra?: object) => void;
debug: (message: string, extra?: object) => void;
namespace: (namespace: string, logLevel?: logLevel) => Logger;
setLogLevel: (logLevel: logLevel) => void;
};
export interface BrokerMetadata {
brokers: Array<{ nodeId: number; host: string; port: number; rack?: string }>;
topicMetadata: Array<{
topicErrorCode: number;
topic: string;
partitionMetadata: PartitionMetadata[];
}>;
}
export interface ApiVersions {
[apiKey: number]: {
minVersion: number;
maxVersion: number;
};
}
export type Broker = {
isConnected(): boolean;
connect(): Promise<void>;
disconnect(): Promise<void>;
apiVersions(): Promise<{
[apiKey: number]: { minVersion: number; maxVersion: number };
}>;
metadata(topics: string[]): Promise<{
brokers: Array<{
nodeId: number;
host: string;
port: number;
rack?: string;
}>;
topicMetadata: Array<{
topicErrorCode: number;
topic: number;
partitionMetadata: PartitionMetadata[];
}>;
}>;
apiVersions(): Promise<ApiVersions>;
metadata(topics: string[]): Promise<BrokerMetadata>;
describeGroups: (options: { groupIds: string[] }) => Promise<any>;
offsetCommit(request: {
groupId: string;
groupGenerationId: number;
memberId: string;
retentionTime?: number;
topics: Array<{
topic: string;
partitions: Array<{ partition: number; offset: string }>;
}>;
topics: TopicOffsets[];
}): Promise<any>;
offsetFetch(request: { groupId: string; topics: TopicOffsets[] }): Promise<{
responses: TopicOffsets[];
}>;
fetch(request: {
replicaId?: number;
isolationLevel?: number;
@@ -623,17 +690,45 @@ export type Broker = {
}>;
rackId?: string;
}): Promise<any>;
produce(request: {
topicData: Array<{
topic: string;
partitions: Array<{
partition: number;
firstSequence?: number;
messages: Message[];
}>;
}>;
transactionalId?: string;
producerId?: number;
producerEpoch?: number;
acks?: number;
timeout?: number;
compression?: CompressionTypes;
}): Promise<any>;
};
export type KafkaMessage = {
key: Buffer;
interface MessageSetEntry {
key: Buffer | null;
value: Buffer | null;
timestamp: string;
size: number;
attributes: number;
offset: string;
headers?: IHeaders;
};
size: number;
headers?: never;
}
interface RecordBatchEntry {
key: Buffer | null;
value: Buffer | null;
timestamp: string;
attributes: number;
offset: string;
headers: IHeaders;
size?: never;
}
export type KafkaMessage = MessageSetEntry | RecordBatchEntry;
export interface ProducerRecord {
topic: string;
@@ -697,10 +792,30 @@ export type Producer = Sender & {
connect(): Promise<void>;
disconnect(): Promise<void>;
isIdempotent(): boolean;
events: ProducerEvents;
readonly events: ProducerEvents;
on(
eventName: ProducerEvents['CONNECT'],
listener: (event: ConnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ProducerEvents['DISCONNECT'],
listener: (event: DisconnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ProducerEvents['REQUEST'],
listener: (event: RequestEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ProducerEvents['REQUEST_QUEUE_SIZE'],
listener: (event: RequestQueueSizeEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ProducerEvents['REQUEST_TIMEOUT'],
listener: (event: RequestTimeoutEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ValueOf<ProducerEvents>,
listener: (...args: any[]) => void,
listener: (event: InstrumentationEvent<any>) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
transaction(): Promise<Transaction>;
logger(): Logger;
@@ -750,16 +865,18 @@ export type GroupDescriptions = {
};
export type TopicPartitions = { topic: string; partitions: number[] };
export type TopicPartitionOffsetAndMetadata = {
export type TopicPartition = {
topic: string;
partition: number;
};
export type TopicPartitionOffset = TopicPartition & {
offset: string;
};
export type TopicPartitionOffsetAndMetadata = TopicPartitionOffset & {
metadata?: string | null;
};
// TODO: Remove with 2.x
export type TopicPartitionOffsetAndMedata = TopicPartitionOffsetAndMetadata;
export type Batch = {
topic: string;
partition: number;
@@ -795,6 +912,7 @@ export type ConsumerEvents = {
DISCONNECT: 'consumer.disconnect';
STOP: 'consumer.stop';
CRASH: 'consumer.crash';
REBALANCING: 'consumer.rebalancing';
RECEIVED_UNSUBSCRIBED_TOPICS: 'consumer.received_unsubscribed_topics';
REQUEST: 'consumer.network.request';
REQUEST_TIMEOUT: 'consumer.network.request_timeout';
@@ -809,13 +927,7 @@ export type ConsumerCommitOffsetsEvent = InstrumentationEvent<{
groupId: string;
memberId: string;
groupGenerationId: number;
topics: {
topic: string;
partitions: {
offset: string;
partition: string;
}[];
}[];
topics: TopicOffsets[];
}>;
export interface IMemberAssignment {
[key: string]: number[];
@@ -829,9 +941,11 @@ export type ConsumerGroupJoinEvent = InstrumentationEvent<{
memberId: string;
memberAssignment: IMemberAssignment;
}>;
export type ConsumerFetchStartEvent = InstrumentationEvent<{ nodeId: number }>;
export type ConsumerFetchEvent = InstrumentationEvent<{
numberOfBatches: number;
duration: number;
nodeId: number;
}>;
interface IBatchProcessEvent {
topic: string;
@@ -853,6 +967,10 @@ export type ConsumerCrashEvent = InstrumentationEvent<{
groupId: string;
restart: boolean;
}>;
export type ConsumerRebalancingEvent = InstrumentationEvent<{
groupId: string;
memberId: string;
}>;
export type ConsumerReceivedUnsubcribedTopicsEvent = InstrumentationEvent<{
groupId: string;
generationId: number;
@@ -870,12 +988,15 @@ export interface EachMessagePayload {
topic: string;
partition: number;
message: KafkaMessage;
heartbeat(): Promise<void>;
pause(): () => void;
}
export interface EachBatchPayload {
batch: Batch;
resolveOffset(offset: string): void;
heartbeat(): Promise<void>;
pause(): () => void;
commitOffsetsIfNecessary(offsets?: Offsets): Promise<void>;
uncommittedOffsets(): OffsetsByTopicPartition;
isRunning(): boolean;
@@ -894,45 +1015,117 @@ export type ConsumerEachMessagePayload = EachMessagePayload;
*/
export type ConsumerEachBatchPayload = EachBatchPayload;
export type EachBatchHandler = (payload: EachBatchPayload) => Promise<void>;
export type EachMessageHandler = (payload: EachMessagePayload) => Promise<void>;
export type ConsumerRunConfig = {
autoCommit?: boolean;
autoCommitInterval?: number | null;
autoCommitThreshold?: number | null;
eachBatchAutoResolve?: boolean;
partitionsConsumedConcurrently?: number;
eachBatch?: (payload: EachBatchPayload) => Promise<void>;
eachMessage?: (payload: EachMessagePayload) => Promise<void>;
eachBatch?: EachBatchHandler;
eachMessage?: EachMessageHandler;
};
/**
* @deprecated Replaced by ConsumerSubscribeTopics
*/
export type ConsumerSubscribeTopic = {
topic: string | RegExp;
fromBeginning?: boolean;
};
export type ConsumerSubscribeTopics = {
topics: (string | RegExp)[];
fromBeginning?: boolean;
};
export type Consumer = {
connect(): Promise<void>;
disconnect(): Promise<void>;
subscribe(topic: ConsumerSubscribeTopic): Promise<void>;
subscribe(
subscription: ConsumerSubscribeTopics | ConsumerSubscribeTopic,
): Promise<void>;
stop(): Promise<void>;
run(config?: ConsumerRunConfig): Promise<void>;
commitOffsets(
topicPartitions: Array<TopicPartitionOffsetAndMetadata>,
): Promise<void>;
seek(topicPartition: {
topic: string;
partition: number;
offset: string;
}): void;
seek(topicPartitionOffset: TopicPartitionOffset): void;
describeGroup(): Promise<GroupDescription>;
pause(topics: Array<{ topic: string; partitions?: number[] }>): void;
paused(): TopicPartitions[];
resume(topics: Array<{ topic: string; partitions?: number[] }>): void;
on(
eventName: ConsumerEvents['HEARTBEAT'],
listener: (event: ConsumerHeartbeatEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['COMMIT_OFFSETS'],
listener: (event: ConsumerCommitOffsetsEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['GROUP_JOIN'],
listener: (event: ConsumerGroupJoinEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['FETCH_START'],
listener: (event: ConsumerFetchStartEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['FETCH'],
listener: (event: ConsumerFetchEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['START_BATCH_PROCESS'],
listener: (event: ConsumerStartBatchProcessEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['END_BATCH_PROCESS'],
listener: (event: ConsumerEndBatchProcessEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['CONNECT'],
listener: (event: ConnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['DISCONNECT'],
listener: (event: DisconnectEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['STOP'],
listener: (event: InstrumentationEvent<null>) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['CRASH'],
listener: (event: ConsumerCrashEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['REBALANCING'],
listener: (event: ConsumerRebalancingEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['RECEIVED_UNSUBSCRIBED_TOPICS'],
listener: (event: ConsumerReceivedUnsubcribedTopicsEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['REQUEST'],
listener: (event: RequestEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['REQUEST_TIMEOUT'],
listener: (event: RequestTimeoutEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ConsumerEvents['REQUEST_QUEUE_SIZE'],
listener: (event: RequestQueueSizeEvent) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
on(
eventName: ValueOf<ConsumerEvents>,
listener: (...args: any[]) => void,
listener: (event: InstrumentationEvent<any>) => void,
): RemoveInstrumentationEventListener<typeof eventName>;
logger(): Logger;
events: ConsumerEvents;
readonly events: ConsumerEvents;
};
export enum CompressionTypes {
@@ -943,7 +1136,7 @@ export enum CompressionTypes {
ZSTD = 4,
}
export let CompressionCodecs: {
export var CompressionCodecs: {
[CompressionTypes.GZIP]: () => any;
[CompressionTypes.Snappy]: () => any;
[CompressionTypes.LZ4]: () => any;
@@ -955,6 +1148,7 @@ export declare class KafkaJSError extends Error {
readonly name: string;
readonly retriable: boolean;
readonly helpUrl?: string;
readonly cause?: Error;
constructor(e: Error | string, metadata?: KafkaJSErrorMetadata);
}
@@ -977,7 +1171,6 @@ export declare class KafkaJSOffsetOutOfRange extends KafkaJSProtocolError {
export declare class KafkaJSNumberOfRetriesExceeded extends KafkaJSNonRetriableError {
readonly stack: string;
readonly originalError: Error;
readonly retryCount: number;
readonly retryTime: number;
constructor(

View File

@@ -86,7 +86,8 @@ export interface TcpOptions {
export interface RedisOptions {
transport?: Transport.REDIS;
options?: {
url?: string;
host?: string;
port?: number;
retryAttempts?: number;
retryDelay?: number;
serializer?: Serializer;
@@ -181,6 +182,7 @@ export interface RmqOptions {
replyQueue?: string;
persistent?: boolean;
headers?: Record<string, string>;
noAssert?: boolean;
};
}

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/microservices",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@microservices)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -21,8 +21,8 @@
"tslib": "2.4.0"
},
"devDependencies": {
"@nestjs/common": "9.0.2",
"@nestjs/core": "9.0.2"
"@nestjs/common": "9.0.5",
"@nestjs/core": "9.0.5"
},
"peerDependencies": {
"@grpc/grpc-js": "*",

View File

@@ -167,6 +167,7 @@ export class ServerKafka extends Server implements CustomTransportStrategy {
payload.partition,
payload.topic,
this.consumer,
payload.heartbeat,
]);
const handler = this.getHandlerByPattern(packet.pattern);
// if the correlation id or reply topic is not set

View File

@@ -16,6 +16,7 @@ import {
RQM_DEFAULT_QUEUE,
RQM_DEFAULT_QUEUE_OPTIONS,
RQM_DEFAULT_URL,
RQM_DEFAULT_NO_ASSERT,
} from '../constants';
import { RmqContext } from '../ctx-host';
import { Transport } from '../enums';
@@ -40,6 +41,7 @@ export class ServerRMQ extends Server implements CustomTransportStrategy {
protected readonly prefetchCount: number;
protected readonly queueOptions: any;
protected readonly isGlobalPrefetchCount: boolean;
protected readonly noAssert: boolean;
constructor(protected readonly options: RmqOptions['options']) {
super();
@@ -55,6 +57,8 @@ export class ServerRMQ extends Server implements CustomTransportStrategy {
this.queueOptions =
this.getOptionsProp(this.options, 'queueOptions') ||
RQM_DEFAULT_QUEUE_OPTIONS;
this.noAssert =
this.getOptionsProp(this.options, 'noAssert') || RQM_DEFAULT_NO_ASSERT;
this.loadPackage('amqplib', ServerRMQ.name, () => require('amqplib'));
rqmPackage = this.loadPackage(
@@ -115,7 +119,9 @@ export class ServerRMQ extends Server implements CustomTransportStrategy {
public async setupChannel(channel: any, callback: Function) {
const noAck = this.getOptionsProp(this.options, 'noAck', RQM_DEFAULT_NOACK);
await channel.assertQueue(this.queue, this.queueOptions);
if (!this.queueOptions.noAssert) {
await channel.assertQueue(this.queue, this.queueOptions);
}
await channel.prefetch(this.prefetchCount, this.isGlobalPrefetchCount);
channel.consume(
this.queue,

View File

@@ -22,6 +22,8 @@ describe('ClientKafka', () => {
const timestamp = new Date().toISOString();
const attributes = 1;
const messageValue = 'test-message';
const heartbeat = async () => {};
const pause = () => () => {};
// message
const message: KafkaMessage = {
@@ -57,6 +59,8 @@ describe('ClientKafka', () => {
},
message,
),
heartbeat,
pause,
};
const payloadDisposed: EachMessagePayload = {
@@ -75,6 +79,8 @@ describe('ClientKafka', () => {
value: { test: true },
},
),
heartbeat,
pause,
};
const payloadError: EachMessagePayload = {
@@ -93,6 +99,8 @@ describe('ClientKafka', () => {
value: null,
},
),
heartbeat,
pause,
};
const payloadWithoutCorrelation: EachMessagePayload = {
@@ -104,6 +112,8 @@ describe('ClientKafka', () => {
},
message,
),
heartbeat,
pause,
};
// deserialized payload
@@ -118,6 +128,8 @@ describe('ClientKafka', () => {
},
deserializedMessage,
),
heartbeat,
pause,
};
const deserializedPayloadDisposed: EachMessagePayload = {
@@ -136,6 +148,8 @@ describe('ClientKafka', () => {
value: { test: true },
},
),
heartbeat,
pause,
};
const deserializedPayloadError: EachMessagePayload = {
@@ -154,6 +168,8 @@ describe('ClientKafka', () => {
value: null,
},
),
heartbeat,
pause,
};
let client: ClientKafka;

View File

@@ -3,12 +3,12 @@ import { KafkaContext } from '../../ctx-host';
import { Consumer, KafkaMessage } from '../../external/kafka.interface';
describe('KafkaContext', () => {
const args = ['test', { test: true }, undefined, { test: 'consumer' }];
const args = ['test', { test: true }, undefined, { test: 'consumer' }, () => {}];
let context: KafkaContext;
beforeEach(() => {
context = new KafkaContext(
args as [KafkaMessage, number, string, Consumer],
args as [KafkaMessage, number, string, Consumer, () => Promise<void>],
);
});
describe('getTopic', () => {
@@ -31,4 +31,9 @@ describe('KafkaContext', () => {
expect(context.getConsumer()).to.deep.eq({ test: 'consumer' });
});
});
describe('getHeartbeat', () => {
it('should return heartbeat callback', () => {
expect(context.getHeartbeat()).to.be.eql(args[4]);
});
});
});

View File

@@ -26,6 +26,8 @@ describe('ServerKafka', () => {
const key = '1';
const timestamp = new Date().toISOString();
const messageValue = 'test-message';
const heartbeat = async () => {};
const pause = () => () => {};
const eventMessage: KafkaMessage = {
key: Buffer.from(key),
@@ -44,6 +46,8 @@ describe('ServerKafka', () => {
},
eventMessage,
),
heartbeat,
pause,
};
const eventWithCorrelationIdPayload: EachMessagePayload = {
@@ -57,6 +61,8 @@ describe('ServerKafka', () => {
},
eventMessage,
),
heartbeat,
pause,
};
const message: KafkaMessage = Object.assign(
@@ -73,6 +79,8 @@ describe('ServerKafka', () => {
topic,
partition: 0,
message,
heartbeat,
pause,
};
let server: ServerKafka;

View File

@@ -1,5 +1,6 @@
import {
InternalServerErrorException,
Logger,
RawBodyRequest,
RequestMethod,
StreamableFile,
@@ -25,13 +26,16 @@ import { RouterMethodFactory } from '@nestjs/core/helpers/router-method-factory'
import {
json as bodyParserJson,
OptionsJson,
OptionsUrlencoded,
urlencoded as bodyParserUrlencoded,
} from 'body-parser';
import * as cors from 'cors';
import * as express from 'express';
import * as http from 'http';
import * as https from 'https';
import { PassThrough, pipeline } from 'stream';
import { ServeStaticOptions } from '../interfaces/serve-static-options.interface';
import { getBodyParserOptions } from './utils/get-body-parser-options.util';
type VersionedRoute = <
TRequest extends Record<string, any> = any,
@@ -44,6 +48,7 @@ type VersionedRoute = <
export class ExpressAdapter extends AbstractHttpAdapter {
private readonly routerMethodFactory = new RouterMethodFactory();
private readonly logger = new Logger(ExpressAdapter.name);
constructor(instance?: any) {
super(instance || express());
@@ -76,7 +81,17 @@ export class ExpressAdapter extends AbstractHttpAdapter {
) {
response.setHeader('Content-Length', streamHeaders.length);
}
return body.getStream().pipe(response);
return pipeline(
body.getStream().once('error', (err: Error) => {
body.errorHandler(err, response);
}),
response,
(err: Error) => {
if (err) {
this.logger.error(err.message, err.stack);
}
},
);
}
return isObject(body) ? response.json(body) : response.send(String(body));
}
@@ -194,21 +209,15 @@ export class ExpressAdapter extends AbstractHttpAdapter {
}
public registerParserMiddleware(prefix?: string, rawBody?: boolean) {
let bodyParserJsonOptions: OptionsJson | undefined;
if (rawBody === true) {
bodyParserJsonOptions = {
verify: (req: RawBodyRequest<http.IncomingMessage>, _res, buffer) => {
if (Buffer.isBuffer(buffer)) {
req.rawBody = buffer;
}
return true;
},
};
}
const bodyParserJsonOptions = getBodyParserOptions<OptionsJson>(rawBody);
const bodyParserUrlencodedOptions = getBodyParserOptions<OptionsUrlencoded>(
rawBody,
{ extended: true },
);
const parserMiddleware = {
jsonParser: bodyParserJson(bodyParserJsonOptions),
urlencodedParser: bodyParserUrlencoded({ extended: true }),
urlencodedParser: bodyParserUrlencoded(bodyParserUrlencodedOptions),
};
Object.keys(parserMiddleware)
.filter(parser => !this.isMiddlewareApplied(parser))

View File

@@ -0,0 +1,30 @@
import type { RawBodyRequest } from '@nestjs/common';
import type { Options } from 'body-parser';
import type { IncomingMessage, ServerResponse } from 'http';
const rawBodyParser = (
req: RawBodyRequest<IncomingMessage>,
_res: ServerResponse,
buffer: Buffer,
) => {
if (Buffer.isBuffer(buffer)) {
req.rawBody = buffer;
}
return true;
};
export function getBodyParserOptions<ParserOptions extends Options>(
rawBody: boolean,
options?: ParserOptions | undefined,
): ParserOptions {
let parserOptions: ParserOptions = options ?? ({} as ParserOptions);
if (rawBody === true) {
parserOptions = {
...parserOptions,
verify: rawBodyParser,
};
}
return parserOptions;
}

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/platform-express",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@platform-express)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -24,8 +24,8 @@
"tslib": "2.4.0"
},
"devDependencies": {
"@nestjs/common": "9.0.2",
"@nestjs/core": "9.0.2"
"@nestjs/common": "9.0.5",
"@nestjs/core": "9.0.5"
},
"peerDependencies": {
"@nestjs/common": "^9.0.0",

View File

@@ -41,6 +41,8 @@ import {
InjectOptions,
Response as LightMyRequestResponse,
} from 'light-my-request';
// `querystring` is used internally in fastify for registering urlencoded body parser.
import { parse as querystringParse } from 'querystring';
import {
FastifyStaticOptions,
PointOfViewOptions,
@@ -454,13 +456,9 @@ export class FastifyAdapter<
if (this._isParserRegistered) {
return;
}
this.register(
import('@fastify/formbody') as Parameters<TInstance['register']>[0],
);
if (rawBody) {
this.registerContentParserWithRawBody();
}
this.registerUrlencodedContentParser(rawBody);
this.registerJsonContentParser(rawBody);
this._isParserRegistered = true;
}
@@ -509,16 +507,18 @@ export class FastifyAdapter<
return !('status' in response);
}
private registerContentParserWithRawBody() {
private registerJsonContentParser(rawBody?: boolean) {
const { bodyLimit } = this.getInstance().initialConfig;
this.getInstance().addContentTypeParser<Buffer>(
'application/json',
{ parseAs: 'buffer' },
{ parseAs: 'buffer', bodyLimit },
(
req: RawBodyRequest<FastifyRequest<unknown, TServer, TRawRequest>>,
body: Buffer,
done,
) => {
if (Buffer.isBuffer(body)) {
if (rawBody === true && Buffer.isBuffer(body)) {
req.rawBody = body;
}
@@ -533,6 +533,26 @@ export class FastifyAdapter<
);
}
private registerUrlencodedContentParser(rawBody?: boolean) {
const { bodyLimit } = this.getInstance().initialConfig;
this.getInstance().addContentTypeParser<Buffer>(
'application/x-www-form-urlencoded',
{ parseAs: 'buffer', bodyLimit },
(
req: RawBodyRequest<FastifyRequest<unknown, TServer, TRawRequest>>,
body: Buffer,
done,
) => {
if (rawBody === true && Buffer.isBuffer(body)) {
req.rawBody = body;
}
done(null, querystringParse(body.toString()));
},
);
}
private async registerMiddie() {
this.isMiddieRegistered = true;
await this.register(

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/platform-fastify",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@platform-fastify)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -20,8 +20,8 @@
"@fastify/cors": "8.0.0",
"@fastify/formbody": "7.0.1",
"@fastify/middie": "8.0.0",
"fastify": "4.2.0",
"light-my-request": "5.0.0",
"fastify": "4.2.1",
"light-my-request": "5.2.0",
"path-to-regexp": "3.2.0",
"tslib": "2.4.0"
},

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/platform-socket.io",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@platform-socket.io)",
"author": "Kamil Mysliwiec",
"license": "MIT",

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/platform-ws",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@platform-ws)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -18,7 +18,7 @@
},
"dependencies": {
"tslib": "2.4.0",
"ws": "8.8.0"
"ws": "8.8.1"
},
"peerDependencies": {
"@nestjs/common": "^9.0.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/testing",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@testing)",
"author": "Kamil Mysliwiec",
"license": "MIT",

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/websockets",
"version": "9.0.2",
"version": "9.0.5",
"description": "Nest - modern, fast, powerful node.js web framework (@websockets)",
"author": "Kamil Mysliwiec",
"license": "MIT",
@@ -17,8 +17,8 @@
"tslib": "2.4.0"
},
"devDependencies": {
"@nestjs/common": "9.0.2",
"@nestjs/core": "9.0.2"
"@nestjs/common": "9.0.5",
"@nestjs/core": "9.0.5"
},
"peerDependencies": {
"@nestjs/common": "^9.0.0",

View File

@@ -1390,6 +1390,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -7798,13 +7822,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -7812,14 +7837,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -9612,6 +9629,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -14440,13 +14480,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1380,6 +1380,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -7799,13 +7823,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -7813,14 +7838,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -9604,6 +9621,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -14446,13 +14486,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1394,6 +1394,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -8037,13 +8061,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -8051,14 +8076,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -9907,6 +9924,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -14923,13 +14963,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1787,6 +1787,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -9731,13 +9755,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -9745,14 +9770,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -11999,6 +12016,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -17941,13 +17981,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1796,6 +1796,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -9742,13 +9766,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -9756,14 +9781,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -12012,6 +12029,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -17958,13 +17998,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1796,6 +1796,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -9742,13 +9766,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -9756,14 +9781,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -12012,6 +12029,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -17958,13 +17998,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1787,6 +1787,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -9740,13 +9764,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -9754,14 +9779,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -12008,6 +12025,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -17956,13 +17996,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -1796,6 +1796,30 @@
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -9733,13 +9757,14 @@
}
},
"node_modules/terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"bin": {
@@ -9747,14 +9772,6 @@
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"acorn": "^8.5.0"
},
"peerDependenciesMeta": {
"acorn": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin": {
@@ -12003,6 +12020,29 @@
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true
},
"@jridgewell/source-map": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz",
"integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"dependencies": {
"@jridgewell/gen-mapping": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
"integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
@@ -17943,13 +17983,14 @@
}
},
"terser": {
"version": "5.10.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
"integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map": "~0.7.2",
"source-map-support": "~0.5.20"
},
"dependencies": {

View File

@@ -9729,9 +9729,9 @@
}
},
"node_modules/terser": {
"version": "5.14.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz",
"integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
@@ -18046,9 +18046,9 @@
}
},
"terser": {
"version": "5.14.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz",
"integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==",
"version": "5.14.2",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
"integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",