Compare commits

...

350 Commits

Author SHA1 Message Date
Kamil Myśliwiec
3c1a6a2f97 refactor() add whitespace to gulp config 2019-08-24 19:24:18 +02:00
Kamil Myśliwiec
09ce572d8f refactor(docs) small docs, comments fixes 2019-08-24 19:23:54 +02:00
Kamil Myśliwiec
3671a1b359 Merge branch 'feature/api-docs' of https://github.com/BrunnerLivio/nest into BrunnerLivio-feature/api-docs 2019-08-24 10:50:50 +02:00
Kamil Myśliwiec
e2e27aff62 Merge branch 'master' of https://github.com/nestjs/nest 2019-08-23 22:08:44 +02:00
Kamil Myśliwiec
86a03124db fix(core) fix on app bootstrap typo (hooks) 2019-08-23 21:31:08 +02:00
Kamil Mysliwiec
ba26e3adf6 Merge pull request #2776 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.10
2019-08-23 21:23:55 +02:00
Kamil Mysliwiec
4d60d51b8d Merge pull request #2774 from nestjs/renovate/grpc-1.x
fix(deps): update dependency grpc to v1.23.3
2019-08-23 21:23:43 +02:00
Kamil Mysliwiec
13ca0cd62e Merge pull request #2769 from nestjs/renovate/express-4.x
chore(deps): update dependency @types/express to v4.17.1
2019-08-23 21:23:32 +02:00
Kamil Mysliwiec
f61f21848a Merge pull request #2803 from nestjs/renovate/ws-6.x
chore(deps): update dependency @types/ws to v6.0.3
2019-08-23 21:23:18 +02:00
Renovate Bot
89ae259bef chore(deps): update dependency @types/ws to v6.0.3 2019-08-23 17:25:13 +00:00
Renovate Bot
f89220eaed fix(deps): update dependency grpc to v1.23.3 2019-08-23 17:20:17 +00:00
Kamil Mysliwiec
a53abc92c6 Merge pull request #2780 from nestjs/renovate/node-8.x
chore(deps): update dependency @types/node to v8.10.52
2019-08-23 17:16:00 +02:00
Renovate Bot
7a2183238b fix(deps): update dependency mongoose to v5.6.10 2019-08-23 15:01:48 +00:00
Renovate Bot
12426621fe chore(deps): update dependency @types/express to v4.17.1 2019-08-23 15:00:53 +00:00
Kamil Mysliwiec
4cd5aef606 Update Readme.md 2019-08-23 16:53:56 +02:00
Kamil Mysliwiec
296e8fe58d Merge pull request #2761 from nestjs/renovate/concurrently-4.x
chore(deps): update dependency concurrently to v4.1.2
2019-08-23 16:49:25 +02:00
Kamil Mysliwiec
f2f825eeca Merge pull request #2763 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9.2.3
2019-08-23 16:48:08 +02:00
Kamil Mysliwiec
b1d5a1bb7d Merge pull request #2773 from nestjs/renovate/uuid-3.x
fix(deps): update dependency uuid to v3.3.3
2019-08-23 16:46:40 +02:00
Kamil Mysliwiec
af152d18a4 Merge pull request #2779 from nestjs/renovate/node-10.x
chore(deps): update dependency @types/node to v10.14.16
2019-08-23 16:46:07 +02:00
Kamil Mysliwiec
851a860c79 Merge pull request #2781 from nestjs/renovate/tslint-5.x
chore(deps): update dependency tslint to v5.19.0
2019-08-23 16:45:31 +02:00
Kamil Mysliwiec
5d243ad231 Merge pull request #2768 from nestjs/renovate/cors-2.x
chore(deps): update dependency @types/cors to v2.8.6
2019-08-23 16:45:21 +02:00
Kamil Mysliwiec
fa1515a3f2 Merge pull request #2765 from nestjs/renovate/type-graphql-0.x
fix(deps): update dependency type-graphql to v0.17.5
2019-08-23 16:45:11 +02:00
Kamil Mysliwiec
bb06006c94 Merge pull request #2764 from nestjs/renovate/webpack-cli-3.x
chore(deps): update dependency webpack-cli to v3.3.7
2019-08-23 16:44:59 +02:00
Kamil Mysliwiec
88ef07e21b Merge pull request #2766 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.16.0
2019-08-23 16:44:31 +02:00
Kamil Mysliwiec
9ff5180a81 Merge pull request #2755 from nestjs/renovate/rimraf-3.x
fix(deps): update dependency rimraf to v3
2019-08-23 16:43:59 +02:00
Kamil Mysliwiec
6d6d0f953d Merge pull request #2793 from nestjs/renovate/graphql-14.x
fix(deps): update dependency graphql to v14.5.0
2019-08-23 16:40:54 +02:00
Renovate Bot
cde2d2112a fix(deps): update dependency graphql to v14.5.0 2019-08-22 12:12:06 +00:00
Renovate Bot
e2548f34b5 fix(deps): update dependency sequelize to v5.16.0 2019-08-22 05:07:49 +00:00
Renovate Bot
4b5245d984 chore(deps): update dependency tslint to v5.19.0 2019-08-20 20:04:50 +00:00
Renovate Bot
cb08895ee0 chore(deps): update dependency @types/node to v8.10.52 2019-08-20 20:00:21 +00:00
Renovate Bot
b5729ce521 chore(deps): update dependency @types/node to v10.14.16 2019-08-20 18:46:50 +00:00
Renovate Bot
321337eb8a fix(deps): update dependency uuid to v3.3.3 2019-08-19 13:34:51 +00:00
Renovate Bot
1b59a8e0b4 chore(deps): update dependency @types/cors to v2.8.6 2019-08-19 00:58:56 +00:00
Renovate Bot
0c444c68bb fix(deps): update dependency type-graphql to v0.17.5 2019-08-18 11:13:37 +00:00
Renovate Bot
1d34dbaa2e chore(deps): update dependency webpack-cli to v3.3.7 2019-08-18 05:38:40 +00:00
Renovate Bot
ecf2f18785 chore(deps): update dependency lint-staged to v9.2.3 2019-08-17 17:26:09 +00:00
Renovate Bot
17eb1d989c chore(deps): update dependency concurrently to v4.1.2 2019-08-16 23:59:02 +00:00
Kamil Mysliwiec
baa20004fc Merge pull request #2742 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.39.2
2019-08-16 09:57:57 +02:00
Kamil Mysliwiec
53554b3636 Merge pull request #2758 from nestjs/renovate/jest-monorepo
chore(deps): update dependency jest to v24.9.0
2019-08-16 09:12:19 +02:00
Renovate Bot
d093655da8 fix(deps): update dependency rimraf to v3 2019-08-16 07:06:21 +00:00
Renovate Bot
614a1e5669 chore(deps): update dependency webpack to v4.39.2 2019-08-16 06:55:57 +00:00
Kamil Mysliwiec
ec96ac30ab Merge pull request #2745 from nestjs/renovate/rimraf-2.x
fix(deps): update dependency rimraf to v2.7.1
2019-08-16 08:53:38 +02:00
Kamil Mysliwiec
f8237bde81 Merge pull request #2754 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.15.0
2019-08-16 08:53:27 +02:00
Renovate Bot
3bd21ce20d chore(deps): update dependency jest to v24.9.0 2019-08-16 06:49:08 +00:00
Livio
738e00ebb0 lint(core): Remove trailing whitespace 2019-08-15 17:36:03 +02:00
John Biundo
9edd0444e5 feat(common): Add documentation for public API 2019-08-15 17:26:11 +02:00
John Biundo
b840b1974c feat(platform-express): Add documentation for public API 2019-08-15 17:25:27 +02:00
John Biundo
63262c38f6 feat(core): Add documentation for public API 2019-08-15 17:25:27 +02:00
Livio
e76786b1b1 feat(): Add package description files 2019-08-15 17:25:27 +02:00
Livio
68721a2539 feat(): Add ScopeOptions to public API
Mandatory so the public API parser
of docs.nestjs.com can compute this interface
2019-08-15 17:25:27 +02:00
Kamil Mysliwiec
591f7c7f97 Merge pull request #2756 from nestjs/renovate/node-12.x
chore(deps): update dependency @types/node to v12.7.2
2019-08-15 16:47:13 +02:00
Renovate Bot
0c726ded81 fix(deps): update dependency sequelize to v5.15.0 2019-08-15 14:31:02 +00:00
Renovate Bot
e3204d6799 fix(deps): update dependency rimraf to v2.7.1 2019-08-15 14:30:51 +00:00
Renovate Bot
d790dcf5d8 chore(deps): update dependency @types/node to v12.7.2 2019-08-15 14:24:21 +00:00
Kamil Myśliwiec
29596af7f0 ci(): update package-lock file 2019-08-15 16:06:45 +02:00
Livio Brunner
4966ab880e Merge pull request #2750 from rarkins/patch-1
chore(samples): fix docker compose duplicate key
2019-08-15 13:29:45 +02:00
Kamil Myśliwiec
58e25644d1 Merge branch 'master' of https://github.com/nestjs/nest 2019-08-14 15:01:06 +02:00
Kamil Myśliwiec
f55f32de0e ci(): add package-lock file 2019-08-14 15:00:55 +02:00
Rhys Arkins
a42be64668 chore: fix sample docker compose duplicate key 2019-08-14 11:16:31 +02:00
Kamil Mysliwiec
9e1895d5ae Merge pull request #2740 from nestjs/dependabot/npm_and_yarn/sample/01-cats-app/lodash-4.17.15
build(deps): bump lodash from 4.17.11 to 4.17.15 in /sample/01-cats-app
2019-08-13 11:24:00 +02:00
dependabot[bot]
d561e28fa7 build(deps): bump lodash from 4.17.11 to 4.17.15 in /sample/01-cats-app
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.15.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.15)

Signed-off-by: dependabot[bot] <support@github.com>
2019-08-13 09:22:21 +00:00
Kamil Mysliwiec
3ccab0b47e Merge pull request #2686 from nestjs/renovate/node-10.x
chore(deps): update dependency @types/node to v10.14.15
2019-08-13 11:20:54 +02:00
Kamil Mysliwiec
ac21698128 Merge pull request #2739 from nestjs/renovate/pin-dependencies
chore(deps): pin dependency @types/gulp to 4.0.6
2019-08-13 11:16:16 +02:00
Renovate Bot
cc80ce5dfd chore(deps): update dependency @types/node to v10.14.15 2019-08-13 09:16:13 +00:00
Renovate Bot
15a6d8e5fe chore(deps): pin dependency @types/gulp to 4.0.6 2019-08-13 09:15:35 +00:00
Kamil Myśliwiec
14b0769011 Merge branch 'BrunnerLivio-build/gulpfile-to-ts' 2019-08-13 11:14:04 +02:00
Kamil Myśliwiec
98322161fb resolve conflicts 2019-08-13 11:13:41 +02:00
Kamil Mysliwiec
50083ce836 Merge pull request #2696 from nestjs/renovate/chai-as-promised-7.x
chore(deps): update dependency @types/chai-as-promised to v7.1.2
2019-08-13 11:07:38 +02:00
Renovate Bot
b147bc38ad chore(deps): update dependency @types/chai-as-promised to v7.1.2 2019-08-13 09:07:12 +00:00
Kamil Mysliwiec
74c48b6490 Merge pull request #2730 from nestjs/renovate/class-validator-0.x
fix(deps): update dependency class-validator to v0.10.0
2019-08-13 11:06:24 +02:00
Kamil Mysliwiec
64e07ffd95 Merge pull request #2715 from nestjs/renovate/coveralls-3.x
chore(deps): update dependency coveralls to v3.0.6
2019-08-13 11:04:03 +02:00
Renovate Bot
d3df1ce269 fix(deps): update dependency class-validator to v0.10.0 2019-08-13 09:03:41 +00:00
Kamil Mysliwiec
e963ffe07c Merge pull request #2733 from nestjs/renovate/ws-7.x
fix(deps): update dependency ws to v7.1.2
2019-08-13 11:01:46 +02:00
Kamil Mysliwiec
fb81ae054a Merge pull request #2683 from nestjs/renovate/merge-graphql-schemas-1.x
fix(deps): update dependency merge-graphql-schemas to v1.7.0
2019-08-13 10:58:58 +02:00
Renovate Bot
9f9455246b chore(deps): update dependency coveralls to v3.0.6 2019-08-13 08:55:28 +00:00
Kamil Mysliwiec
b7b5f6bf35 Merge pull request #2685 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.14.0
2019-08-13 10:53:55 +02:00
Kamil Mysliwiec
81ccfa8a63 Merge pull request #2681 from nestjs/renovate/fastify-2.x
fix(deps): update dependency fastify to v2.7.1
2019-08-13 10:53:44 +02:00
Kamil Mysliwiec
2d527059b5 Merge pull request #2691 from nestjs/renovate/fastify-multipart-1.x
fix(deps): update dependency fastify-multipart to v1.0.2
2019-08-13 10:52:32 +02:00
Kamil Mysliwiec
98bc2da6c0 Merge pull request #2697 from nestjs/renovate/node-12.x
chore(deps): update dependency @types/node to v12.7.1
2019-08-13 10:52:20 +02:00
Kamil Mysliwiec
2ff8a6378f Merge pull request #2699 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.9
2019-08-13 10:51:20 +02:00
Kamil Mysliwiec
62492813d1 Merge pull request #2706 from nestjs/renovate/ws-6.x
chore(deps): update dependency @types/ws to v6.0.2
2019-08-13 10:50:45 +02:00
Kamil Mysliwiec
8f5adebd00 Merge pull request #2707 from nestjs/renovate/jest-24.x
chore(deps): update dependency @types/jest to v24.0.17
2019-08-13 10:50:34 +02:00
Kamil Mysliwiec
c81a5b19f8 Merge pull request #2709 from nestjs/renovate/sinon-7.x
chore(deps): update dependency sinon to v7.4.1
2019-08-13 10:50:25 +02:00
Kamil Mysliwiec
04681fcba1 Merge pull request #2721 from nestjs/renovate/chai-4.x
chore(deps): update dependency @types/chai to v4.2.0
2019-08-13 10:49:56 +02:00
Kamil Mysliwiec
0771207d78 Merge pull request #2724 from nestjs/renovate/core-js-3.x
chore(deps): update dependency core-js to v3.2.1
2019-08-13 10:49:40 +02:00
Renovate Bot
5667872a52 fix(deps): update dependency sequelize to v5.14.0 2019-08-13 06:44:32 +00:00
Renovate Bot
39c67db000 fix(deps): update dependency ws to v7.1.2 2019-08-12 15:53:48 +00:00
Renovate Bot
10b717300d chore(deps): update dependency core-js to v3.2.1 2019-08-12 12:30:50 +00:00
Renovate Bot
5f63041637 chore(deps): update dependency @types/chai to v4.2.0 2019-08-08 16:16:57 +00:00
Renovate Bot
c41545ad13 fix(deps): update dependency mongoose to v5.6.9 2019-08-07 23:47:44 +00:00
Renovate Bot
39e7845f73 chore(deps): update dependency @types/node to v12.7.1 2019-08-07 21:36:24 +00:00
Livio
06861628eb build(): Refactor Gulpfile to TS 2019-08-07 22:08:01 +02:00
Renovate Bot
ef46fc435a chore(deps): update dependency sinon to v7.4.1 2019-08-06 09:57:40 +00:00
Renovate Bot
dde610bc54 chore(deps): update dependency @types/jest to v24.0.17 2019-08-05 20:19:08 +00:00
Renovate Bot
931c8eec1c chore(deps): update dependency @types/ws to v6.0.2 2019-08-05 18:07:46 +00:00
Livio Brunner
202a572ea4 Merge pull request #2694 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.39.1
2019-08-04 12:33:55 +02:00
Renovate Bot
f7bcb9283a chore(deps): update dependency webpack to v4.39.1 2019-08-02 12:41:54 +00:00
Renovate Bot
ae577d4c5a fix(deps): update dependency fastify-multipart to v1.0.2 2019-08-01 07:58:59 +00:00
Kamil Mysliwiec
65f44cf019 Merge pull request #2684 from nestjs/renovate/apollo-graphql-packages
fix(deps): update dependency apollo-server-express to v2.8.1
2019-07-31 14:25:09 +02:00
Renovate Bot
01da02560f fix(deps): update dependency apollo-server-express to v2.8.1 2019-07-31 12:09:45 +00:00
Kamil Myśliwiec
4b0441e691 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-31 13:55:23 +02:00
Kamil Myśliwiec
33cd414123 tests(): attempt to try flaky unit tests 2019-07-31 13:55:09 +02:00
Renovate Bot
c7a63f37bf fix(deps): update dependency merge-graphql-schemas to v1.7.0 2019-07-31 10:00:42 +00:00
Kamil Mysliwiec
a28a821d73 Merge pull request #2680 from nestjs/renovate/fast-json-stringify-1.x
fix(deps): update dependency fast-json-stringify to v1.15.4
2019-07-31 11:39:40 +02:00
Renovate Bot
d5429a4c58 fix(deps): update dependency fastify to v2.7.1 2019-07-31 08:32:13 +00:00
Renovate Bot
222d7c9f53 fix(deps): update dependency fast-json-stringify to v1.15.4 2019-07-31 07:15:05 +00:00
Kamil Mysliwiec
d5c3b0542a Merge pull request #2668 from nestjs/renovate/amqplib-0.x
fix(deps): update dependency amqplib to v0.5.5
2019-07-30 22:35:30 +02:00
Kamil Mysliwiec
a11098fba6 Merge pull request #2675 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.12.1
2019-07-30 22:35:18 +02:00
Renovate Bot
73ae49d10c fix(deps): update dependency sequelize to v5.12.1 2019-07-30 17:07:47 +00:00
Renovate Bot
75e3de119f fix(deps): update dependency amqplib to v0.5.5 2019-07-30 13:35:36 +00:00
Kamil Mysliwiec
692d78056d Merge pull request #2667 from nestjs/renovate/apollo-graphql-packages
fix(deps): update dependency apollo-server-express to v2.8.0
2019-07-30 15:30:20 +02:00
Kamil Mysliwiec
be25bc0e28 Merge pull request #2669 from nestjs/renovate/jest-24.x
chore(deps): update dependency @types/jest to v24.0.16
2019-07-30 15:30:02 +02:00
Kamil Mysliwiec
8d3b2a98c8 Merge pull request #2674 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.12.0
2019-07-30 15:29:45 +02:00
Renovate Bot
a0a04a719c fix(deps): update dependency sequelize to v5.12.0 2019-07-30 13:10:28 +00:00
Kamil Myśliwiec
a92b82ef38 fix(core): use hash instead of controller name for metadata cache 2019-07-30 09:20:56 +02:00
Renovate Bot
9c5deef5ec chore(deps): update dependency @types/jest to v24.0.16 2019-07-30 07:12:18 +00:00
Kamil Myśliwiec
2038b45d04 test(): add retries to unit and integration tests 2019-07-30 09:10:13 +02:00
Renovate Bot
27e8ca7c5e fix(deps): update dependency apollo-server-express to v2.8.0 2019-07-29 17:18:37 +00:00
Kamil Myśliwiec
ef01ec7abc Merge branch 'master' of https://github.com/nestjs/nest 2019-07-29 15:13:39 +02:00
Kamil Myśliwiec
b9852f68d0 fix(): strip slash when a wildacrd is used 2019-07-29 15:13:32 +02:00
Kamil Mysliwiec
8ea7de969b Merge pull request #2633 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.11.0
2019-07-29 11:11:48 +02:00
Kamil Mysliwiec
ac3537b973 Merge pull request #2656 from nestjs/renovate/apollo-graphql-packages
fix(deps): update dependency apollo-server-express to v2.7.2
2019-07-29 11:11:38 +02:00
Renovate Bot
0b05561201 fix(deps): update dependency sequelize to v5.11.0 2019-07-29 08:17:37 +00:00
Renovate Bot
a873457a3d fix(deps): update dependency apollo-server-express to v2.7.2 2019-07-29 08:17:26 +00:00
Kamil Mysliwiec
62c5ce66f3 Merge pull request #2627 from KonradLinkowski/19-auth-jwt-fix-test-cases
auth jwt sample Fix test cases
2019-07-29 10:16:08 +02:00
Kamil Mysliwiec
5e77c94c81 Update app.controller.spec.ts 2019-07-29 10:15:51 +02:00
Kamil Mysliwiec
72238a1e0d Merge pull request #2629 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.7
2019-07-29 10:14:31 +02:00
Kamil Mysliwiec
921f542e45 Merge pull request #2652 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.38.0
2019-07-29 10:12:18 +02:00
Kamil Mysliwiec
1e573f6228 Merge pull request #2658 from nestjs/renovate/fastify-2.x
fix(deps): update dependency fastify to v2.7.0
2019-07-29 10:12:07 +02:00
Kamil Mysliwiec
9e0fec0880 Merge pull request #2665 from nestjs/renovate/conventional-changelog-3.x
chore(deps): update dependency conventional-changelog to v3.1.10
2019-07-29 10:11:35 +02:00
Renovate Bot
b3dffe398f chore(deps): update dependency conventional-changelog to v3.1.10 2019-07-29 06:06:43 +00:00
Renovate Bot
521533e81a fix(deps): update dependency fastify to v2.7.0 2019-07-27 10:05:30 +00:00
Renovate Bot
305fb4a464 fix(deps): update dependency mongoose to v5.6.7 2019-07-26 19:32:37 +00:00
Renovate Bot
547dcf810f chore(deps): update dependency webpack to v4.38.0 2019-07-26 07:46:44 +00:00
Livio Brunner
54d94f8e3e chore(deps): pin dependency promise.series to 0.2.0 (#2646)
chore(deps): pin dependency promise.series to 0.2.0
2019-07-25 14:04:02 +02:00
Renovate Bot
ced03a041d chore(deps): pin dependency promise.series to 0.2.0 2019-07-25 11:27:01 +00:00
Kamil Mysliwiec
05efc140db Merge pull request #2635 from BrunnerLivio/build/sample-log-message
ci(): Try to fix flaky CI tests
2019-07-25 13:22:16 +02:00
Kamil Mysliwiec
f1f1ecc66b Merge pull request #2645 from nestjs/renovate/pin-dependencies
fix(deps): pin dependencies
2019-07-25 13:21:41 +02:00
Renovate Bot
6bb2765d2f fix(deps): pin dependencies 2019-07-25 11:11:30 +00:00
Kamil Mysliwiec
3b982aab48 Merge pull request #2641 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9.2.1
2019-07-25 13:08:36 +02:00
Kamil Mysliwiec
3dda0a9cb5 Merge pull request #2644 from nestjs/renovate/apollo-graphql-packages
fix(deps): update dependency apollo-server-express to v2.7.1
2019-07-25 13:08:26 +02:00
Kamil Mysliwiec
75cbb373be Merge pull request #2611 from beeman/beeman/serve-static-sample
docs(sample): add sample for @nestjs/serve-static
2019-07-25 13:08:04 +02:00
Renovate Bot
8f7b56e9d5 fix(deps): update dependency apollo-server-express to v2.7.1 2019-07-25 10:55:40 +00:00
Renovate Bot
186976f950 chore(deps): update dependency lint-staged to v9.2.1 2019-07-25 05:06:25 +00:00
Kamil Mysliwiec
e9dae8a1a8 Merge pull request #2631 from nestjs/renovate/docker-mysql-5.x
chore(deps): update mysql docker tag to v5.7.27
2019-07-24 22:22:50 +02:00
Kamil Mysliwiec
84a37fec81 Merge pull request #2634 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.37.0
2019-07-24 22:21:46 +02:00
Livio
17e9e4acc7 ci(): Remove firefox addon 2019-07-24 18:33:31 +02:00
Livio
0c4efab305 test(): Change timeout of concurrent MQTT test 2019-07-24 18:33:27 +02:00
Livio
97bc3c66bc build(): Add log message once a sample has been installed 2019-07-24 18:03:59 +02:00
Renovate Bot
b501fd6e7f chore(deps): update dependency webpack to v4.37.0 2019-07-23 09:39:47 +00:00
Kamil Mysliwiec
8dbb01c398 Merge pull request #2628 from nestjs/renovate/sequelize-4.x
chore(deps): update dependency @types/sequelize to v4.28.4
2019-07-23 08:32:11 +02:00
Kamil Mysliwiec
ed6448ac23 Merge pull request #2630 from johnbiundo/fix-contributing-page
docs(CONTRIBUTING.md): fix links, clarify format
2019-07-23 08:12:04 +02:00
Renovate Bot
c9cf78d421 chore(deps): update mysql docker tag to v5.7.27 2019-07-22 23:06:15 +00:00
John Biundo
88cb1495d3 docs(CONTRIBUTING.md) fix links
- add discord
- remove gitter
- remove dead link to DEVELOPER.md
- fix description of format
2019-07-22 13:29:48 -07:00
Renovate Bot
69c0357f22 chore(deps): update dependency @types/sequelize to v4.28.4 2019-07-22 18:12:12 +00:00
Konrad Linkowski
a665aa8f74 auth jwt sample Fix test cases 2019-07-22 19:17:23 +02:00
John Biundo
25db843b7f Merge branch 'master' of https://github.com/nestjs/nest 2019-07-22 09:37:08 -07:00
Kamil Mysliwiec
a0a51302ed Merge pull request #2617 from nestjs/renovate/mongoose-5.x
chore(deps): update dependency @types/mongoose to v5.5.9
2019-07-22 08:19:27 +02:00
Kamil Mysliwiec
b3edf20a2d Merge pull request #2616 from nestjs/renovate/ws-7.x
fix(deps): update dependency ws to v7.1.1
2019-07-22 08:19:15 +02:00
Kamil Mysliwiec
855dc056b8 Merge pull request #2621 from nestjs/renovate/merge-graphql-schemas-1.x
fix(deps): update dependency merge-graphql-schemas to v1.6.1
2019-07-22 08:19:00 +02:00
Renovate Bot
5287c51779 fix(deps): update dependency merge-graphql-schemas to v1.6.1 2019-07-21 16:44:38 +00:00
John Biundo
c5e54bf509 Merge pull request #3 from nestjs/master
merge upstream
2019-07-20 08:25:15 -07:00
Renovate Bot
f288c2bfe3 chore(deps): update dependency @types/mongoose to v5.5.9 2019-07-19 17:24:35 +00:00
Renovate Bot
c568d9d3b4 fix(deps): update dependency ws to v7.1.1 2019-07-19 14:52:46 +00:00
Bram Borggreve
7cf343449b docs(sample): add sample for @nestjs/serve-static 2019-07-18 14:50:19 +02:00
Kamil Mysliwiec
a15380864f Merge pull request #2610 from nestjs/renovate/nest-monorepo
fix(deps): update nest monorepo to v6.5.3
2019-07-18 11:07:21 +02:00
Renovate Bot
e29fb08d45 fix(deps): update nest monorepo to v6.5.3 2019-07-18 09:00:51 +00:00
Kamil Myśliwiec
2b2d5782b8 chore(@nestjs) publish v6.5.3 release 2019-07-18 10:52:37 +02:00
Kamil Myśliwiec
c6890e59e6 chore(): publish 6.5.3 release 2019-07-18 10:51:14 +02:00
Kamil Mysliwiec
2b2c78a46b Merge pull request #2548 from williamdclt/patch-1
bugfix(common): export AnyFilesInterceptor
2019-07-18 10:50:36 +02:00
Kamil Mysliwiec
623555d018 Merge pull request #2607 from nestjs/renovate/ts-morph-3.x
fix(deps): update dependency ts-morph to v3.1.3
2019-07-18 10:50:15 +02:00
Kamil Myśliwiec
72ca19b973 perf(): improve pipes performance (reduce overhead) 2019-07-18 10:49:56 +02:00
Renovate Bot
00adefad42 fix(deps): update dependency ts-morph to v3.1.3 2019-07-18 08:45:10 +00:00
Kamil Myśliwiec
4585670b96 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-18 08:30:24 +02:00
Kamil Myśliwiec
0dcd010bc9 tests(): fix unit test, disable redis integration test 2019-07-18 08:30:07 +02:00
Kamil Mysliwiec
865b0317fa Merge pull request #2606 from nestjs/renovate/nestjs-graphql-6.x
fix(deps): update dependency @nestjs/graphql to v6.4.2
2019-07-17 23:06:38 +02:00
Renovate Bot
ad549e7846 fix(deps): update dependency @nestjs/graphql to v6.4.2 2019-07-17 21:04:17 +00:00
Kamil Mysliwiec
694360cdbd Merge pull request #2573 from nestjs/renovate/webpack-cli-3.x
chore(deps): update dependency webpack-cli to v3.3.6
2019-07-17 22:38:14 +02:00
Kamil Mysliwiec
8838e814fb Merge pull request #2592 from nestjs/renovate/nestjs-graphql-6.x
fix(deps): update dependency @nestjs/graphql to v6.4.1
2019-07-17 22:37:58 +02:00
Renovate Bot
16b3fb7e1c fix(deps): update dependency @nestjs/graphql to v6.4.1 2019-07-17 20:19:46 +00:00
Renovate Bot
3aa52d43c4 chore(deps): update dependency webpack-cli to v3.3.6 2019-07-17 20:18:56 +00:00
Kamil Mysliwiec
7e964b973e Merge pull request #2590 from nestjs/renovate/ts-morph-3.x
fix(deps): update dependency ts-morph to v3.1.2
2019-07-17 22:18:15 +02:00
Kamil Mysliwiec
842d2617c7 Merge pull request #2598 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.36.1
2019-07-17 22:16:50 +02:00
Kamil Mysliwiec
1985ebb52c Merge pull request #2602 from nestjs/renovate/node-10.x
chore(deps): update dependency @types/node to v10.14.13
2019-07-17 22:16:37 +02:00
Kamil Mysliwiec
38d56c2c50 Merge pull request #2603 from nestjs/renovate/node-7.x
chore(deps): update dependency @types/node to v7.10.7
2019-07-17 22:16:26 +02:00
Kamil Mysliwiec
d3a1c3ff7e Merge pull request #2605 from nestjs/renovate/apollo-graphql-packages
fix(deps): update dependency apollo-server-express to v2.7.0
2019-07-17 22:15:54 +02:00
Kamil Mysliwiec
9cef5fa108 Merge pull request #2604 from nestjs/renovate/node-8.x
chore(deps): update dependency @types/node to v8.10.51
2019-07-17 22:15:45 +02:00
Renovate Bot
fa57cca223 fix(deps): update dependency ts-morph to v3.1.2 2019-07-17 20:11:18 +00:00
Renovate Bot
eff133265e fix(deps): update dependency apollo-server-express to v2.7.0 2019-07-17 20:09:11 +00:00
Renovate Bot
a0803904be chore(deps): update dependency webpack to v4.36.1 2019-07-17 20:05:03 +00:00
Renovate Bot
e69d709f59 chore(deps): update dependency @types/node to v8.10.51 2019-07-17 20:04:12 +00:00
Renovate Bot
9db1c013ff chore(deps): update dependency @types/node to v7.10.7 2019-07-17 20:03:46 +00:00
Renovate Bot
a5ebf54618 chore(deps): update dependency @types/node to v10.14.13 2019-07-17 20:02:48 +00:00
Kamil Myśliwiec
fc6b35fe13 resolve conflicts 2019-07-17 22:01:09 +02:00
Kamil Myśliwiec
d613799453 test(): increase the timeout for redis integration test 2019-07-17 21:58:42 +02:00
Kamil Mysliwiec
0d29b63c07 Merge pull request #2600 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.5
2019-07-17 21:53:05 +02:00
Kamil Mysliwiec
54a2890946 Merge pull request #2588 from nestjs/renovate/node-12.x
chore(deps): update dependency @types/node to v12.6.8
2019-07-17 21:51:02 +02:00
Kamil Mysliwiec
404e2a4fb1 Merge pull request #2577 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.10.1
2019-07-17 21:50:15 +02:00
Kamil Mysliwiec
6195174748 Merge pull request #2593 from nestjs/renovate/multer-1.x
fix(deps): update dependency multer to v1.4.2
2019-07-17 21:49:59 +02:00
Renovate Bot
3e121891dd chore(deps): update dependency @types/node to v12.6.8 2019-07-17 19:26:30 +00:00
Renovate Bot
4fceae6bec fix(deps): update dependency mongoose to v5.6.5 2019-07-17 17:13:29 +00:00
Renovate Bot
370d0f76af fix(deps): update dependency multer to v1.4.2 2019-07-16 10:20:44 +00:00
Kamil Mysliwiec
fc99ccdb30 Merge pull request #2583 from nestjs/renovate/nestjs-swagger-3.x
fix(deps): update dependency @nestjs/swagger to v3.1.0
2019-07-15 10:57:44 +02:00
Renovate Bot
c94322d094 fix(deps): update dependency @nestjs/swagger to v3.1.0 2019-07-15 08:33:30 +00:00
Renovate Bot
dd19f15b89 fix(deps): update dependency sequelize to v5.10.1 2019-07-14 17:51:09 +00:00
Kamil Mysliwiec
bfe182d965 Merge pull request #2564 from nestjs/renovate/nestjs-graphql-6.x
fix(deps): update dependency @nestjs/graphql to v6.4.0
2019-07-14 19:36:26 +02:00
Kamil Mysliwiec
8ed4cce9f7 Merge pull request #2574 from nestjs/renovate/nestjs-typeorm-6.x
fix(deps): update dependency @nestjs/typeorm to v6.1.3
2019-07-14 19:36:17 +02:00
Renovate Bot
0db528e2aa fix(deps): update dependency @nestjs/typeorm to v6.1.3 2019-07-14 13:57:57 +00:00
Renovate Bot
32a8f90c71 fix(deps): update dependency @nestjs/graphql to v6.4.0 2019-07-14 10:30:43 +00:00
Kamil Mysliwiec
c0f70fd769 Merge pull request #2568 from nestjs/renovate/ts-morph-3.x
fix(deps): update dependency ts-morph to v3.1.1
2019-07-14 09:33:30 +02:00
Renovate Bot
d5b2bee830 fix(deps): update dependency ts-morph to v3.1.1 2019-07-13 18:45:47 +00:00
Kamil Mysliwiec
525e642286 Merge pull request #2561 from nestjs/renovate/supertest-4.x
chore(deps): update dependency supertest to v4
2019-07-12 10:22:53 +02:00
Kamil Mysliwiec
9df178f12a Merge pull request #2556 from nestjs/renovate/typescript-3.x
chore(deps): update dependency typescript to v3.5.3
2019-07-12 10:19:05 +02:00
Renovate Bot
8660043776 chore(deps): update dependency supertest to v4 2019-07-12 08:13:30 +00:00
Renovate Bot
6ff7a7f266 chore(deps): update dependency typescript to v3.5.3 2019-07-12 08:13:18 +00:00
Kamil Mysliwiec
7eafc150f0 Merge pull request #2558 from nestjs/renovate/cache-manager-2.x
fix(deps): update dependency cache-manager to v2.10.0
2019-07-12 10:12:14 +02:00
Kamil Mysliwiec
9eef47c4bf Merge pull request #2559 from nestjs/renovate/coveralls-3.x
chore(deps): update dependency coveralls to v3.0.5
2019-07-12 10:12:05 +02:00
Kamil Mysliwiec
51987bb43b Merge pull request #2555 from nestjs/renovate/pin-dependencies
fix(deps): pin dependencies
2019-07-12 10:11:44 +02:00
Renovate Bot
fdfe0ed02e chore(deps): update dependency coveralls to v3.0.5 2019-07-12 02:31:38 +00:00
Renovate Bot
c06bbbed97 fix(deps): update dependency cache-manager to v2.10.0 2019-07-11 22:15:07 +00:00
Renovate Bot
e834118914 fix(deps): pin dependencies 2019-07-11 21:38:53 +00:00
Kamil Myśliwiec
ef199730c1 build(): fix samples 2019-07-11 23:02:44 +02:00
Kamil Myśliwiec
6980da363b sample(): remove old auth sample 2019-07-11 22:41:22 +02:00
Kamil Mysliwiec
f899064410 Merge pull request #2417 from johnbiundo/auth-example
sample(auth): matches new auth chapter
2019-07-11 22:39:37 +02:00
Kamil Mysliwiec
7a50e50dbf Update users.service.ts 2019-07-11 22:39:15 +02:00
Kamil Mysliwiec
7c8f9d901c Update app.controller.ts 2019-07-11 22:38:28 +02:00
Kamil Mysliwiec
9a8de91bb9 Merge pull request #2554 from nestjs/renovate/apollo-server-monorepo
fix(deps): update dependency apollo-server-express to v2.6.9
2019-07-11 22:11:49 +02:00
Kamil Mysliwiec
6c22219605 Merge pull request #2552 from ArrivalDistributionPlatform/close-fix-missing-await
bugfix(core): fix missing await in NestApplication.close()
2019-07-11 22:05:55 +02:00
Renovate Bot
6a031f0d63 fix(deps): update dependency apollo-server-express to v2.6.9 2019-07-11 18:36:01 +00:00
weekens
d5f86c5ba4 bugfix(core): fix missing await in NestApplication.close()
NestApplication.close() was not always closing the port after promise resolve, because of the missing `await` in implementation. This commit fixes the problem.
2019-07-11 17:23:24 +03:00
Kamil Mysliwiec
b55367646c Merge pull request #2550 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.10.0
2019-07-11 14:41:11 +02:00
Kamil Mysliwiec
b7986bcaf0 Merge pull request #2543 from nestjs/renovate/grpc-1.x
fix(deps): update dependency grpc to v1.22.2
2019-07-11 14:21:18 +02:00
Renovate Bot
94781480ed fix(deps): update dependency sequelize to v5.10.0 2019-07-11 11:36:48 +00:00
Renovate Bot
aa1d192b6a fix(deps): update dependency grpc to v1.22.2 2019-07-11 11:36:38 +00:00
Kamil Mysliwiec
4bc15d483c Merge pull request #2541 from nestjs/renovate/nestjs-graphql-6.x
fix(deps): update dependency @nestjs/graphql to v6.2.5
2019-07-11 13:32:10 +02:00
Kamil Mysliwiec
1b84dda4de Merge pull request #2542 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9.2.0
2019-07-11 13:32:02 +02:00
Kamil Mysliwiec
db5bbece3a Merge pull request #2545 from nestjs/renovate/pin-dependencies
chore(deps): pin dependency fancy-log to 1.3.3
2019-07-11 13:31:53 +02:00
Kamil Mysliwiec
9fd16f7478 Merge pull request #2547 from nestjs/renovate/node-12.x
chore(deps): update dependency @types/node to v12.6.2
2019-07-11 13:31:45 +02:00
Kamil Mysliwiec
a0fd983ce1 Update Readme.md 2019-07-11 13:31:14 +02:00
Kamil Mysliwiec
445717cf15 Update Readme.md 2019-07-11 13:30:59 +02:00
Kamil Mysliwiec
f92892423f Update Readme.md 2019-07-11 13:30:02 +02:00
Kamil Mysliwiec
9830b0071c Update Readme.md 2019-07-11 13:29:35 +02:00
Duclot William
f582625bcf Platform-express: export AnyFilesInterceptor
This interceptor is referenced in the doc, it should be exported properly
2019-07-10 22:58:08 +01:00
Renovate Bot
e0d2209a06 chore(deps): update dependency @types/node to v12.6.2 2019-07-10 21:38:53 +00:00
Renovate Bot
b89133c2e7 chore(deps): pin dependency fancy-log to 1.3.3 2019-07-10 19:50:44 +00:00
Kamil Mysliwiec
6bbfd7b54f Merge pull request #2527 from BrunnerLivio/ci/build-samples
ci(): build samples in pipeline
2019-07-10 18:56:51 +02:00
Renovate Bot
5ed1edf262 chore(deps): update dependency lint-staged to v9.2.0 2019-07-10 16:32:28 +00:00
Livio
64e69cd2b5 ci(): Build samples with TravisCI 2019-07-10 17:59:39 +02:00
Livio
aabe0295c6 sample(): Fix samples build processes 2019-07-10 17:59:31 +02:00
Livio
6a6c62d430 build(): Add build:samples script 2019-07-10 15:51:33 +02:00
Renovate Bot
fded926042 fix(deps): update dependency @nestjs/graphql to v6.2.5 2019-07-10 10:44:59 +00:00
Kamil Mysliwiec
fc3dd675fa Merge pull request #2539 from nestjs/renovate/nest-monorepo
fix(deps): update nest monorepo to v6.5.2
2019-07-10 12:30:14 +02:00
Renovate Bot
744a070658 fix(deps): update nest monorepo to v6.5.2 2019-07-10 09:54:52 +00:00
Kamil Myśliwiec
ef4ab89b0d chore(@nestjs) publish v6.5.2 release 2019-07-10 11:43:48 +02:00
Kamil Myśliwiec
3774fed640 bugfix(microservices): fix pattern regression 2019-07-10 11:42:18 +02:00
Kamil Myśliwiec
6ff7859976 chore(): publish 6.5.1 release 2019-07-10 09:37:15 +02:00
Kamil Myśliwiec
8718f4763e chore(@nestjs) publish v6.5.1 release 2019-07-10 09:35:51 +02:00
Kamil Myśliwiec
4cbebed909 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-10 09:33:24 +02:00
Kamil Myśliwiec
b1388b136c fix(microservices): remove event emitter reference 2019-07-10 09:33:13 +02:00
Kamil Mysliwiec
499c94792a Merge pull request #2533 from nestjs/renovate/nest-monorepo
fix(deps): update nest monorepo to v6.5.0
2019-07-10 08:40:13 +02:00
Renovate Bot
c93d7e4ab0 fix(deps): update nest monorepo to v6.5.0 2019-07-10 06:05:44 +00:00
Kamil Mysliwiec
2ec291cf4c Merge pull request #2537 from nestjs/renovate/mongoose-5.x
chore(deps): update dependency @types/mongoose to v5.5.8
2019-07-10 07:58:49 +02:00
Kamil Mysliwiec
e25e3c1e92 Merge pull request #2538 from nestjs/renovate/apollo-server-monorepo
fix(deps): update dependency apollo-server-express to v2.6.8
2019-07-10 07:58:39 +02:00
Renovate Bot
2655d19aa5 fix(deps): update dependency apollo-server-express to v2.6.8 2019-07-09 22:40:42 +00:00
Renovate Bot
da45d58982 chore(deps): update dependency @types/mongoose to v5.5.8 2019-07-09 20:06:07 +00:00
Kamil Myśliwiec
82db8a3743 chore(@nestjs) publish v6.5.0 release 2019-07-09 15:15:30 +02:00
Kamil Myśliwiec
bc71cb4eca chore(): publish 6.5.0 release 2019-07-09 15:14:26 +02:00
Kamil Myśliwiec
35fff662df Merge branch 'master' of https://github.com/nestjs/nest 2019-07-09 15:13:47 +02:00
Kamil Myśliwiec
531073957f Merge branch 'csidell-earny-master' 2019-07-09 15:13:40 +02:00
Kamil Myśliwiec
41e4e853f6 refactor(): adjust to the codebase guidelines 2019-07-09 15:13:26 +02:00
Kamil Myśliwiec
9166d40ade Merge branch 'master' of https://github.com/csidell-earny/nest into csidell-earny-master 2019-07-09 15:05:39 +02:00
Kamil Mysliwiec
8a9af18e3b Merge pull request #2496 from Samox/add-any-files-multer-interceptor
feat(platform-express): add any file interceptor (multer)
2019-07-09 15:05:14 +02:00
Kamil Myśliwiec
9b5ddceb1f Merge branch 'master' of https://github.com/nestjs/nest 2019-07-09 15:03:36 +02:00
Kamil Myśliwiec
704230eb56 bugfix(core): fix global request enhancers #1916 2019-07-09 15:03:26 +02:00
Kamil Mysliwiec
d150650a7a Merge pull request #2528 from jbpionnier/refactor_module_decorator
refactor(common): module decorator (metadata validation)
2019-07-09 08:57:38 +02:00
Kamil Mysliwiec
6f6d8a4a12 Merge pull request #2530 from nestjs/renovate/typescript-3.x
fix(deps): update dependency typescript to v3.5.3
2019-07-09 08:57:16 +02:00
Kamil Mysliwiec
cbcdeb2e5f Merge pull request #2526 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.4
2019-07-09 08:56:14 +02:00
Kamil Mysliwiec
978dd180b4 Merge pull request #2523 from nestjs/renovate/webpack-4.x
chore(deps): update dependency webpack to v4.35.3
2019-07-09 08:56:05 +02:00
Kamil Mysliwiec
8b84c63f19 Merge pull request #2531 from nestjs/renovate/grpc-1.x
fix(deps): update dependency grpc to v1.22.0
2019-07-09 08:50:07 +02:00
Renovate Bot
573d53d6a6 fix(deps): update dependency grpc to v1.22.0 2019-07-09 00:00:39 +00:00
Renovate Bot
c0641abf40 fix(deps): update dependency typescript to v3.5.3 2019-07-08 22:36:21 +00:00
Jean-Baptiste Pionnier
f3314a280d refactor: module decorator 2019-07-08 23:23:21 +02:00
Renovate Bot
5f7605a264 fix(deps): update dependency mongoose to v5.6.4 2019-07-08 17:58:53 +00:00
Kamil Mysliwiec
a2b61f3622 Merge pull request #2525 from nestjs/renovate/ws-7.x
fix(deps): update dependency ws to v7.1.0
2019-07-08 19:27:33 +02:00
Renovate Bot
6a38c24ffc fix(deps): update dependency ws to v7.1.0 2019-07-08 16:17:04 +00:00
Renovate Bot
6b322e725e chore(deps): update dependency webpack to v4.35.3 2019-07-08 13:58:17 +00:00
Sammy Teillet
b25754da3f feature(common): Add file interceptor for multer 2019-07-08 15:20:38 +02:00
Kamil Mysliwiec
5044deaf85 Merge pull request #2499 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9.1.0
2019-07-07 18:27:35 +02:00
Kamil Mysliwiec
140a9f28ef Merge pull request #2510 from BrunnerLivio/remove-gitter-badge
chore(): Remove Gitter badge
2019-07-07 18:27:23 +02:00
Kamil Mysliwiec
b72fdf80b8 Merge pull request #2508 from nestjs/renovate/nest-monorepo
fix(deps): update nest monorepo to v6.4.1
2019-07-07 18:26:51 +02:00
Renovate Bot
a2ad323b1e fix(deps): update nest monorepo to v6.4.1 2019-07-07 16:22:56 +00:00
Renovate Bot
c2e7d7b28f chore(deps): update dependency lint-staged to v9.1.0 2019-07-07 16:19:44 +00:00
Kamil Mysliwiec
292cf57cba Merge pull request #2519 from nestjs/renovate/pin-dependencies
chore(deps): pin dependency lerna to 2.11.0
2019-07-07 18:17:33 +02:00
Kamil Mysliwiec
bb5b881fc3 Merge pull request #2494 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.9.4
2019-07-07 18:17:10 +02:00
Kamil Mysliwiec
96e48ce3d0 Merge pull request #2495 from nestjs/renovate/swagger-ui-express-4.x
fix(deps): update dependency swagger-ui-express to v4.0.7
2019-07-07 18:17:02 +02:00
Kamil Mysliwiec
38a2649ffb Merge pull request #2505 from nestjs/renovate/node-10.x
chore(deps): update dependency @types/node to v10.14.12
2019-07-07 18:16:29 +02:00
Kamil Mysliwiec
8a59c4841b Merge pull request #2507 from nestjs/renovate/mongoose-5.x
fix(deps): update dependency mongoose to v5.6.3
2019-07-07 18:16:13 +02:00
Renovate Bot
6ca85a3b33 chore(deps): pin dependency lerna to 2.11.0 2019-07-07 16:14:41 +00:00
Kamil Mysliwiec
1d96cd4e1c Merge pull request #2498 from nestjs/renovate/ts-morph-3.x
fix(deps): update dependency ts-morph to v3.1.0
2019-07-07 18:13:21 +02:00
Kamil Mysliwiec
f55c27d3b1 Merge pull request #2503 from nestjs/renovate/graphql-14.x
fix(deps): update dependency graphql to v14.4.2
2019-07-07 18:13:03 +02:00
Kamil Mysliwiec
d528c1054e Merge pull request #2506 from nestjs/renovate/node-8.x
chore(deps): update dependency @types/node to v8.10.50
2019-07-07 18:12:52 +02:00
Kamil Mysliwiec
42a288eef0 Merge pull request #2509 from nestjs/renovate/pin-dependencies
chore(deps): pin dependency lerna to 2.11.0
2019-07-07 18:12:37 +02:00
Kamil Mysliwiec
3c8875468d Merge pull request #2514 from nestjs/renovate/amqp-connection-manager-3.x
fix(deps): update dependency amqp-connection-manager to v3
2019-07-07 18:12:09 +02:00
Kamil Mysliwiec
378fdcd58c Merge pull request #2516 from BrunnerLivio/build/travis-jobs
ci(): run integration tests with TravisCI
2019-07-07 18:11:18 +02:00
Renovate Bot
9deb0df42d fix(deps): update dependency sequelize to v5.9.4 2019-07-06 08:33:35 +00:00
Livio
1318641259 build(): Run integration test with TravisCI 2019-07-05 18:39:43 +02:00
Livio
3c34111770 build(): Use travis build jobs 2019-07-05 18:17:16 +02:00
Chris Sidell
987012610d Address styling concerns 2019-07-04 10:51:01 -07:00
csidell-earny
8a80de3017 Add typing target for getErrorString 2019-07-04 10:45:28 -07:00
Renovate Bot
a70e5369a4 fix(deps): update dependency amqp-connection-manager to v3 2019-07-04 13:35:48 +00:00
Chris Sidell
fd8e490d34 Fix linting error 2019-07-03 18:37:20 -07:00
Chris Sidell
ccb69d728b Add WsException serialization 2019-07-03 18:29:56 -07:00
Chris Sidell
609878628c Make RpcExceptions serializable 2019-07-03 18:27:29 -07:00
Chris Sidell
40cd722eaf Change name to not collide with duplicate definition in RpcException 2019-07-03 18:22:08 -07:00
Chris Sidell
724ddd8d23 Make errors serializable by default 2019-07-03 18:11:42 -07:00
Livio
73e573fdbb chore(): Remove Gitter badge 2019-07-04 01:07:54 +02:00
Renovate Bot
68d84d95bb chore(deps): pin dependency lerna to 2.11.0 2019-07-03 21:12:37 +00:00
Kamil Myśliwiec
acbeb1cd33 deps(): downgrade lerna version 2019-07-03 23:02:10 +02:00
Kamil Myśliwiec
3d4b423fd6 chore(@nestjs) publish v6.4.1 release 2019-07-03 23:01:06 +02:00
Renovate Bot
92ad5d26f4 fix(deps): update dependency mongoose to v5.6.3 2019-07-03 18:10:17 +00:00
Renovate Bot
ace9a237ed chore(deps): update dependency @types/node to v10.14.12 2019-07-03 17:34:41 +00:00
Renovate Bot
1ea450d511 chore(deps): update dependency @types/node to v8.10.50 2019-07-03 17:14:38 +00:00
Renovate Bot
29953ab96d fix(deps): update dependency graphql to v14.4.2 2019-07-03 15:11:12 +00:00
Renovate Bot
3b28b51bc2 fix(deps): update dependency ts-morph to v3.1.0 2019-07-03 01:17:29 +00:00
Renovate Bot
90a0c3b0f5 fix(deps): update dependency swagger-ui-express to v4.0.7 2019-07-02 18:58:54 +00:00
Kamil Myśliwiec
a4383966e1 chore(): publish 6.4.1 release 2019-07-02 15:00:18 +02:00
Kamil Mysliwiec
e4121d6eb4 Merge pull request #2491 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9.0.1
2019-07-02 13:52:32 +02:00
Kamil Mysliwiec
670c33e8b4 Merge pull request #2492 from nestjs/renovate/sequelize-5.x
fix(deps): update dependency sequelize to v5.9.1
2019-07-02 13:52:24 +02:00
Kamil Myśliwiec
5ef764abb5 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-02 13:51:44 +02:00
Kamil Myśliwiec
7a93b0d91f fix(microservices): fix request scoped enhancers #2489 2019-07-02 13:51:33 +02:00
Renovate Bot
7be5d14642 fix(deps): update dependency sequelize to v5.9.1 2019-07-02 11:05:15 +00:00
Renovate Bot
88f9473ad7 chore(deps): update dependency lint-staged to v9.0.1 2019-07-02 11:05:04 +00:00
Kamil Mysliwiec
e46169aeaa Merge pull request #2485 from nestjs/renovate/lint-staged-9.x
chore(deps): update dependency lint-staged to v9
2019-07-02 09:48:37 +02:00
Kamil Myśliwiec
791b1ceaa6 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-02 08:53:42 +02:00
Kamil Myśliwiec
0d2f78542d tests(): fix integration tests 2019-07-02 08:49:56 +02:00
Renovate Bot
90e92cdb9e chore(deps): update dependency lint-staged to v9 2019-07-02 06:20:32 +00:00
Kamil Mysliwiec
a0b04c71dc Merge pull request #2490 from nestjs/renovate/delete-empty-3.x
chore(deps): update dependency delete-empty to v3
2019-07-02 08:12:45 +02:00
Kamil Mysliwiec
a9aac4560c Merge pull request #2487 from nestjs/renovate/mongoose-5.x
chore(deps): update dependency @types/mongoose to v5.5.7
2019-07-02 08:12:25 +02:00
Renovate Bot
3715946e16 chore(deps): update dependency delete-empty to v3 2019-07-02 05:52:48 +00:00
Renovate Bot
da63a3fd18 chore(deps): update dependency @types/mongoose to v5.5.7 2019-07-01 20:31:18 +00:00
Kamil Myśliwiec
0fb20e1e53 Merge branch 'master' of https://github.com/nestjs/nest 2019-07-01 22:13:37 +02:00
Kamil Myśliwiec
2487ab855e feat(microservice): register modules on init call #2350 2019-07-01 22:13:08 +02:00
Kamil Mysliwiec
eccd5d2b0c Merge pull request #2483 from nestjs/renovate/nest-monorepo
fix(deps): update nest monorepo to v6.4.0
2019-07-01 22:03:44 +02:00
Kamil Myśliwiec
e8a66ea35b test(): increase test coverage (unit tests) 2019-07-01 21:33:34 +02:00
Renovate Bot
093ccfe7b7 fix(deps): update nest monorepo to v6.4.0 2019-07-01 14:58:35 +00:00
Kamil Myśliwiec
8bd4fe2718 deps(): remove needless dependency 2019-07-01 15:26:19 +02:00
Kamil Myśliwiec
dd6d28972a deps(): update to latest grpc packages 2019-07-01 15:14:45 +02:00
John Biundo
2bd0535cf8 Merge pull request #2 from nestjs/master
merge upstream
2019-06-28 09:22:18 -07:00
John Biundo
4a7bb39c94 sample(new auth sample): matches new auth chapter 2019-06-19 12:26:20 -07:00
John Biundo
fb7f79383d Merge pull request #1 from nestjs/master
merge upstream
2019-06-19 12:08:57 -07:00
258 changed files with 10069 additions and 10236 deletions

View File

@@ -1,24 +1,56 @@
language: node_js
node_js:
- "8"
- "10"
- "11"
cache:
directories:
- "node_modules"
git:
depth: 5
addons:
firefox: "latest"
before_script:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
before_install:
- npm i -g npm@latest
install:
- npm ci
- npm run build:dev
script:
- npm run lint
- npm test
after_success: npm run coverage
jobs:
include:
- state: "Test"
name: "Unit Test Node v12"
script: npm test
node_js: 12
after_success: npm run coverage
- state: "Test"
name: "Unit Test Node v10"
script: npm test
node_js: 10
- state: "Test"
name: "Unit Test Node v8"
script: npm test
node_js: 8
- state: "Test"
name: "Integration Test"
install: skip
before_install: skip
before_script: skip
addons: skip
script:
sudo service mysql stop &&
bash ./scripts/prepare.sh &&
npm run integration-test
node_js: 12
- stage: "Test"
name: "Lint"
script: npm run lint
node_js: 12
- stage: "Test"
name: "Build samples"
script: npm run build:samples
node_js: 12

7
CONTRIBUTING.md Normal file → Executable file
View File

@@ -29,7 +29,7 @@ Stack Overflow is a much better place to ask questions since:
To save your and our time, we will systematically close all issues that are requests for general support and redirect people to Stack Overflow.
If you would like to chat about the question in real-time, you can reach out via [our gitter channel][gitter].
If you would like to chat about the question in real-time, you can reach out via [our discord channel][discord].
## <a name="issue"></a> Found a Bug?
@@ -206,8 +206,7 @@ To ensure consistency throughout the source code, keep these rules in mind as yo
* All features or bug fixes **must be tested** by one or more specs (unit-tests).
* We follow [Google's JavaScript Style Guide][js-style-guide], but wrap all code at
**100 characters**. An automated formatter is available, see
[DEVELOPER.md](docs/DEVELOPER.md#clang-format).
**100 characters**. An automated formatter is available (`npm run format`).
## <a name="commit"></a> Commit Message Guidelines
@@ -320,7 +319,7 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise
[corporate-cla]: http://code.google.com/legal/corporate-cla-v1.0.html
[dev-doc]: https://github.com/nestjs/nest/blob/master/docs/DEVELOPER.md
[github]: https://github.com/nestjs/nest
[gitter]: https://gitter.im/nestjs/nestjs
[discord]: https://discordapp.com/invite/G7Qnnhy
[individual-cla]: http://code.google.com/legal/individual-cla-v1.0.html
[js-style-guide]: https://google.github.io/styleguide/jsguide.html
[jsfiddle]: http://jsfiddle.net

View File

@@ -7,7 +7,7 @@
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux
[linux-url]: https://travis-ci.org/nestjs/nest
<p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications, heavily inspired by <a href="https://angular.io" target="blank">Angular</a>.</p>
<p align="center">A progressive <a href="http://nodejs.org" target="_blank">Node.js</a> framework for building efficient and scalable server-side applications.</p>
<p align="center">
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/v/@nestjs/core.svg" alt="NPM Version" /></a>
<a href="https://www.npmjs.com/~nestjscore" target="_blank"><img src="https://img.shields.io/npm/l/@nestjs/core.svg" alt="Package License" /></a>
@@ -15,7 +15,6 @@
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a>
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a>
<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge" target="_blank"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>
@@ -61,25 +60,23 @@ Nest is an MIT-licensed open source project. It can grow thanks to the sponsors
#### Sponsors
<a href="https://www.swingdev.io" target="_blank"><img src="https://nestjs.com/img/swingdev-logo.svg#1" width="125" valign="middle" /> </a> &nbsp; <a href="https://blueanchor.io/" target="_blank"><img src="https://nestjs.com/img/blueanchor.png" width="180" valign="middle" /></a> &nbsp;
<a href="https://www.novologic.com/" target="_blank"><img src="https://nestjs.com/img/novologic.png" width="130" valign="middle" /></a> &nbsp;
<a href="https://scal.io" target="_blank"><img src="https://nestjs.com/img/scalio-logo.svg" width="100" valign="middle" /></a> &nbsp; <a href="http://angularity.io" target="_blank"><img src="http://angularity.io/media/logo.svg" height="26" valign="middle" /></a> &nbsp; <!--<a href="https://keycdn.com"><img src="https://nestjs.com/img/keycdn.svg" height="30" /></a> &nbsp;--> <a href="https://hostpresto.com" target="_blank"><img src="https://nestjs.com/img/hostpresto.png" height="30" valign="middle" /></a>
&nbsp; <a href="https://genuinebee.com/" target="_blank"><img src="https://nestjs.com/img/genuinebee.svg" height="36" valign="middle" /></a> &nbsp; <a href="http://architectnow.net/" target="_blank"><img src="https://nestjs.com/img/architectnow.png" height="24" valign="middle" /></a> &nbsp; <a href="https://quander.io/" target="_blank"><img src="https://nestjs.com/img/quander.png" height="28" valign="middle" /></a> &nbsp; <a href="https://mantro.net/" target="_blank"><img src="https://nestjs.com/img/mantro-logo.svg" height="20" valign="middle" /></a> &nbsp; <a href="https://triplebyte.com/" target="_blank"><img src="https://nestjs.com/img/triplebyte.png" height="30" valign="middle" /></a> &nbsp;
<a href="https://ever.co/" target="_blank"><img src="https://nestjs.com/img/ever-logo.png" height="20" valign="middle" /></a> &nbsp;
<a href="https://buddy.works/" target="_blank"><img src="https://nestjs.com/img/buddy-logo.svg" height="35" valign="middle" /></a> &nbsp;
<a href="https://blokt.com" target="_blank"><img src="https://nestjs.com/img/blokt-logo.png" height="31" valign="middle" /></a> &nbsp;
<a href="https://reposit.co.uk/" target="_blank"><img src="https://nestjs.com/img/reposit-logo.png" height="28" valign="middle" /></a> &nbsp; &nbsp; <a href="https://yakaz.com/" target="_blank"><img src="https://nestjs.com/img/yakaz.png" width="80" valign="middle" /></a> &nbsp;
<a href="https://nearpod.com/" target="_blank"><img src="https://nestjs.com/img/nearpod-logo.svg" width="120" valign="middle" /></a> &nbsp;
<a href="https://clay.global/" target="_blank"><img src="https://nestjs.com/img/clay-logo.svg" width="90" valign="middle" /></a> &nbsp;
<a href="https://firesticktricks.com" target="_blank"><img src="https://nestjs.com/img/firesticktricks-logo.png" width="145" valign="middle" /></a> &nbsp;
<a href="http://xtremis.com/" target="_blank"><img src="https://nestjs.com/img/logo-xtremis.svg" width="145" valign="middle" /></a>
<a href="https://www.swingdev.io" target="_blank"><img src="https://nestjs.com/img/swingdev-logo.svg#1" width="110" valign="middle" /> </a> &nbsp; <a href="https://blueanchor.io/" target="_blank"><img src="https://nestjs.com/img/blueanchor.png" width="150" valign="middle" /></a> &nbsp;
<a href="https://www.novologic.com/" target="_blank"><img src="https://nestjs.com/img/novologic.png" width="110" valign="middle" /></a> &nbsp;
<a href="https://scal.io" target="_blank"><img src="https://nestjs.com/img/scalio-logo.svg" width="80" valign="middle" /></a> &nbsp; <a href="http://angularity.io" target="_blank"><img src="http://angularity.io/media/logo.svg" height="22" valign="middle" /></a> &nbsp; <!--<a href="https://keycdn.com"><img src="https://nestjs.com/img/keycdn.svg" height="30" /></a> &nbsp;--> <a href="https://hostpresto.com" target="_blank"><img src="https://nestjs.com/img/hostpresto.png" height="24" valign="middle" /></a>
<a href="https://ever.co/" target="_blank"><img src="https://nestjs.com/img/ever-logo.png" height="14" valign="middle" /></a> &nbsp;
<a href="https://buddy.works/" target="_blank"><img src="https://nestjs.com/img/buddy-logo.svg" height="25" valign="middle" /></a> &nbsp;
<a href="https://blokt.com" target="_blank"><img src="https://nestjs.com/img/blokt-logo.png" height="25" valign="middle" /></a> &nbsp; <a href="https://genuinebee.com/" target="_blank"><img src="https://nestjs.com/img/genuinebee.svg" height="24" valign="middle" /></a> &nbsp; <a href="http://architectnow.net/" target="_blank"><img src="https://nestjs.com/img/architectnow.png" height="20" valign="middle" /></a> &nbsp; <a href="https://quander.io/" target="_blank"><img src="https://nestjs.com/img/quander.png" height="22" valign="middle" /></a> &nbsp; <a href="https://mantro.net/" target="_blank"><img src="https://nestjs.com/img/mantro-logo.svg" height="19" valign="middle" /></a> &nbsp; <a href="https://triplebyte.com/" target="_blank"><img src="https://nestjs.com/img/triplebyte.png" height="20" valign="middle" /></a> &nbsp;
<a href="https://reposit.co.uk/" target="_blank"><img src="https://nestjs.com/img/reposit-logo.png" height="18" valign="middle" /></a> &nbsp; &nbsp; <a href="https://yakaz.com/" target="_blank"><img src="https://nestjs.com/img/yakaz.png" width="70" valign="middle" /></a> &nbsp;
<a href="https://nearpod.com/" target="_blank"><img src="https://nestjs.com/img/nearpod-logo.svg" width="100" valign="middle" /></a> &nbsp;
<a href="https://clay.global/" target="_blank"><img src="https://nestjs.com/img/clay-logo.svg" width="75" valign="middle" /></a> &nbsp;
<a href="https://firesticktricks.com" target="_blank"><img src="https://nestjs.com/img/firesticktricks-logo.png" width="120" valign="middle" /></a> &nbsp;
<a href="https://www.codeguesser.co.uk" target="_blank"><img src="https://nestjs.com/img/codeguesser-logo.svg" width="120" valign="middle" /></a> &nbsp;
<a href="https://tekhattan.com" target="_blank"><img src="https://nestjs.com/img/tekhattan-logo.png" width="110" valign="middle" /></a>
## Backers
<a href="https://opencollective.com/nest" target="_blank"><img src="https://opencollective.com/nest/backers.svg?width=1600"></a>
<a href="https://opencollective.com/nest" target="_blank"><img src="https://opencollective.com/nest/backers.svg?width=1000"></a>
## Stay in touch

View File

@@ -1,117 +1,16 @@
const fs = require('fs');
'use strict';
/**
* Load the TypeScript compiler, then load the TypeScript gulpfile which simply loads all
* the tasks. The tasks are really inside tools/gulp/tasks.
*/
const path = require('path');
const gulp = require('gulp');
const ts = require('gulp-typescript');
const sourcemaps = require('gulp-sourcemaps');
const clean = require('gulp-clean');
const deleteEmpty = require('delete-empty');
const packages = {
common: ts.createProject('packages/common/tsconfig.json'),
core: ts.createProject('packages/core/tsconfig.json'),
microservices: ts.createProject('packages/microservices/tsconfig.json'),
websockets: ts.createProject('packages/websockets/tsconfig.json'),
testing: ts.createProject('packages/testing/tsconfig.json'),
'platform-express': ts.createProject(
'packages/platform-express/tsconfig.json',
),
'platform-fastify': ts.createProject(
'packages/platform-fastify/tsconfig.json',
),
'platform-socket.io': ts.createProject(
'packages/platform-socket.io/tsconfig.json',
),
'platform-ws': ts.createProject('packages/platform-ws/tsconfig.json'),
};
const modules = Object.keys(packages);
const source = 'packages';
const distId = process.argv.indexOf('--dist');
const dist = distId < 0 ? source : process.argv[distId + 1];
const projectDir = __dirname;
const tsconfigPath = path.join(projectDir, 'tools/gulp/tsconfig.json');
gulp.task('default', function() {
modules.forEach(module => {
gulp.watch(
[`${source}/${module}/**/*.ts`, `${source}/${module}/*.ts`],
[module],
);
});
require('ts-node').register({
project: tsconfigPath
});
gulp.task('copy-misc', function() {
return gulp
.src(['Readme.md', 'LICENSE', '.npmignore'])
.pipe(gulp.dest(`${source}/common`))
.pipe(gulp.dest(`${source}/core`))
.pipe(gulp.dest(`${source}/microservices`))
.pipe(gulp.dest(`${source}/websockets`))
.pipe(gulp.dest(`${source}/testing`))
.pipe(gulp.dest(`${source}/platform-fastify`))
.pipe(gulp.dest(`${source}/platform-express`))
.pipe(gulp.dest(`${source}/platform-ws`))
.pipe(gulp.dest(`${source}/platform-socket.io`));
});
gulp.task('clean:output', function() {
return gulp
.src(
[`${source}/**/*.js`, `${source}/**/*.d.ts`, `${source}/**/*.js.map`],
{
read: false,
},
)
.pipe(clean());
});
gulp.task('clean:dirs', function(done) {
deleteEmpty.sync(`${source}/`);
done();
});
gulp.task('clean:bundle', gulp.series('clean:output', 'clean:dirs'));
modules.forEach(module => {
gulp.task(module, () => {
return packages[module]
.src()
.pipe(packages[module]())
.pipe(gulp.dest(`${dist}/${module}`));
});
});
modules.forEach(module => {
gulp.task(module + ':dev', () => {
return packages[module]
.src()
.pipe(sourcemaps.init())
.pipe(packages[module]())
.pipe(
sourcemaps.mapSources(sourcePath => './' + sourcePath.split('/').pop()),
)
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(`${dist}/${module}`));
});
});
gulp.task('common:dev', gulp.series(modules.map(module => module + ':dev')));
gulp.task('build', gulp.series(modules));
gulp.task('build:dev', gulp.series('common:dev'));
function getFolders(dir) {
return fs.readdirSync(dir).filter(function(file) {
return fs.statSync(path.join(dir, file)).isDirectory();
});
}
gulp.task('move', function() {
const getDirs = base => getFolders(base).map(path => `${base}/${path}`);
const examplesDirs = getDirs('sample');
const integrationDirs = getDirs('integration');
const directories = examplesDirs.concat(integrationDirs);
let stream = gulp.src(['node_modules/@nestjs/**/*']);
directories.forEach(dir => {
stream = stream.pipe(gulp.dest(dir + '/node_modules/@nestjs'));
});
return stream;
});
require('./tools/gulp/gulpfile');

View File

@@ -23,7 +23,7 @@ services:
- "9001:9001"
restart: always
mysql:
image: mysql:5.7.26
image: mysql:5.7.27
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test

File diff suppressed because it is too large Load Diff

View File

@@ -9,21 +9,21 @@
"start:prod": "node dist/main.js"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/graphql": "6.2.4",
"apollo-server-express": "2.6.7",
"graphql": "14.4.1",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/graphql": "6.4.2",
"apollo-server-express": "2.8.1",
"graphql": "14.5.0",
"graphql-tools": "4.0.5",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"subscriptions-transport-ws": "0.9.16",
"typescript": "3.5.2",
"ws": "7.0.1"
"typescript": "3.5.3",
"ws": "7.1.2"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"ts-node": "8.3.0",
"tslint": "5.18.0"
"tslint": "5.19.0"
}
}

View File

@@ -10,7 +10,8 @@
"target": "es6",
"sourceMap": true,
"allowJs": true,
"outDir": "./dist"
"outDir": "./dist",
"skipLibCheck": true
},
"include": [
"src/**/*"

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -28,9 +28,9 @@
}
},
"@nestjs/microservices": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.3.2.tgz",
"integrity": "sha512-daEzZ4L+BpMmu9KDFUgdU7+HgeVug//qrHlVTrdqCjyNd4vgZFgXrHGNOOFWYdZCwyY2I9qrL+XEv3pz3VeXyA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.5.3.tgz",
"integrity": "sha512-T9zZf61myahenI4c0qhcYnhnx49L+zL9+8W6fc+LPTarbt1HJDu6iyj6fh2BzewakwNLJRyGMJ9YCYlXhFuvlA==",
"requires": {
"iterare": "1.2.0",
"json-socket": "0.3.0",
@@ -38,17 +38,17 @@
}
},
"@nestjs/testing": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.3.2.tgz",
"integrity": "sha512-BlXpA5KWok7AxwDzWn/yaOhqhAYDxUE17e+hanPEUxGkCInQIc750lG/M6ZF6aQNg1llxHquYyVKJLvzhdZqBA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.5.3.tgz",
"integrity": "sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==",
"requires": {
"optional": "0.1.4"
}
},
"@nestjs/websockets": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.3.2.tgz",
"integrity": "sha512-ZOYbcqeBKMWXqZwBb06XejbNtVu0+X/jwKgL5SYJTs1kmnsCmRvmDzDEeMvx5Ign0cr3tF8SSOW6ysntdnIxXQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.5.3.tgz",
"integrity": "sha512-YrCvmLHTW0OBusTiUOPrG0PNrw/3Gatty/bh3ro5cEoiovcaJxGSMsTC+JSVXqPwRJjEtoHMCr5Qje2rAepIzQ==",
"requires": {
"iterare": "1.2.0"
}
@@ -64,20 +64,25 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"abstract-logging": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-1.0.0.tgz",
"integrity": "sha1-i33q/TEFWbwo93ck3RuzAXcnjBs="
},
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -171,12 +176,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -255,9 +261,9 @@
}
},
"deepmerge": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz",
"integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA=="
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz",
"integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww=="
},
"delayed-stream": {
"version": "1.0.0",
@@ -347,12 +353,12 @@
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fast-json-stringify": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.15.3.tgz",
"integrity": "sha512-p+ucnySTbrUQ9M7u8ygFIxrmpG8B+8O4/PvLDdh+RqMMgj/h6OoDb7U2lP+kqg3PDclQBFbSIArRhkorFwZLLg==",
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.15.4.tgz",
"integrity": "sha512-lsGTxL0OIGjGSUXgWUOdSgjCL/xMyMvMudfGN3D1zOLEv44fYZ1ZXmMyCON5XdpaiZN6nCXmU7GQg7fbXfPG4g==",
"requires": {
"ajv": "^6.8.1",
"deepmerge": "^3.0.0"
"deepmerge": "^4.0.0"
}
},
"fast-redact": {
@@ -366,19 +372,19 @@
"integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg=="
},
"fastify": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-2.6.0.tgz",
"integrity": "sha512-3GxGV2P8731o2S5T6ng5NMJ9S7vFpZA4mk2mJEbMbhQ5aj1HhNGBOe39TYa2gWRrJVJuXxYYYIlY/5cFhiHpNg==",
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-2.7.1.tgz",
"integrity": "sha512-ScKPXD84lkdCgz7q0zjyBr1aLxKbXRt9HYL3XIt/L8ZD2f3fAcsLEyQ2/rHxLUzLGjPlEjIvprWUL3RZvlLRLw==",
"requires": {
"abstract-logging": "^1.0.0",
"ajv": "^6.9.2",
"ajv": "^6.10.2",
"avvio": "^6.1.1",
"fast-json-stringify": "^1.15.0",
"find-my-way": "^2.0.0",
"flatstr": "^1.0.12",
"light-my-request": "^3.2.0",
"light-my-request": "^3.4.1",
"middie": "^4.0.1",
"pino": "^5.11.1",
"pino": "^5.13.1",
"proxy-addr": "^2.0.4",
"readable-stream": "^3.1.1",
"rfdc": "^1.1.2",
@@ -440,9 +446,9 @@
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -485,9 +491,9 @@
"integrity": "sha512-jc8ZbUnYIWdxERFWQKVgwSLkGSe+kyzvmYxwNaRgx/c8NNyuHes4UHnPM3LUrAFXUx1BhNJ94n1h/KCRlbvV0g=="
},
"light-my-request": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.4.0.tgz",
"integrity": "sha512-zIEl4lKwATE5uPmxEZkVIIAr/JGrHEngf9MDZ7a1TodLZ93kROYkKkoqSCmQIJ01FXrzyYMnmtemBO/b1HFt0Q==",
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.4.1.tgz",
"integrity": "sha512-E1zMvRWjqsaCS60dTkD7c//xKV1KOFD2zo92Ru3o3e95lCfQSDCC9aS8MZm1V+zXaA/SeKDwK9gvrfaCseTusg==",
"requires": {
"ajv": "^6.8.1",
"readable-stream": "^3.1.1"
@@ -589,16 +595,16 @@
"integrity": "sha512-ZOtfhPttCrqp2M1PBBH4X13XlvnfhIwD7yCLx+GoGoXRPQyxGOTdQMpIzPSPKXAJT/JQrdfFrgdJOyAzvgpQ9A=="
},
"pino": {
"version": "5.12.6",
"resolved": "https://registry.npmjs.org/pino/-/pino-5.12.6.tgz",
"integrity": "sha512-LM5ug2b27uymIIkaBw54ncF+9DSf8S4z1uzw+Y5I94dRu3Z+lFuB13j0kg1InAeyxy+CsLGnWHKy9+zgTreFOg==",
"version": "5.13.1",
"resolved": "https://registry.npmjs.org/pino/-/pino-5.13.1.tgz",
"integrity": "sha512-IxusG28L0g50uuf21kZELypdFOeNrJ/kRhktdi7LtdZQWCxLliMxG5iOrGUQ/ng7MiJ4XqXi/hfyXwZeKc1MxA==",
"requires": {
"fast-redact": "^1.4.4",
"fast-safe-stringify": "^2.0.6",
"flatstr": "^1.0.9",
"pino-std-serializers": "^2.3.0",
"quick-format-unescaped": "^3.0.2",
"sonic-boom": "^0.7.3"
"sonic-boom": "^0.7.5"
}
},
"pino-std-serializers": {
@@ -699,11 +705,11 @@
"integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
},
"sonic-boom": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.4.tgz",
"integrity": "sha512-8JRAJg0RxZtFLQMxolwETvWd2JSlH3ZGo/Z4xPxMbpqF14xCgVYPVeFCFOR3zyr3pcfG82QDVj6537Sx5ZWdNw==",
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.5.tgz",
"integrity": "sha512-1pKrnAV6RfvntPnarY71tpthFTM3pWZWWQdghZY8ARjtDPGzG/inxqSuRwQY/7V1woUjfyxPb437zn4p5phgnQ==",
"requires": {
"flatstr": "^1.0.9"
"flatstr": "^1.0.12"
}
},
"source-map": {
@@ -836,9 +842,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"uri-js": {
"version": "4.2.2",
@@ -859,9 +865,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,20 +7,20 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/microservices": "6.3.2",
"@nestjs/testing": "6.3.2",
"@nestjs/websockets": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/microservices": "6.5.3",
"@nestjs/testing": "6.5.3",
"@nestjs/websockets": "6.5.3",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"fastify": "2.6.0",
"class-validator": "0.10.0",
"fastify": "2.7.1",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -1,9 +1,9 @@
import { Injectable, OnApplicationShutdown } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import { expect } from 'chai';
import * as Sinon from 'sinon';
import { Injectable, OnApplicationShutdown, ShutdownSignal } from '@nestjs/common';
import { spawn, spawnSync } from 'child_process';
import { spawnSync } from 'child_process';
import { join } from 'path';
import * as Sinon from 'sinon';
@Injectable()
class TestInjectable implements OnApplicationShutdown {
@@ -23,26 +23,41 @@ describe('OnApplicationShutdown', () => {
});
it('should call onApplicationShutdown if any shutdown signal gets invoked', done => {
const result = spawnSync('ts-node', [join(__dirname, '../src/main.ts'), 'SIGHUP']);
expect(result.stdout.toString().trim()).to.be.eq('Signal SIGHUP');
const result = spawnSync('ts-node', [
join(__dirname, '../src/main.ts'),
'SIGHUP',
]);
expect(result.stdout.toString().trim() === 'Signal SIGHUP').to.be.true;
done();
});
}).timeout(5000);
it('should call onApplicationShutdown if a specific shutdown signal gets invoked', done => {
const result = spawnSync('ts-node', [join(__dirname, '../src/main.ts'), 'SIGINT', 'SIGINT']);
const result = spawnSync('ts-node', [
join(__dirname, '../src/main.ts'),
'SIGINT',
'SIGINT',
]);
expect(result.stdout.toString().trim()).to.be.eq('Signal SIGINT');
done();
});
}).timeout(5000);
it('should ignore system signals which are not specified', done => {
const result = spawnSync('ts-node', [join(__dirname, '../src/main.ts'), 'SIGINT', 'SIGHUP']);
const result = spawnSync('ts-node', [
join(__dirname, '../src/main.ts'),
'SIGINT',
'SIGHUP',
]);
expect(result.stdout.toString().trim()).to.be.eq('');
done();
});
}).timeout(5000);
it('should ignore system signals if "enableShutdownHooks" was not called', done => {
const result = spawnSync('ts-node', [join(__dirname, '../src/main.ts'), 'SIGINT', 'NONE']);
const result = spawnSync('ts-node', [
join(__dirname, '../src/main.ts'),
'SIGINT',
'NONE',
]);
expect(result.stdout.toString().trim()).to.be.eq('');
done();
});
}).timeout(5000);
});

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -38,11 +38,16 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -99,12 +104,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -301,9 +307,9 @@
"dev": true
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -561,9 +567,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"util-deprecate": {
"version": "1.0.2",
@@ -577,9 +583,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,16 +7,16 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"class-validator": "0.10.0",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -28,9 +28,9 @@
}
},
"@nestjs/microservices": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.3.2.tgz",
"integrity": "sha512-daEzZ4L+BpMmu9KDFUgdU7+HgeVug//qrHlVTrdqCjyNd4vgZFgXrHGNOOFWYdZCwyY2I9qrL+XEv3pz3VeXyA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.5.3.tgz",
"integrity": "sha512-T9zZf61myahenI4c0qhcYnhnx49L+zL9+8W6fc+LPTarbt1HJDu6iyj6fh2BzewakwNLJRyGMJ9YCYlXhFuvlA==",
"requires": {
"iterare": "1.2.0",
"json-socket": "0.3.0",
@@ -38,17 +38,17 @@
}
},
"@nestjs/testing": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.3.2.tgz",
"integrity": "sha512-BlXpA5KWok7AxwDzWn/yaOhqhAYDxUE17e+hanPEUxGkCInQIc750lG/M6ZF6aQNg1llxHquYyVKJLvzhdZqBA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.5.3.tgz",
"integrity": "sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==",
"requires": {
"optional": "0.1.4"
}
},
"@nestjs/websockets": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.3.2.tgz",
"integrity": "sha512-ZOYbcqeBKMWXqZwBb06XejbNtVu0+X/jwKgL5SYJTs1kmnsCmRvmDzDEeMvx5Ign0cr3tF8SSOW6ysntdnIxXQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.5.3.tgz",
"integrity": "sha512-YrCvmLHTW0OBusTiUOPrG0PNrw/3Gatty/bh3ro5cEoiovcaJxGSMsTC+JSVXqPwRJjEtoHMCr5Qje2rAepIzQ==",
"requires": {
"iterare": "1.2.0"
}
@@ -64,11 +64,16 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -125,12 +130,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -327,9 +333,9 @@
"dev": true
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -592,9 +598,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"util-deprecate": {
"version": "1.0.2",
@@ -608,9 +614,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,19 +7,19 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/microservices": "6.3.2",
"@nestjs/testing": "6.3.2",
"@nestjs/websockets": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/microservices": "6.5.3",
"@nestjs/testing": "6.5.3",
"@nestjs/websockets": "6.5.3",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"class-validator": "0.10.0",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -46,7 +46,8 @@ describe('MQTT transport', () => {
.expect(200, '15');
});
it(`/POST (concurrent)`, () => {
it(`/POST (concurrent)`, function() {
this.retries(10);
return request(server)
.post('/concurrent')
.send([
@@ -62,7 +63,7 @@ describe('MQTT transport', () => {
Array.from({ length: 10 }, (v, k) => k + 91),
])
.expect(200, 'true');
});
}).timeout(5000);
it(`/POST (streaming)`, () => {
return request(server)

View File

@@ -46,7 +46,9 @@ describe('REDIS transport', () => {
.expect(200, '15');
});
it(`/POST (concurrent)`, () => {
it(`/POST (concurrent)`, function() {
this.retries(10);
return request(server)
.post('/concurrent')
.send([
@@ -62,7 +64,7 @@ describe('REDIS transport', () => {
Array.from({ length: 10 }, (v, k) => k + 91),
])
.expect(200, 'true');
});
}).timeout(5000);
it(`/POST (streaming)`, () => {
return request(server)

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -28,9 +28,9 @@
}
},
"@nestjs/microservices": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.3.2.tgz",
"integrity": "sha512-daEzZ4L+BpMmu9KDFUgdU7+HgeVug//qrHlVTrdqCjyNd4vgZFgXrHGNOOFWYdZCwyY2I9qrL+XEv3pz3VeXyA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.5.3.tgz",
"integrity": "sha512-T9zZf61myahenI4c0qhcYnhnx49L+zL9+8W6fc+LPTarbt1HJDu6iyj6fh2BzewakwNLJRyGMJ9YCYlXhFuvlA==",
"requires": {
"iterare": "1.2.0",
"json-socket": "0.3.0",
@@ -38,28 +38,28 @@
}
},
"@nestjs/platform-express": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-6.3.2.tgz",
"integrity": "sha512-fQTh+zXDgw7W/30ctVlhOCZVDn8P0Ry1UcxltH2dAmyYDih+gQtWeEMzotwB6MwaAAAo8hQ8nBWWY4vez1dzJQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-6.5.3.tgz",
"integrity": "sha512-c5n4XUbDDmF6MfBGYWM1jtsIDpVsOfOQtf3S0w3IeJNqm7dnmVAvO2Jk+RsYpt50tN4NAXntM3YTuTDqMb9uiA==",
"requires": {
"body-parser": "1.19.0",
"cors": "2.8.5",
"express": "4.17.1",
"multer": "1.4.1"
"multer": "1.4.2"
}
},
"@nestjs/testing": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.3.2.tgz",
"integrity": "sha512-BlXpA5KWok7AxwDzWn/yaOhqhAYDxUE17e+hanPEUxGkCInQIc750lG/M6ZF6aQNg1llxHquYyVKJLvzhdZqBA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.5.3.tgz",
"integrity": "sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==",
"requires": {
"optional": "0.1.4"
}
},
"@nestjs/websockets": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.3.2.tgz",
"integrity": "sha512-ZOYbcqeBKMWXqZwBb06XejbNtVu0+X/jwKgL5SYJTs1kmnsCmRvmDzDEeMvx5Ign0cr3tF8SSOW6ysntdnIxXQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.5.3.tgz",
"integrity": "sha512-YrCvmLHTW0OBusTiUOPrG0PNrw/3Gatty/bh3ro5cEoiovcaJxGSMsTC+JSVXqPwRJjEtoHMCr5Qje2rAepIzQ==",
"requires": {
"iterare": "1.2.0"
}
@@ -75,11 +75,16 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"accepts": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@@ -105,9 +110,9 @@
}
},
"amqp-connection-manager": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-2.3.3.tgz",
"integrity": "sha512-sYp323H2EtW9oopoKyGEdXjXbdzlE5fWyc+w6dvCHKd/sGIersEu2CNz3PE1oGyZmJC/GXRK4AtQCnVi/znYpg==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-3.0.0.tgz",
"integrity": "sha512-a5MsUDsG+CqMjwk/WNFSTE0H4pAaWJXw7L24QFa3MeaB+KA05PXoBsppYlIzaIqc1XLWZwjO9J42AFHNrDsVFQ==",
"requires": {
"promise-breaker": "^5.0.0"
}
@@ -228,12 +233,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -636,9 +642,9 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -784,9 +790,9 @@
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"multer": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.1.tgz",
"integrity": "sha512-zzOLNRxzszwd+61JFuAo0fxdQfvku12aNJgnla0AQ+hHxFmfc/B7jBVuPr5Rmvu46Jze/iJrFpSOsD7afO8SDw==",
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
"integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
"requires": {
"append-field": "^1.0.0",
"busboy": "^0.2.11",
@@ -1145,9 +1151,9 @@
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"unpipe": {
"version": "1.0.0",
@@ -1170,9 +1176,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"vary": {
"version": "1.1.2",
@@ -1180,9 +1186,9 @@
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,21 +7,21 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/microservices": "6.3.2",
"@nestjs/platform-express": "6.3.2",
"@nestjs/testing": "6.3.2",
"@nestjs/websockets": "6.3.2",
"amqp-connection-manager": "2.3.3",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/microservices": "6.5.3",
"@nestjs/platform-express": "6.5.3",
"@nestjs/testing": "6.5.3",
"@nestjs/websockets": "6.5.3",
"amqp-connection-manager": "3.0.0",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"class-validator": "0.10.0",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -16,16 +16,17 @@ export class DisconnectedClientController {
const client = ClientProxyFactory.create(options);
return client.send<number, number[]>({ cmd: 'none' }, [1, 2, 3]).pipe(
/*tap(
console.log.bind(console, 'data'),
console.error.bind(console, 'error'),
),*/
catchError(({ code }) =>
throwError(
console.log.bind(console, 'data'),
console.error.bind(console, 'error'),
),*/
catchError(error => {
const { code } = error || { code: 'CONN_ERR' };
return throwError(
code === 'ECONNREFUSED' || code === 'CONN_ERR'
? new RequestTimeoutException('ECONNREFUSED')
: new InternalServerErrorException(),
),
),
);
}),
);
}
}

View File

@@ -5,18 +5,18 @@
"requires": true,
"dependencies": {
"@babel/code-frame": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
"integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
"dev": true,
"requires": {
"@babel/highlight": "^7.0.0"
}
},
"@babel/highlight": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
"integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
"dev": true,
"requires": {
"chalk": "^2.0.0",
@@ -25,9 +25,9 @@
}
},
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -35,9 +35,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -72,9 +72,9 @@
}
},
"@types/mongodb": {
"version": "3.1.28",
"resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.1.28.tgz",
"integrity": "sha512-tG+QqJ/hir2p0069ee28t2O9tlGRJKDq1WFZC2QYMlU47LGdldLL8tepfTq6aFLvP58OpwSoxaJ/qjW93ob1NQ==",
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.3.0.tgz",
"integrity": "sha512-YMrve0uBOqFDEiezQk3AfWV73g871/rQTAEb8Y2CSlbySnV/2OyerI1DAOUUJQaIqGEWWaYF6GMPO6wTErLUuw==",
"dev": true,
"requires": {
"@types/bson": "*",
@@ -82,9 +82,9 @@
}
},
"@types/mongoose": {
"version": "5.5.6",
"resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.5.6.tgz",
"integrity": "sha512-Duco8iiwOEGB756eIyafsrFbsAxjXQPkb/nplZtbxGOhfmsA90rXjO/GbDsBYbUz5nkGOCRHuNfxOJzoVAMHMg==",
"version": "5.5.13",
"resolved": "https://registry.npmjs.org/@types/mongoose/-/mongoose-5.5.13.tgz",
"integrity": "sha512-k7Kxk5gugsZhkl7euWH1p6lmIdh9W8AsQgX0cO7kaihBie/P3ywU8LFMqo9ey6frdHBlGVaNICTeFZ/pZ6s5Lg==",
"dev": true,
"requires": {
"@types/mongodb": "*",
@@ -92,9 +92,9 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"ansi-regex": {
@@ -315,9 +315,9 @@
"dev": true
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"event-emitter": {
@@ -420,9 +420,9 @@
"integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg=="
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lru-queue": {
"version": "0.1.0",
@@ -504,9 +504,9 @@
}
},
"mongoose": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.6.2.tgz",
"integrity": "sha512-s2FQn/XTlM/yeYxqNPGU8khSA1nPhGiESO7iLdFf8Ntn6lEwgO9KKOIGkRKPk5s+peAOwO34ex6NPX8EWtKgFA==",
"version": "5.6.10",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.6.10.tgz",
"integrity": "sha512-lxWvF4Vl2118K2nZTj+QAEEmNBCbmUAcmF/roe8d+68Np4RXKEQvmpqm1c3aIlE9AVMp//eKB8IfXr38ZHe0Zw==",
"requires": {
"async": "2.6.2",
"bson": "~1.1.1",
@@ -611,9 +611,9 @@
}
},
"resolve": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
"integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -736,9 +736,9 @@
"integrity": "sha512-avfPS28HmGLLc2o4elcc2EIq2FcH++Yo5YxpBZi9Yw93BCTGFthI4HPE4Rpep6vSYQaK8e69PelM44tPj+RaQg=="
},
"tslint": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
"integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
"version": "5.19.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz",
"integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -771,9 +771,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"uuid": {
"version": "3.3.2",

View File

@@ -9,18 +9,18 @@
"start:prod": "node dist/main.js"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/mongoose": "6.1.2",
"mongoose": "5.6.2",
"mongoose": "5.6.10",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/mongoose": "5.5.6",
"@types/node": "7.10.6",
"@types/mongoose": "5.5.13",
"@types/node": "7.10.7",
"ts-node": "8.3.0",
"tslint": "5.18.0"
"tslint": "5.19.0"
}
}

View File

@@ -0,0 +1,81 @@
import { INestApplication } from '@nestjs/common';
import { Transport } from '@nestjs/microservices';
import { Test } from '@nestjs/testing';
import { expect } from 'chai';
import * as request from 'supertest';
import { Guard } from '../src/msvc/guards/request-scoped.guard';
import { HelloController } from '../src/msvc/hello.controller';
import { HelloModule } from '../src/msvc/hello.module';
import { Interceptor } from '../src/msvc/interceptors/logging.interceptor';
import { UsersService } from '../src/msvc/users/users.service';
class Meta {
static COUNTER = 0;
constructor() {
Meta.COUNTER++;
}
}
describe('Request scope (microservices)', () => {
let server;
let app: INestApplication;
before(async () => {
const module = await Test.createTestingModule({
imports: [
HelloModule.forRoot({
provide: 'META',
useClass: Meta,
}),
],
}).compile();
app = module.createNestApplication();
app.connectMicroservice({ transport: Transport.TCP });
server = app.getHttpServer();
await app.init();
await app.startAllMicroservicesAsync();
});
describe('when one service is request scoped', () => {
before(async () => {
const performHttpCall = end =>
request(server)
.get('/hello')
.end((err, res) => {
if (err) return end(err);
end();
});
await new Promise(resolve => performHttpCall(resolve));
await new Promise(resolve => performHttpCall(resolve));
await new Promise(resolve => performHttpCall(resolve));
});
it(`should create controller for each request`, async () => {
expect(HelloController.COUNTER).to.be.eql(3);
});
it(`should create service for each request`, async () => {
expect(UsersService.COUNTER).to.be.eql(3);
});
it(`should share static provider across requests`, async () => {
expect(Meta.COUNTER).to.be.eql(1);
});
it(`should create request scoped interceptor for each request`, async () => {
expect(Interceptor.COUNTER).to.be.eql(3);
expect(Interceptor.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]);
});
it(`should create request scoped guard for each request`, async () => {
expect(Guard.COUNTER).to.be.eql(3);
expect(Guard.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]);
});
});
after(async () => {
await app.close();
});
});

View File

@@ -63,14 +63,17 @@ describe('Request scope', () => {
it(`should create request scoped pipe for each request`, async () => {
expect(UserByIdPipe.COUNTER).to.be.eql(3);
expect(UserByIdPipe.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]);
});
it(`should create request scoped interceptor for each request`, async () => {
expect(Interceptor.COUNTER).to.be.eql(3);
expect(Interceptor.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]);
});
it(`should create request scoped guard for each request`, async () => {
expect(Guard.COUNTER).to.be.eql(3);
expect(Guard.REQUEST_SCOPED_DATA).to.deep.equal([1, 1, 1]);
});
});

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -28,9 +28,9 @@
}
},
"@nestjs/microservices": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.3.2.tgz",
"integrity": "sha512-daEzZ4L+BpMmu9KDFUgdU7+HgeVug//qrHlVTrdqCjyNd4vgZFgXrHGNOOFWYdZCwyY2I9qrL+XEv3pz3VeXyA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.5.3.tgz",
"integrity": "sha512-T9zZf61myahenI4c0qhcYnhnx49L+zL9+8W6fc+LPTarbt1HJDu6iyj6fh2BzewakwNLJRyGMJ9YCYlXhFuvlA==",
"requires": {
"iterare": "1.2.0",
"json-socket": "0.3.0",
@@ -38,17 +38,17 @@
}
},
"@nestjs/testing": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.3.2.tgz",
"integrity": "sha512-BlXpA5KWok7AxwDzWn/yaOhqhAYDxUE17e+hanPEUxGkCInQIc750lG/M6ZF6aQNg1llxHquYyVKJLvzhdZqBA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.5.3.tgz",
"integrity": "sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==",
"requires": {
"optional": "0.1.4"
}
},
"@nestjs/websockets": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.3.2.tgz",
"integrity": "sha512-ZOYbcqeBKMWXqZwBb06XejbNtVu0+X/jwKgL5SYJTs1kmnsCmRvmDzDEeMvx5Ign0cr3tF8SSOW6ysntdnIxXQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.5.3.tgz",
"integrity": "sha512-YrCvmLHTW0OBusTiUOPrG0PNrw/3Gatty/bh3ro5cEoiovcaJxGSMsTC+JSVXqPwRJjEtoHMCr5Qje2rAepIzQ==",
"requires": {
"iterare": "1.2.0"
}
@@ -64,20 +64,25 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"abstract-logging": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-1.0.0.tgz",
"integrity": "sha1-i33q/TEFWbwo93ck3RuzAXcnjBs="
},
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -171,12 +176,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -255,9 +261,9 @@
}
},
"deepmerge": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz",
"integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA=="
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.0.0.tgz",
"integrity": "sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww=="
},
"delayed-stream": {
"version": "1.0.0",
@@ -347,12 +353,12 @@
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
},
"fast-json-stringify": {
"version": "1.15.3",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.15.3.tgz",
"integrity": "sha512-p+ucnySTbrUQ9M7u8ygFIxrmpG8B+8O4/PvLDdh+RqMMgj/h6OoDb7U2lP+kqg3PDclQBFbSIArRhkorFwZLLg==",
"version": "1.15.4",
"resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-1.15.4.tgz",
"integrity": "sha512-lsGTxL0OIGjGSUXgWUOdSgjCL/xMyMvMudfGN3D1zOLEv44fYZ1ZXmMyCON5XdpaiZN6nCXmU7GQg7fbXfPG4g==",
"requires": {
"ajv": "^6.8.1",
"deepmerge": "^3.0.0"
"deepmerge": "^4.0.0"
}
},
"fast-redact": {
@@ -366,19 +372,19 @@
"integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg=="
},
"fastify": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-2.6.0.tgz",
"integrity": "sha512-3GxGV2P8731o2S5T6ng5NMJ9S7vFpZA4mk2mJEbMbhQ5aj1HhNGBOe39TYa2gWRrJVJuXxYYYIlY/5cFhiHpNg==",
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/fastify/-/fastify-2.7.1.tgz",
"integrity": "sha512-ScKPXD84lkdCgz7q0zjyBr1aLxKbXRt9HYL3XIt/L8ZD2f3fAcsLEyQ2/rHxLUzLGjPlEjIvprWUL3RZvlLRLw==",
"requires": {
"abstract-logging": "^1.0.0",
"ajv": "^6.9.2",
"ajv": "^6.10.2",
"avvio": "^6.1.1",
"fast-json-stringify": "^1.15.0",
"find-my-way": "^2.0.0",
"flatstr": "^1.0.12",
"light-my-request": "^3.2.0",
"light-my-request": "^3.4.1",
"middie": "^4.0.1",
"pino": "^5.11.1",
"pino": "^5.13.1",
"proxy-addr": "^2.0.4",
"readable-stream": "^3.1.1",
"rfdc": "^1.1.2",
@@ -440,9 +446,9 @@
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -485,9 +491,9 @@
"integrity": "sha512-jc8ZbUnYIWdxERFWQKVgwSLkGSe+kyzvmYxwNaRgx/c8NNyuHes4UHnPM3LUrAFXUx1BhNJ94n1h/KCRlbvV0g=="
},
"light-my-request": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.4.0.tgz",
"integrity": "sha512-zIEl4lKwATE5uPmxEZkVIIAr/JGrHEngf9MDZ7a1TodLZ93kROYkKkoqSCmQIJ01FXrzyYMnmtemBO/b1HFt0Q==",
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-3.4.1.tgz",
"integrity": "sha512-E1zMvRWjqsaCS60dTkD7c//xKV1KOFD2zo92Ru3o3e95lCfQSDCC9aS8MZm1V+zXaA/SeKDwK9gvrfaCseTusg==",
"requires": {
"ajv": "^6.8.1",
"readable-stream": "^3.1.1"
@@ -589,16 +595,16 @@
"integrity": "sha512-ZOtfhPttCrqp2M1PBBH4X13XlvnfhIwD7yCLx+GoGoXRPQyxGOTdQMpIzPSPKXAJT/JQrdfFrgdJOyAzvgpQ9A=="
},
"pino": {
"version": "5.12.6",
"resolved": "https://registry.npmjs.org/pino/-/pino-5.12.6.tgz",
"integrity": "sha512-LM5ug2b27uymIIkaBw54ncF+9DSf8S4z1uzw+Y5I94dRu3Z+lFuB13j0kg1InAeyxy+CsLGnWHKy9+zgTreFOg==",
"version": "5.13.1",
"resolved": "https://registry.npmjs.org/pino/-/pino-5.13.1.tgz",
"integrity": "sha512-IxusG28L0g50uuf21kZELypdFOeNrJ/kRhktdi7LtdZQWCxLliMxG5iOrGUQ/ng7MiJ4XqXi/hfyXwZeKc1MxA==",
"requires": {
"fast-redact": "^1.4.4",
"fast-safe-stringify": "^2.0.6",
"flatstr": "^1.0.9",
"pino-std-serializers": "^2.3.0",
"quick-format-unescaped": "^3.0.2",
"sonic-boom": "^0.7.3"
"sonic-boom": "^0.7.5"
}
},
"pino-std-serializers": {
@@ -699,11 +705,11 @@
"integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg=="
},
"sonic-boom": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.4.tgz",
"integrity": "sha512-8JRAJg0RxZtFLQMxolwETvWd2JSlH3ZGo/Z4xPxMbpqF14xCgVYPVeFCFOR3zyr3pcfG82QDVj6537Sx5ZWdNw==",
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-0.7.5.tgz",
"integrity": "sha512-1pKrnAV6RfvntPnarY71tpthFTM3pWZWWQdghZY8ARjtDPGzG/inxqSuRwQY/7V1woUjfyxPb437zn4p5phgnQ==",
"requires": {
"flatstr": "^1.0.9"
"flatstr": "^1.0.12"
}
},
"source-map": {
@@ -836,9 +842,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"uri-js": {
"version": "4.2.2",
@@ -859,9 +865,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,20 +7,20 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/microservices": "6.3.2",
"@nestjs/testing": "6.3.2",
"@nestjs/websockets": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/microservices": "6.5.3",
"@nestjs/testing": "6.5.3",
"@nestjs/websockets": "6.5.3",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"fastify": "2.6.0",
"class-validator": "0.10.0",
"fastify": "2.7.1",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -1,6 +1,7 @@
import {
CanActivate,
ExecutionContext,
Inject,
Injectable,
Scope,
} from '@nestjs/common';
@@ -9,13 +10,16 @@ import { Observable } from 'rxjs';
@Injectable({ scope: Scope.REQUEST })
export class Guard implements CanActivate {
static COUNTER = 0;
constructor() {
static REQUEST_SCOPED_DATA = [];
constructor(@Inject('REQUEST_ID') private requestId: number) {
Guard.COUNTER++;
}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
Guard.REQUEST_SCOPED_DATA.push(this.requestId);
return true;
}
}

View File

@@ -1,11 +1,19 @@
import { DynamicModule, Inject, Module, Provider } from '@nestjs/common';
import { DynamicModule, Inject, Module, Provider, Scope } from '@nestjs/common';
import { HelloController } from './hello.controller';
import { HelloService } from './hello.service';
import { UsersService } from './users/users.service';
@Module({
controllers: [HelloController],
providers: [HelloService, UsersService],
providers: [
HelloService,
UsersService,
{
provide: 'REQUEST_ID',
useFactory: () => 1,
scope: Scope.REQUEST,
},
],
})
export class HelloModule {
constructor(@Inject('META') private readonly meta) {}

View File

@@ -1,6 +1,7 @@
import {
CallHandler,
ExecutionContext,
Inject,
Injectable,
NestInterceptor,
Scope,
@@ -10,10 +11,14 @@ import { Observable } from 'rxjs';
@Injectable({ scope: Scope.REQUEST })
export class Interceptor implements NestInterceptor {
static COUNTER = 0;
constructor() {
static REQUEST_SCOPED_DATA = [];
constructor(@Inject('REQUEST_ID') private requestId: number) {
Interceptor.COUNTER++;
}
intercept(context: ExecutionContext, call: CallHandler): Observable<any> {
Interceptor.REQUEST_SCOPED_DATA.push(this.requestId);
return call.handle();
}
}

View File

@@ -1,14 +1,25 @@
import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common';
import {
ArgumentMetadata,
Inject,
Injectable,
PipeTransform,
} from '@nestjs/common';
import { UsersService } from './users.service';
@Injectable()
export class UserByIdPipe implements PipeTransform<string> {
static COUNTER = 0;
constructor(private readonly usersService: UsersService) {
static REQUEST_SCOPED_DATA = [];
constructor(
@Inject('REQUEST_ID') private requestId: number,
private readonly usersService: UsersService,
) {
UserByIdPipe.COUNTER++;
}
transform(value: string, metadata: ArgumentMetadata) {
UserByIdPipe.REQUEST_SCOPED_DATA.push(this.requestId);
return this.usersService.findById(value);
}
}

View File

@@ -0,0 +1,10 @@
import { IsString, IsNotEmpty, IsNumber } from 'class-validator';
export class TestDto {
@IsString()
@IsNotEmpty()
string: string;
@IsNumber()
number: number;
}

View File

@@ -0,0 +1,25 @@
import {
CanActivate,
ExecutionContext,
Inject,
Injectable,
Scope,
} from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable({ scope: Scope.REQUEST })
export class Guard implements CanActivate {
static COUNTER = 0;
static REQUEST_SCOPED_DATA = [];
constructor(@Inject('REQUEST_ID') private requestId: number) {
Guard.COUNTER++;
}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
Guard.REQUEST_SCOPED_DATA.push(this.requestId);
return true;
}
}

View File

@@ -0,0 +1,24 @@
import { Controller, UseGuards, UseInterceptors } from '@nestjs/common';
import { MessagePattern } from '@nestjs/microservices';
import { Guard } from './guards/request-scoped.guard';
import { HelloService } from './hello.service';
import { Interceptor } from './interceptors/logging.interceptor';
import { UsersService } from './users/users.service';
@Controller()
export class HelloController {
static COUNTER = 0;
constructor(
private readonly helloService: HelloService,
private readonly usersService: UsersService,
) {
HelloController.COUNTER++;
}
@UseGuards(Guard)
@UseInterceptors(Interceptor)
@MessagePattern('test')
greeting(): string {
return this.helloService.greeting();
}
}

View File

@@ -0,0 +1,28 @@
import { DynamicModule, Inject, Module, Provider, Scope } from '@nestjs/common';
import { HelloController } from './hello.controller';
import { HelloService } from './hello.service';
import { HttpController } from './http.controller';
import { UsersService } from './users/users.service';
@Module({
controllers: [HelloController, HttpController],
providers: [
HelloService,
UsersService,
{
provide: 'REQUEST_ID',
useFactory: () => 1,
scope: Scope.REQUEST,
},
],
})
export class HelloModule {
constructor(@Inject('META') private readonly meta) {}
static forRoot(meta: Provider): DynamicModule {
return {
module: HelloModule,
providers: [meta],
};
}
}

View File

@@ -0,0 +1,10 @@
import { Inject, Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class HelloService {
constructor(@Inject('META') private readonly meta) {}
greeting(): string {
return 'Hello world!';
}
}

View File

@@ -0,0 +1,13 @@
import { Controller, Get } from '@nestjs/common';
import { ClientProxyFactory, Transport } from '@nestjs/microservices';
@Controller()
export class HttpController {
@Get('hello')
testMsvc() {
const client = ClientProxyFactory.create({
transport: Transport.TCP,
});
return client.send('test', { test: true });
}
}

View File

@@ -0,0 +1,24 @@
import {
CallHandler,
ExecutionContext,
Inject,
Injectable,
NestInterceptor,
Scope,
} from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable({ scope: Scope.REQUEST })
export class Interceptor implements NestInterceptor {
static COUNTER = 0;
static REQUEST_SCOPED_DATA = [];
constructor(@Inject('REQUEST_ID') private requestId: number) {
Interceptor.COUNTER++;
}
intercept(context: ExecutionContext, call: CallHandler): Observable<any> {
Interceptor.REQUEST_SCOPED_DATA.push(this.requestId);
return call.handle();
}
}

View File

@@ -0,0 +1,13 @@
import { Inject, Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class UsersService {
static COUNTER = 0;
constructor(@Inject('META') private readonly meta) {
UsersService.COUNTER++;
}
findById(id: string) {
return { id };
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -9,24 +9,24 @@
"start:prod": "node dist/main.js"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/graphql": "6.2.4",
"apollo-server-express": "2.6.7",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/graphql": "6.4.2",
"apollo-server-express": "2.8.1",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"graphql": "14.4.1",
"class-validator": "0.10.0",
"graphql": "14.5.0",
"graphql-tools": "4.0.5",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"subscriptions-transport-ws": "0.9.16",
"type-graphql": "0.17.4",
"typescript": "3.5.2",
"ws": "7.0.1"
"type-graphql": "0.17.5",
"typescript": "3.5.3",
"ws": "7.1.2"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"ts-node": "8.3.0",
"tslint": "5.18.0"
"tslint": "5.19.0"
}
}

View File

@@ -5,18 +5,18 @@
"requires": true,
"dependencies": {
"@babel/code-frame": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
"integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
"dev": true,
"requires": {
"@babel/highlight": "^7.0.0"
}
},
"@babel/highlight": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
"version": "7.5.0",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
"integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
"dev": true,
"requires": {
"chalk": "^2.0.0",
@@ -25,9 +25,9 @@
}
},
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -35,9 +35,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -48,9 +48,9 @@
}
},
"@nestjs/typeorm": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-6.1.2.tgz",
"integrity": "sha512-uNLvNTW72h4mypvscBgYgE2q8LHgvrhNzV6YqJgvf0VaGv5fi72hl0Zlfwmvh7h50ysW221mJCraX56yn+Uzxw==",
"version": "6.1.3",
"resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-6.1.3.tgz",
"integrity": "sha512-860tNwms0d/pnuZNEBZCFl5FjzCGG67V8TYuPIVu66jFK/Hmq2WH/GxiC8L77rWPn/o2O5LSe51lgO95GPysGw==",
"requires": {
"uuid": "3.3.2"
}
@@ -78,9 +78,9 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"ansi-regex": {
@@ -374,9 +374,9 @@
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
},
"esutils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"event-emitter": {
@@ -856,9 +856,9 @@
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
},
"resolve": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz",
"integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==",
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
"integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
@@ -1027,9 +1027,9 @@
"integrity": "sha512-avfPS28HmGLLc2o4elcc2EIq2FcH++Yo5YxpBZi9Yw93BCTGFthI4HPE4Rpep6vSYQaK8e69PelM44tPj+RaQg=="
},
"tslint": {
"version": "5.18.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz",
"integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==",
"version": "5.19.0",
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.19.0.tgz",
"integrity": "sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -1095,9 +1095,9 @@
}
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"util-deprecate": {
"version": "1.0.2",

View File

@@ -9,18 +9,18 @@
"start:prod": "node dist/main.js"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/typeorm": "6.1.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/typeorm": "6.1.3",
"mysql": "2.17.1",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typeorm": "0.2.18",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"ts-node": "8.3.0",
"tslint": "5.18.0"
"tslint": "5.19.0"
}
}

View File

@@ -17,7 +17,6 @@ async function createNestApp(...gateways): Promise<INestApplication> {
}
describe('WebSocketGateway (WsAdapter)', () => {
const event = 'push';
let ws, ws2, app;
it(`should handle message (2nd port)`, async () => {
@@ -66,7 +65,9 @@ describe('WebSocketGateway (WsAdapter)', () => {
);
});
it(`should support 2 different gateways`, async () => {
it(`should support 2 different gateways`, async function() {
this.retries(10);
app = await createNestApp(ApplicationGateway, CoreGateway);
await app.listenAsync(3000);

View File

@@ -5,9 +5,9 @@
"requires": true,
"dependencies": {
"@nestjs/common": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.3.2.tgz",
"integrity": "sha512-4g8hlQ2cCM0ze9K1w+7OYhTVGL6PuC7tXAgFM14MOTeKVAUz2QrJveGNE0hagDTKFagx9FvwF3B7ZSOIohw7aA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/common/-/common-6.5.3.tgz",
"integrity": "sha512-8d39grIMrUYGKM46BFWxB6csQFCu1S2aK7azPivg7gTRVSbvR84cVd6tgRVM0LwFpqQrtn3Q6G6Pa8FSk7Kh1w==",
"requires": {
"axios": "0.19.0",
"cli-color": "1.4.0",
@@ -15,9 +15,9 @@
}
},
"@nestjs/core": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.3.2.tgz",
"integrity": "sha512-dmHvk/IPlJcDKWZsBF2SMePO0NpkovMUU6VrAX9KzI1Y81foH/gfWzFaBhYX6GydPqVVFrYk23zt8yqvGWAZgA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/core/-/core-6.5.3.tgz",
"integrity": "sha512-ZhYfH49sVmUUw02qsaGozCFOOehlEABakYzRShyDDq30/2+ek3KpE0DfvA9tXlzX2KVrac2qDTBxMOPoJ+zY+g==",
"requires": {
"@nuxtjs/opencollective": "0.2.2",
"fast-safe-stringify": "2.0.6",
@@ -28,9 +28,9 @@
}
},
"@nestjs/microservices": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.3.2.tgz",
"integrity": "sha512-daEzZ4L+BpMmu9KDFUgdU7+HgeVug//qrHlVTrdqCjyNd4vgZFgXrHGNOOFWYdZCwyY2I9qrL+XEv3pz3VeXyA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-6.5.3.tgz",
"integrity": "sha512-T9zZf61myahenI4c0qhcYnhnx49L+zL9+8W6fc+LPTarbt1HJDu6iyj6fh2BzewakwNLJRyGMJ9YCYlXhFuvlA==",
"requires": {
"iterare": "1.2.0",
"json-socket": "0.3.0",
@@ -38,17 +38,17 @@
}
},
"@nestjs/testing": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.3.2.tgz",
"integrity": "sha512-BlXpA5KWok7AxwDzWn/yaOhqhAYDxUE17e+hanPEUxGkCInQIc750lG/M6ZF6aQNg1llxHquYyVKJLvzhdZqBA==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-6.5.3.tgz",
"integrity": "sha512-W8tPhkNVhmX+jaDu4R7WUOtIl0PK3ZDso434rEm/b1+S6ZRgAKwNVHWM/rwIuTi5+erPTEULtTsZgrXFrzC1sA==",
"requires": {
"optional": "0.1.4"
}
},
"@nestjs/websockets": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.3.2.tgz",
"integrity": "sha512-ZOYbcqeBKMWXqZwBb06XejbNtVu0+X/jwKgL5SYJTs1kmnsCmRvmDzDEeMvx5Ign0cr3tF8SSOW6ysntdnIxXQ==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/@nestjs/websockets/-/websockets-6.5.3.tgz",
"integrity": "sha512-YrCvmLHTW0OBusTiUOPrG0PNrw/3Gatty/bh3ro5cEoiovcaJxGSMsTC+JSVXqPwRJjEtoHMCr5Qje2rAepIzQ==",
"requires": {
"iterare": "1.2.0"
}
@@ -64,11 +64,16 @@
}
},
"@types/node": {
"version": "7.10.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.6.tgz",
"integrity": "sha512-d0BOAicT0tEdbdVQlLGOVul1kvg6YvbaADRCThGCz5NJ0e9r00SofcR1x69hmlCyrHuB6jd4cKzL9bMLjPnpAA==",
"version": "7.10.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.7.tgz",
"integrity": "sha512-4I7+hXKyq7e1deuzX9udu0hPIYqSSkdKXtjow6fMnQ3OR9qkxIErGHbGY08YrfZJrCS1ajK8lOuzd0k3n2WM4A==",
"dev": true
},
"@types/validator": {
"version": "10.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.2.tgz",
"integrity": "sha512-k/ju1RsdP5ACFUWebqsyEy0avP5uNJCs2p3pmTHzOZdd4gMSAJTq7iUEHFY3tt3emBrPTm6oGvfZ4SzcqOgLPQ=="
},
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -125,12 +130,13 @@
"integrity": "sha512-qsP+0xoavpOlJHuYsQJsN58HXSl8Jvveo+T37rEvCEeRfMWoytAyR0Ua/YsFgpM6AZYZ/og2PJwArwzJl1aXtQ=="
},
"class-validator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.9.1.tgz",
"integrity": "sha512-3wApflrd3ywVZyx4jaasGoFt8pmo4aGLPPAEKCKCsTRWVGPilahD88q3jQjRQwja50rl9a7rsP5LAxJYwGK8/Q==",
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.10.0.tgz",
"integrity": "sha512-RvjxRlvoCvM/ojUq11j78ISpReGdBoMErdmDk1e27aQZK6ppSXq751UE6jB9JI7ayEnL6Nnmllzn/HXVSu3dmg==",
"requires": {
"@types/validator": "10.11.2",
"google-libphonenumber": "^3.1.6",
"validator": "10.4.0"
"validator": "11.1.0"
}
},
"cli-color": {
@@ -327,9 +333,9 @@
"dev": true
},
"google-libphonenumber": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.2.tgz",
"integrity": "sha512-ubjGeosYPeusjYbUHy76lCniGTTI0k1rIFc+uKBX+jHQLDmWOSUtlFUxaeoLJ+Y+PAMM6dWp+C1HjHx5BI8kEw=="
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.3.tgz",
"integrity": "sha512-8n4JyRptifaIRlHANKRlfqLR8fANm7+Q+1qvDuUsUeStSLtLGTVsZWe1llWDfgWTm1y07cEUyiRuNIv6cs2ovg=="
},
"has-flag": {
"version": "3.0.0",
@@ -592,9 +598,9 @@
"integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw=="
},
"typescript": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA=="
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz",
"integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g=="
},
"util-deprecate": {
"version": "1.0.2",
@@ -608,9 +614,9 @@
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
"validator": {
"version": "10.4.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-10.4.0.tgz",
"integrity": "sha512-Q/wBy3LB1uOyssgNlXSRmaf22NxjvDNZM2MtIQ4jaEOAB61xsh1TQxsq1CgzUMBV1lDrVMogIh8GjG1DYW0zLg=="
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-11.1.0.tgz",
"integrity": "sha512-qiQ5ktdO7CD6C/5/mYV4jku/7qnqzjrxb3C/Q5wR3vGGinHTgJZN/TdFT3ZX4vXhX2R1PXx42fB1cn5W+uJ4lg=="
},
"yn": {
"version": "3.1.0",

View File

@@ -7,19 +7,19 @@
"start": "ts-node src/main"
},
"dependencies": {
"@nestjs/common": "6.3.2",
"@nestjs/core": "6.3.2",
"@nestjs/microservices": "6.3.2",
"@nestjs/testing": "6.3.2",
"@nestjs/websockets": "6.3.2",
"@nestjs/common": "6.5.3",
"@nestjs/core": "6.5.3",
"@nestjs/microservices": "6.5.3",
"@nestjs/testing": "6.5.3",
"@nestjs/websockets": "6.5.3",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"class-validator": "0.10.0",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2",
"typescript": "3.5.2"
"typescript": "3.5.3"
},
"devDependencies": {
"@types/node": "7.10.6",
"@types/node": "7.10.7",
"supertest": "4.0.2",
"ts-node": "8.3.0"
}

View File

@@ -3,5 +3,5 @@
"packages": [
"packages/*"
],
"version": "6.4.0"
"version": "6.5.3"
}

5825
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,18 @@
{
"name": "@nestjs/core",
"version": "6.4.0",
"version": "6.5.3",
"description": "Modern, fast, powerful node.js web framework",
"scripts": {
"coverage": "nyc report --reporter=text-lcov | coveralls",
"test": "nyc --require ts-node/register mocha packages/**/*.spec.ts --reporter spec --retries 3 --require 'node_modules/reflect-metadata/Reflect.js'",
"integration-test": "mocha integration/**/*.spec.ts --reporter spec --require ts-node/register --require 'node_modules/reflect-metadata/Reflect.js'",
"integration-test": "mocha \"integration/*/{,!(node_modules)/**/}/*.spec.ts\" --reporter spec --require ts-node/register --require 'node_modules/reflect-metadata/Reflect.js'",
"lint": "tslint -p tsconfig.json -c tslint.json \"packages/**/*.ts\" -e \"*.spec.ts\"",
"format": "prettier **/**/*.ts --ignore-path ./.prettierignore --write && git status",
"clean": "gulp clean:bundle",
"build": "npm run clean && gulp build",
"prebuild:dev": "rm -rf node_modules/@nestjs",
"build:dev": "gulp build --dist node_modules/@nestjs && gulp move",
"build:samples": "gulp install:samples && npm run build:dev && gulp build:samples",
"postinstall": "opencollective",
"prerelease": "gulp copy-misc && gulp build --dist node_modules/@nestjs",
"publish": "npm run prerelease && npm run build && ./node_modules/.bin/lerna publish --force-publish --access public --exact -m \"chore(@nestjs) publish %s release\"",
@@ -30,38 +31,38 @@
"author": "Kamil Mysliwiec",
"license": "MIT",
"dependencies": {
"@grpc/proto-loader": "0.3.0",
"@grpc/proto-loader": "0.5.1",
"@nestjs/common": "6.1.1",
"@nestjs/core": "6.1.1",
"@nestjs/microservices": "6.1.1",
"@nestjs/testing": "6.1.1",
"@nestjs/websockets": "6.1.1",
"@nuxtjs/opencollective": "0.2.2",
"amqp-connection-manager": "2.3.3",
"amqplib": "0.5.3",
"apollo-server-express": "2.6.7",
"amqp-connection-manager": "3.0.0",
"amqplib": "0.5.5",
"apollo-server-express": "2.8.1",
"axios": "0.19.0",
"cache-manager": "2.9.1",
"cache-manager": "2.10.0",
"class-transformer": "0.2.3",
"class-validator": "0.9.1",
"class-validator": "0.10.0",
"cli-color": "1.4.0",
"connect": "3.7.0",
"cors": "2.8.5",
"engine.io-client": "3.3.2",
"express": "4.17.1",
"fast-json-stringify": "1.15.3",
"fast-json-stringify": "1.15.4",
"fast-safe-stringify": "2.0.6",
"fastify": "2.6.0",
"fastify": "2.7.1",
"fastify-cors": "2.1.3",
"fastify-formbody": "3.1.0",
"fastify-multipart": "1.0.1",
"graphql": "14.4.1",
"grpc": "1.21.1",
"fastify-multipart": "1.0.2",
"graphql": "14.5.0",
"grpc": "1.23.3",
"http2": "3.3.7",
"iterare": "1.2.0",
"merge-graphql-schemas": "1.5.8",
"merge-graphql-schemas": "1.7.0",
"mqtt": "3.0.0",
"multer": "1.4.1",
"multer": "1.4.2",
"nats": "1.3.0",
"object-hash": "1.3.1",
"optional": "0.1.4",
@@ -72,37 +73,39 @@
"rxjs": "6.5.2",
"rxjs-compat": "6.5.2",
"socket.io": "2.2.0",
"ts-morph": "3.0.0",
"uuid": "3.3.2"
"ts-morph": "3.1.3",
"uuid": "3.3.3"
},
"devDependencies": {
"@types/amqplib": "0.5.13",
"@types/cache-manager": "1.2.8",
"@types/chai": "4.1.7",
"@types/chai-as-promised": "7.1.0",
"@types/cors": "2.8.5",
"@types/express": "4.17.0",
"@types/chai": "4.2.0",
"@types/chai-as-promised": "7.1.2",
"@types/cors": "2.8.6",
"@types/express": "4.17.1",
"@types/fastify-cors": "2.1.0",
"@types/gulp": "4.0.6",
"@types/kafka-node": "2.0.8",
"@types/mocha": "5.2.7",
"@types/node": "10.14.10",
"@types/node": "10.14.16",
"@types/redis": "2.8.13",
"@types/reflect-metadata": "0.0.5",
"@types/sinon": "7.0.13",
"@types/socket.io": "2.1.2",
"@types/ws": "6.0.1",
"@types/ws": "6.0.3",
"artillery": "1.6.0-28",
"awesome-typescript-loader": "5.2.1",
"body-parser": "1.19.0",
"chai": "4.2.0",
"chai-as-promised": "7.1.1",
"clang-format": "1.2.4",
"concurrently": "4.1.1",
"conventional-changelog": "3.1.8",
"core-js": "3.1.4",
"coveralls": "3.0.4",
"concurrently": "4.1.2",
"conventional-changelog": "3.1.10",
"core-js": "3.2.1",
"coveralls": "3.0.6",
"csv-write-stream": "2.0.0",
"delete-empty": "2.0.0",
"delete-empty": "3.0.0",
"fancy-log": "1.3.3",
"fastify-static": "2.5.0",
"gulp": "4.0.1",
"gulp-clang-format": "1.0.27",
@@ -113,20 +116,19 @@
"husky": "1.3.1",
"imports-loader": "0.8.0",
"json-loader": "0.5.7",
"lerna": "3.15.0",
"lint-staged": "8.2.1",
"memory-usage": "1.2.1",
"lerna": "2.11.0",
"lint-staged": "9.2.3",
"mocha": "3.5.3",
"nodemon": "1.19.1",
"nyc": "14.1.1",
"prettier": "1.18.2",
"sinon": "7.3.2",
"sinon": "7.4.1",
"sinon-chai": "3.3.0",
"socket.io-client": "2.2.0",
"supertest": "4.0.2",
"ts-node": "8.3.0",
"tslint": "5.18.0",
"typescript": "3.5.2"
"tslint": "5.19.0",
"typescript": "3.5.3"
},
"collective": {
"type": "opencollective",

View File

@@ -0,0 +1 @@
The common package comes with decorators such as `@Controller()`, `@Injectable()` and so on.

View File

@@ -15,7 +15,6 @@
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a>
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a>
<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge" target="_blank"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>

View File

@@ -1,7 +1,7 @@
/**
* Binds parameter decorators to the method
* Useful when the language doesn't provide a 'Parameter Decorators' feature (vanilla JavaScript)
* @param {} ...decorators
* @param ...decorators
*/
export function Bind(...decorators: any[]): MethodDecorator {
return <T>(

View File

@@ -2,17 +2,83 @@ import { PATH_METADATA, SCOPE_OPTIONS_METADATA } from '../../constants';
import { isString, isUndefined } from '../../utils/shared.utils';
import { ScopeOptions } from './../../interfaces/scope-options.interface';
/**
*
* Interface defining options that can be passed to `@Controller()` decorator
* @publicApi
*/
export interface ControllerOptions extends ScopeOptions {
/**
* Specifies an optional route path prefix. When specified, the route path
* for a handler is determined by concatenating the prefix with any path
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
path?: string;
}
export function Controller();
export function Controller(prefix: string);
export function Controller(options: ControllerOptions);
/**
* Defines the controller. Controller can inject dependencies through constructor.
* Those dependencies have to belong to the same module.
* Decorator that marks a class as a Nest controller that can receive inbound
* requests and produce responses.
*
* HTTP Controllers optionally accept configuration
* metadata that determines route paths that route handlers in the class
* respond to, and lifetime [scope](https://docs.nestjs.com/fundamentals/injection-scopes#usage).
*
* An HTTP Controller responds to inbound HTTP Requests and produces HTTP Responses.
* It defines a class that provides the context for one or more related route
* handlers that correspond to HTTP request methods and associated routes
* (e.g., `GET /api/profile`, `POST /user/resume`).
*
* A Microservice Controller responds to Requests and Responses, as well as events,
* running over a variety of transports [(read more here)](https://docs.nestjs.com/microservices/basics). It defines
* a class that provides a context for one or more message or event handlers.
*
* @see [Controllers](https://docs.nestjs.com/controllers)
* @see [Microservices](https://docs.nestjs.com/microservices/basics#request-response)
*
* @usageNotes
*
* ### Setting controller options
* The controller decorator takes an optional options object in plain JSON format.
* This object can take properties `path` and `scope`.
*
* ### Setting the default route path prefix
* The following example sets `cats` as the default route path prefix for all route
* handlers in this controller. When simply passing a route prefix, you can pass
* it as a string as shown in the example below.
*
* ```typescript
* @Controller('cats')
* export class CatsController {
* @Get()
* findall(): string {
* return 'This action returns all cats';
* }
* }
* ```
* This route handler will respond to the request
* `GET /cats`
*
* ### Setting the injection scope
* The following example sets the scope for all requests in the controller
* to request-scoped. Each request will cause Nest to create a new instance of
* the controller.
* ```typescript
* @Controller({
* path: 'cats',
* scope: Scope.REQUEST,
* })
* export class CatsController { ... }
* ```
*
* [Read more about scopes here.](https://docs.nestjs.com/fundamentals/injection-scopes)
*
* @publicApi
*/
export function Controller(): ClassDecorator;
export function Controller(prefix: string): ClassDecorator;
export function Controller(options: ControllerOptions): ClassDecorator;
export function Controller(
prefixOrOptions?: string | ControllerOptions,
): ClassDecorator {
@@ -20,8 +86,8 @@ export function Controller(
const [path, scopeOptions] = isUndefined(prefixOrOptions)
? [defaultPath, undefined]
: isString(prefixOrOptions)
? [prefixOrOptions, undefined]
: [prefixOrOptions.path || defaultPath, { scope: prefixOrOptions.scope }];
? [prefixOrOptions, undefined]
: [prefixOrOptions.path || defaultPath, { scope: prefixOrOptions.scope }];
return (target: object) => {
Reflect.defineMetadata(PATH_METADATA, path, target);

View File

@@ -5,9 +5,81 @@ import {
import { isFunction, isUndefined } from '../../utils/shared.utils';
/**
* Injects provider which has to be available in the current injector (module) scope.
* Providers are recognized by either types or tokens.
* Decorator that marks a constructor parameter as a target for
* [Dependency Injection (DI)](https://docs.nestjs.com/providers#dependency-injection). Takes a single
* required parameter which is the
* [injection token](https://docs.nestjs.com/fundamentals/custom-providers). The injection token serves
* as the lookup key for the [provider](https://docs.nestjs.com/providers) that will be injected
* (assigned to the constructor parameter).
*
* Injection tokens can be types (class names), strings or symbols. This depends
* on how the provider with which it is associated was defined. Providers
* defined with the `@Injectable()` decorator use the class name. Custom
* Providers may use strings or symbols as the injection token.
*
* Any injected provider must be visible within the module scope (loosely
* speaking, the containing module) of the class it is being injected into. This
* can be done by:
*
* - defining the provider in the same module scope
* - exporting the provider from one module scope and importing that module into the
* module scope of the class being injected into
* - exporting the provider from a module that is marked as global using the
* `@Global()` decorator
*
* @see [Providers](https://docs.nestjs.com/providers)
* @see [Custom Providers](https://docs.nestjs.com/fundamentals/custom-providers)
* @see [Injection Scopes](https://docs.nestjs.com/fundamentals/injection-scopes)
*
* @usageNotes
*
* #### Injecting with a type (class name)
*
* ```typescript
* import { Inject } from '@nestjs/common';
* import { ConfigService } from './config.service';
*
* export class CatsService {
* constructor(@Inject(ConfigService) private readonly configService) {}
* }
* ```
*
* The above is equivalent to the conventional constructor injection syntax:
* ```typescript
* import { ConfigService } from './config.service';
*
* export class CatsService {
* constructor(private readonly configService: ConfigService) {}
* }
* ```
* #### Injecting with a string
*
* Assume we've registered a provider with the string `'CONNECTION'` as follows:
*
* ```typescript
* import { connection } from './connection';
* const connectionProvider = {
* provide: 'CONNECTION',
* useValue: connection,
* };
*
* @Module({
* providers: [connectionProvider],
* })
* export class ApplicationModule {}
* ```
* As a result, we now have a provider bound to the DI container using the
* injection token `'CONNECTION'`. This provider can be injected as follows:
*
* ```typescript
* @Injectable()
* export class CatsRepository {
* constructor(@Inject('CONNECTION') connection: Connection) {}
* }
* ```
* @publicApi
*/
export function Inject<T = any>(token?: T) {
return (target: Object, key: string | symbol, index?: number) => {
token = token || Reflect.getMetadata('design:type', target, key);

View File

@@ -3,11 +3,110 @@ import { ScopeOptions } from '../../interfaces/scope-options.interface';
import { SCOPE_OPTIONS_METADATA } from './../../constants';
import { Type } from './../../interfaces/type.interface';
/**
* Defines the injection scope.
*
* @see [Injection Scopes](https://docs.nestjs.com/fundamentals/injection-scopes)
*
* @publicApi
*/
export interface InjectableOptions extends ScopeOptions {}
/**
* Defines the injectable class. This class can inject dependencies through constructor.
* Those dependencies have to belong to the same module.
* Decorator that marks a class as a [provider](https://docs.nestjs.com/providers). Providers can be
* injected into other classes via constructor parameter injection using Nest's
* built-in [Dependency Injection (DI)](https://docs.nestjs.com/providers#dependency-injection) system.
*
* When injecting a provider, it must be visible within the module scope (loosely
* speaking, the containing module) of the class it is being injected into. This
* can be done by:
*
* - defining the provider in the same module scope
* - exporting the provider from one module scope and importing that module into the
* module scope of the class being injected into
* - exporting the provider from a module that is marked as global using the
* `@Global()` decorator
*
* Providers can also be defined in a more explicit and imperative form using
* various [custom provider](https://docs.nestjs.com/fundamentals/custom-providers) techniques that expose
* more capabilities of the DI system.
*
* @see [Providers](https://docs.nestjs.com/providers)
* @see [Custom Providers](https://docs.nestjs.com/fundamentals/custom-providers)
* @see [Injection Scopes](https://docs.nestjs.com/fundamentals/injection-scopes)
*
* @usageNotes
*
* #### Setting provider scope
*
* The `@Injector()` decorator takes an optional options object in plain JSON format.
* This object has one property: `scope`.
*
* Following is an example of setting a provider's scope to per-request. See more
* about [injection scopes here](https://docs.nestjs.com/fundamentals/injection-scopes).
*
* ```typescript
* import { Injectable, Scope } from '@nestjs/common';
*
* @Injectable({ scope: Scope.REQUEST })
* export class CatsService {}
* ```
*
* #### Declaring providers
*
* Providers are declared using the `@Injectable()` decorator and a standard
* JavaScript class.
*
* ```typescript
* import { Injectable } from '@nestjs/common';
* import { Cat } from './interfaces/cat.interface';
*
* @Injectable()
* export class CatsService {
* private readonly cats: Cat[] = [];
*
* create(cat: Cat) {
* this.cats.push(cat);
* }
*
* findAll(): Cat[] {
* return this.cats;
* }
* }
* ```
*
* #### Using providers
*
* Providers created using the `@Injectable()` decorator use an
* [injection token](https://docs.nestjs.com/fundamentals/custom-providers) that is the class type.
*
* For example to inject the provider declared above using constructor injection,
* use the following syntax. In this example, `CatsService` is the name of
* the provider class declared earlier, and is used as the injection token in
* the constructor.
*
* ```typescript
* import { Controller, Get, Post, Body } from '@nestjs/common';
* import { CreateCatDto } from './dto/create-cat.dto';
* import { CatsService } from './cats.service';
* import { Cat } from './interfaces/cat.interface';
*
* @Controller('cats')
* export class CatsController {
* constructor(private readonly catsService: CatsService) {}
*
* @Post()
* async create(@Body() createCatDto: CreateCatDto) {
* this.catsService.create(createCatDto);
* }
*
* @Get()
* async findAll(): Promise<Cat[]> {
* return this.catsService.findAll();
* }
* }
* ```
* @publicApi
*/
export function Injectable(options?: InjectableOptions): ClassDecorator {
return (target: object) => {

View File

@@ -5,14 +5,38 @@ import { isFunction } from '../../utils/shared.utils';
import { validateEach } from '../../utils/validate-each.util';
/**
* Binds guards to the particular context.
* When the `@UseGuards()` is used on the controller level:
* - Guard will be register to each handler (every method)
* Decorator that binds guards to the scope of the controller or method,
* depending on its context.
*
* When the `@UseGuards()` is used on the handler level:
* - Guard will be registered only to the specified method
* When `@UseGuards` is used at the controller level, the guard will be
* applied to every handler (method) in the controller.
*
* @param {} ...guards
* When `@UseGuards` is used at the individual handler level, the guard
* will apply only to that specific method.
*
* @see [Guards](https://docs.nestjs.com/guards)
*
* @usageNotes
*
* ### Passing a guard by type
* In this example, we pass a guard type, which will delegate instantiating
* the guard to the Nest framework, and will allow Dependency Injection.
*
* ```typescript
* @Controller('cats')
* @UseGuards(RolesGuard)
* export class CatsController {}
* ```
*
* ### Passing a guard instance
* It's also possible to pass an instance of a guard directly to the decorator.
*
* ```typescript
* @Controller('cats')
* @UseGuards(new RolesGuard())
* export class CatsController {}
* ```
* @publicApi
*/
export function UseGuards(...guards: (CanActivate | Function)[]) {
return (target: any, key?: string, descriptor?: any) => {

View File

@@ -12,7 +12,7 @@ import { validateEach } from '../../utils/validate-each.util';
* When the `@UseInterceptors()` is used on the handle level:
* - Interceptor will be registered only to the specified method
*
* @param {} ...interceptors
* @param ...interceptors
*/
export function UseInterceptors(
...interceptors: (NestInterceptor | Function)[]

View File

@@ -3,6 +3,12 @@ import { extendArrayMetadata } from '../../utils/extend-metadata.util';
/**
* Sets a response header.
*
* Example: `@Header('Cache-Control', 'none')`
*
* @see [Headers](https://docs.nestjs.com/controllers#headers)
*
* @publicApi
*/
export function Header(name: string, value: string): MethodDecorator {
return (target: object, key, descriptor) => {

View File

@@ -1,10 +1,13 @@
import { HTTP_CODE_METADATA } from '../../constants';
/**
* Defines the HTTP response status code.
* It overrides default status code for the given request method.
* @publicApi
*
* @param {number} statusCode
* @description
* Defines the HTTP response status code. Overrides default status code for
* the decorated request method.
*
* @see [Http Status Codes](https://docs.nestjs.com/controllers#status-code)
*/
export function HttpCode(statusCode: number): MethodDecorator {
return (target: object, key, descriptor) => {

View File

@@ -1,7 +1,9 @@
import { REDIRECT_METADATA } from '../../constants';
/**
* Redirects request.
* Redirects request to the specified URL.
*
* @publicApi
*/
export function Redirect(url: string): MethodDecorator {
return (target: object, key, descriptor) => {

View File

@@ -2,6 +2,11 @@ import { RENDER_METADATA } from '../../constants';
/**
* Defines a template to be rendered by the controller.
*
* Example: `@Render('index)`
*
* @see [Example](https://github.com/nestjs/nest/blob/master/sample/15-mvc/src/app.controller.ts)
* @publicApi
*/
export function Render(template: string): MethodDecorator {
return (target: object, key, descriptor) => {

View File

@@ -31,41 +31,81 @@ const createMappingDecorator = (method: RequestMethod) => (
};
/**
* @publicApi
*
* @description
* Routes HTTP POST requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Post = createMappingDecorator(RequestMethod.POST);
/**
* @publicApi
*
* @description
* Routes HTTP GET requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Get = createMappingDecorator(RequestMethod.GET);
/**
* @publicApi
*
* @description
* Routes HTTP DELETE requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Delete = createMappingDecorator(RequestMethod.DELETE);
/**
* @publicApi
*
* @description
* Routes HTTP PUT requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Put = createMappingDecorator(RequestMethod.PUT);
/**
* @publicApi
*
* @description
* Routes HTTP PATCH requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Patch = createMappingDecorator(RequestMethod.PATCH);
/**
* @publicApi
*
* @description
* Routes HTTP OPTIONS requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Options = createMappingDecorator(RequestMethod.OPTIONS);
/**
* @publicApi
*
* @description
* Routes HTTP HEAD requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const Head = createMappingDecorator(RequestMethod.HEAD);
/**
* @publicApi
*
* @description
* Routes all HTTP requests to the specified path.
*
* @see [Routing](https://docs.nestjs.com/controllers#routing)
*/
export const All = createMappingDecorator(RequestMethod.ALL);

View File

@@ -76,6 +76,19 @@ export const UploadedFile: (
export const UploadedFiles: () => ParameterDecorator = createRouteParamDecorator(
RouteParamtypes.FILES,
);
/**
* Route handler parameter decorator. Extracts the `headers`
* property from the `req` object and populates the decorated
* parameter with the value of `headers`.
*
* `property` - optional name of single header property to extract.
*
* Example: `async update(@Headers() headers)`
*
* @see [Request object](https://docs.nestjs.com/controllers#request-object)
*
* @publicApi
*/
export const Headers: (
property?: string,
) => ParameterDecorator = createRouteParamDecorator(RouteParamtypes.HEADERS);
@@ -88,6 +101,17 @@ export function Query(
property: string,
...pipes: (Type<PipeTransform> | PipeTransform)[]
): ParameterDecorator;
/**
* Route handler parameter decorator. Extracts the `query`
* property from the `req` object and populates the decorated
* parameter with the value of `query`.
*
* Example: `async find(@Query() query: string)`
*
* @see [Request object](https://docs.nestjs.com/controllers#request-object)
*
* @publicApi
*/
export function Query(
property?: string | (Type<PipeTransform> | PipeTransform),
...pipes: (Type<PipeTransform> | PipeTransform)[]
@@ -106,6 +130,17 @@ export function Body(
property: string,
...pipes: (Type<PipeTransform> | PipeTransform)[]
): ParameterDecorator;
/**
* Route handler parameter decorator. Extracts the `body`
* property from the `req` object and populates the decorated
* parameter with the value of `body`.
*
* Example: `async create(@Body() createCatDto: CreateCatDto)`
*
* @see [Request object](https://docs.nestjs.com/controllers#request-object)
*
* @publicApi
*/
export function Body(
property?: string | (Type<PipeTransform> | PipeTransform),
...pipes: (Type<PipeTransform> | PipeTransform)[]

View File

@@ -1,8 +1,38 @@
import { GLOBAL_MODULE_METADATA } from '../../constants';
/**
* @publicApi
*
* @description
*
* Makes the module global-scoped.
* Once imported will be available for all existing modules.
* Once imported into any module, the global-scoped module will be visible
* in all modules.
*
* @see [Global modules](https://docs.nestjs.com/modules#global-modules)
*
* @usageNotes
*
* `@Global()` makes the `CatsModule` global-scoped. The CatsService provider
* will be ubiquitous, and modules that wish to inject the service will not need to import the CatsModule in their imports array.
*
* Note that the `imports` array is generally the preferred way to make a module's
* API available to consumers.
*
* ```typescript
* import { Module, Global } from '@nestjs/common';
* import { CatsController } from './cats.controller';
* import { CatsService } from './cats.service';
*
* @Global()
* @Module({
* controllers: [CatsController],
* providers: [CatsService],
* exports: [CatsService],
* })
*
* export class CatsModule {}
* ```
*/
export function Global(): ClassDecorator {
return (target: any) => {

View File

@@ -10,11 +10,9 @@ const metadataKeys = [
];
const validateKeys = (keys: string[]) => {
const isKeyInvalid = (key: string) =>
metadataKeys.findIndex(k => k === key) < 0;
const validateKey = (key: string) => {
if (!isKeyInvalid(key)) {
if (metadataKeys.includes(key)) {
return;
}
throw new InvalidModuleConfigException(key);
@@ -23,12 +21,37 @@ const validateKeys = (keys: string[]) => {
};
/**
* Defines the module
* - `imports` - the set of the 'imported' modules
* - `controllers` - the list of controllers (e.g. HTTP controllers)
* - `providers` - the list of providers that belong to this module. They can be injected between themselves.
* - `exports` - the set of components, which should be available for modules, which imports this module
* @param options {ModuleMetadata} Module metadata
* Decorator that marks a class as a [module](https://docs.nestjs.com/modules). Modules are used by
* Nest to organize the application structure into scopes. Controllers and
* Providers are scoped by the module they are declared in. Modules and their
* classes (Controllers and Providers) form a graph that determines how Nest
* performs [Dependency Injection (DI)](https://docs.nestjs.com/providers#dependency-injection).
*
* @see [Modules](https://docs.nestjs.com/modules)
*
* @usageNotes
* The following example:
* - declares `CatsController` as a controller to be instantiated when the
* `CatsModule` is bootstrapped
* - declares `CatsService` as a provider that can be injected within the
* module scope of the `CatsModule`
* - exports `CatsService` so that any module that imports `CatsModule`
* may inject `CatsService`
*
* ```typescript
* import { Module } from '@nestjs/common';
* import { CatsController } from './cats.controller';
* import { CatsService } from './cats.service';
*
* @Module({
* controllers: [CatsController],
* providers: [CatsService],
* exports: [CatsService]
* })
* export class CatsModule {}
* ```
*
* @publicApi
*/
export function Module(metadata: ModuleMetadata): ClassDecorator {
const propsKeys = Object.keys(metadata);

View File

@@ -1,3 +1,5 @@
import { isString } from '../utils/shared.utils';
export class HttpException extends Error {
public readonly message: any;
@@ -30,4 +32,13 @@ export class HttpException extends Error {
public getStatus(): number {
return this.status;
}
public toString(): string {
const message = this.getErrorString(this.message);
return `Error: ${message}`;
}
private getErrorString(target: string | object): string {
return isString(target) ? target : JSON.stringify(target);
}
}

View File

@@ -43,6 +43,7 @@ export {
WebSocketAdapter,
WsExceptionFilter,
WsMessageHandler,
ScopeOptions,
} from './interfaces';
export * from './pipes';
export * from './serializer';

View File

@@ -1,7 +0,0 @@
import { NestInterceptor } from './features/nest-interceptor.interface';
import { CanActivate } from './features/can-activate.interface';
export interface ConfigurationProvider {
getGlobalInterceptors(): NestInterceptor[];
getGlobalGuards(): CanActivate[];
}

View File

@@ -1,4 +1,8 @@
/**
* Set origin to a function implementing some custom logic. The function takes the
* request origin as the first parameter and a callback (which expects the signature
* err [object], allow [bool]) as the second.
*
* @see https://github.com/expressjs/cors
*/
export type CustomOrigin = (
@@ -6,13 +10,42 @@ export type CustomOrigin = (
callback: (err: Error | null, allow?: boolean) => void,
) => void;
/**
* @publicApi
*
* @see https://github.com/expressjs/cors
*/
export interface CorsOptions {
/**
* Configures the `Access-Control-Allow-Origins` CORS header. See [here for more detail.](https://github.com/expressjs/cors#configuration-options)
*/
origin?: boolean | string | RegExp | (string | RegExp)[] | CustomOrigin;
/**
* Configures the Access-Control-Allow-Methods CORS header
*/
methods?: string | string[];
/**
* Configures the Access-Control-Allow-Headers CORS header.
*/
allowedHeaders?: string | string[];
/**
* Configures the Access-Control-Expose-Headers CORS header.
*/
exposedHeaders?: string | string[];
/**
* Configures the Access-Control-Allow-Credentials CORS header.
*/
credentials?: boolean;
/**
* Configures the Access-Control-Max-Age CORS header.
*/
maxAge?: number;
/**
* Whether to pass the CORS preflight response to the next handler?
*/
preflightContinue?: boolean;
/**
* Provides a status code to use for successful OPTIONS requests.
*/
optionsSuccessStatus?: number;
}

View File

@@ -1,23 +1,74 @@
/**
* Methods to obtain request and response objects.
*/
export interface HttpArgumentsHost {
/**
* Returns the in-flight `request` object.
*/
getRequest<T = any>(): T;
/**
* Returns the in-flight `response` object.
*/
getResponse<T = any>(): T;
getNext<T = any>(): T;
}
/**
* Methods to obtain WebSocket data and client objects.
*/
export interface WsArgumentsHost {
/**
* Returns the data object.
*/
getData<T = any>(): T;
/**
* Returns the client object.
*/
getClient<T = any>(): T;
}
/**
* Methods to obtain RPC data object.
*/
export interface RpcArgumentsHost {
/**
* Returns the data object.
*/
getData<T = any>(): T;
}
/**
* @publicApi
*
* @description
* Provides methods for retrieving the arguments being passed to a handler.
* Allows choosing the appropriate execution context (e.g., HTTP, RPC, or
* WebSockets) to retrieve the arguments from.
*
*/
export interface ArgumentsHost {
/**
* Returns the array of arguments being passed to the handler.
*/
getArgs<T extends Array<any> = any[]>(): T;
/**
* Returns a particular argument by index.
* @param index
*/
getArgByIndex<T = any>(index: number): T;
/**
* Switch context to RPC
* @returns interface with methods to retrieve RPC arguments
*/
switchToRpc(): RpcArgumentsHost;
/**
* Switch context to HTTP
* @returns interface with methods to retrieve HTTP arguments
*/
switchToHttp(): HttpArgumentsHost;
/**
* Switch context to WebSockets
* @returns interface with methods to retrieve WebSockets arguments
*/
switchToWs(): WsArgumentsHost;
}

View File

@@ -1,7 +1,25 @@
import { Observable } from 'rxjs';
import { ExecutionContext } from './execution-context.interface';
/**
* @publicApi
*
* @description
* Interface defining the `canActivate()` function that must be implemented
* by a guard. Return value indicates whether or not the current request is
* allowed to proceed. Return can be either synchronous (`boolean`)
* or asynchronous (`Promise` or `Observable`).
*
* @see [Guards](https://docs.nestjs.com/guards)
*/
export interface CanActivate {
/**
* @param context Current execution context. Provides access to details about
* the current request pipeline.
*
* @returns Value indicating whether or not the current request is allowed to
* proceed.
*/
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean>;

View File

@@ -1,7 +1,22 @@
import { Type } from '../index';
import { ArgumentsHost } from './arguments-host.interface';
/**
* @publicApi
*
* @description
* Details about the current request pipeline.
*
* @see [Execution Context](https://docs.nestjs.com/guards#execution-context)
*/
export interface ExecutionContext extends ArgumentsHost {
/**
* Returns the *type* of the controller class which the current handler belongs to.
*/
getClass<T = any>(): Type<T>;
/**
* Returns a reference to the handler (method) that will be invoked next in the
* request pipeline.
*/
getHandler(): Function;
}

View File

@@ -1,6 +1,18 @@
import { ModuleMetadata } from './module-metadata.interface';
import { Type } from '../type.interface';
/**
* @publicApi
*
* @description
*
* Interface defining a Dynamic Module.
*
* @see [Dynamic Modules](https://docs.nestjs.com/modules#dynamic-modules)
*/
export interface DynamicModule extends ModuleMetadata {
/**
* A module
*/
module: Type<any>;
}

View File

@@ -4,12 +4,37 @@ import { DynamicModule } from './dynamic-module.interface';
import { ForwardReference } from './forward-reference.interface';
import { Provider } from './provider.interface';
/**
* @publicApi
*
* @description
*
* Interface defining the property object that describes the module.
*
* @see [Modules](https://docs.nestjs.com/modules)
*/
export interface ModuleMetadata {
/**
* Optional list of imported modules that export the providers which are
* required in this module.
*/
imports?: Array<
Type<any> | DynamicModule | Promise<DynamicModule> | ForwardReference
>;
/**
* Optional list of controllers defined in this module which have to be
* instantiated.
*/
controllers?: Type<any>[];
/**
* Optional list of providers that will be instantiated by the Nest injector
* and that may be shared at least across this module.
*/
providers?: Provider[];
/**
* Optional list of the subset of providers that are provided by this module
* and should be available in other modules which import this module.
*/
exports?: Array<
| DynamicModule
| Promise<DynamicModule>

View File

@@ -1,3 +1,13 @@
/**
* @publicApi
*
* @description
* Interface defining method called just before Nest destroys the host module
* (`app.close()` method has been evaluated). Use to perform cleanup on
* resources (e.g., Database connections).
*
* @see [Lifecycle Events](https://docs.nestjs.com/fundamentals/lifecycle-events)
*/
export interface OnModuleDestroy {
onModuleDestroy(): any;
}

View File

@@ -1,3 +1,11 @@
/**
* @publicApi
*
* @description
* Interface defining method called once the host module has been initialized.
*
* @see [Lifecycle Events](https://docs.nestjs.com/fundamentals/lifecycle-events)
*/
export interface OnModuleInit {
onModuleInit(): any;
}

View File

@@ -1,5 +1,11 @@
import { LoggerService } from '../services/logger.service';
/**
* @publicApi
*/
export class NestApplicationContextOptions {
/**
* specify the logger to use
*/
logger?: LoggerService | boolean;
}

View File

@@ -3,6 +3,12 @@ import { LoggerService } from '../services/logger.service';
import { Abstract } from './abstract.interface';
import { Type } from './type.interface';
/**
* @publicApi
*
* @description
* Interface defining NestApplicationContext.
*/
export interface INestApplicationContext {
/**
* Allows navigating through the modules tree, for example, to pull out a specific instance from the selected module.

View File

@@ -1,9 +1,21 @@
import { CorsOptions } from './external/cors-options.interface';
import { HttpsOptions } from './external/https-options.interface';
import { NestApplicationContextOptions } from './nest-application-context-options.interface';
import { CorsOptions } from './external/cors-options.interface';
/**
* @publicApi
*/
export interface NestApplicationOptions extends NestApplicationContextOptions {
/**
* CORS options from [CORS package](https://github.com/expressjs/cors#configuration-options)
*/
cors?: boolean | CorsOptions;
/**
* Whether to use underlying platform body parser.
*/
bodyParser?: boolean;
/**
* Set of configurable HTTPS options
*/
httpsOptions?: HttpsOptions;
}

View File

@@ -7,6 +7,12 @@ import { MicroserviceOptions } from './microservices/microservice-configuration.
import { INestApplicationContext } from './nest-application-context.interface';
import { WebSocketAdapter } from './websockets/web-socket-adapter.interface';
/**
* @publicApi
*
* @description
* Interface defining the core NestApplication object.
*/
export interface INestApplication extends INestApplicationContext {
/**
* A wrapper function around HTTP adapter method: `adapter.use()`.
@@ -29,7 +35,7 @@ export interface INestApplication extends INestApplicationContext {
* @param {number} port
* @param {string} hostname
* @param {Function} callback Optional callback
* @returns {Promise}
* @returns A Promise that, when resolved, is a reference to the underlying HttpServer.
*/
listen(port: number | string, callback?: () => void): Promise<any>;
listen(
@@ -48,16 +54,16 @@ export interface INestApplication extends INestApplicationContext {
listenAsync(port: number | string, hostname?: string): Promise<any>;
/**
* Registers the prefix for the every HTTP route path
* Registers a prefix for every HTTP route path.
*
* @param {string} prefix The prefix for the every HTTP route path (for example `/v1/api`)
* @param {string} prefix The prefix for every HTTP route path (for example `/v1/api`)
* @returns {void}
*/
setGlobalPrefix(prefix: string): this;
/**
* Setup Ws Adapter which will be used inside Gateways.
* Use, when you want to override default `socket.io` library.
* Use when you want to override default `socket.io` library.
*
* @param {WebSocketAdapter} adapter
* @returns {void}
@@ -65,7 +71,8 @@ export interface INestApplication extends INestApplicationContext {
useWebSocketAdapter(adapter: WebSocketAdapter): this;
/**
* Connects microservice to the NestApplication instance. Transforms application to the hybrid instance.
* Connects microservice to the NestApplication instance. Transforms application
* to a hybrid instance.
*
* @param {MicroserviceOptions} options Microservice options object
* @returns {INestMicroservice}
@@ -80,21 +87,21 @@ export interface INestApplication extends INestApplicationContext {
getMicroservices(): INestMicroservice[];
/**
* Returns an underlying, native HTTP server.
* Returns the underlying native HTTP server.
*
* @returns {http.Server}
*/
getHttpServer(): any;
/**
* Returns an underlying HTTP adapter.
* Returns the underlying HTTP adapter.
*
* @returns {HttpServer}
*/
getHttpAdapter(): HttpServer;
/**
* Starts all connected microservices asynchronously
* Starts all connected microservices asynchronously.
*
* @param {Function} callback Optional callback function
* @returns {void}
@@ -102,42 +109,45 @@ export interface INestApplication extends INestApplicationContext {
startAllMicroservices(callback?: () => void): this;
/**
* Starts all connected microservices and can be awaited
* Starts all connected microservices and can be awaited.
*
* @returns {Promise}
*/
startAllMicroservicesAsync(): Promise<void>;
/**
* Registers exception filters as a global filters (will be used within every HTTP route handler)
* Registers exception filters as global filters (will be used within
* every HTTP route handler)
*
* @param {ExceptionFilter[]} ...filters
*/
useGlobalFilters(...filters: ExceptionFilter[]): this;
/**
* Registers pipes as a global pipes (will be used within every HTTP route handler)
* Registers pipes as global pipes (will be used within every HTTP route handler)
*
* @param {PipeTransform[]} ...pipes
*/
useGlobalPipes(...pipes: PipeTransform<any>[]): this;
/**
* Registers interceptors as a global interceptors (will be used within every HTTP route handler)
* Registers interceptors as global interceptors (will be used within
* every HTTP route handler)
*
* @param {NestInterceptor[]} ...interceptors
*/
useGlobalInterceptors(...interceptors: NestInterceptor[]): this;
/**
* Registers guards as a global guards (will be used within every HTTP route handler)
* Registers guards as global guards (will be used within every HTTP route handler)
*
* @param {CanActivate[]} ...guards
*/
useGlobalGuards(...guards: CanActivate[]): this;
/**
* Terminates the application (including NestApplication, Gateways, and each connected microservice)
* Terminates the application (including NestApplication, Gateways, and each connected
* microservice)
*
* @returns {Promise<void>}
*/

View File

@@ -1,3 +1,12 @@
/**
* @publicApi
*
* @description
* Interface defining method called once the application has fully started and
* is bootstrapped.
*
* @see [Lifecycle Events](https://docs.nestjs.com/fundamentals/lifecycle-events)
*/
export interface OnApplicationBootstrap {
onApplicationBootstrap(): any;
}

View File

@@ -1,3 +1,12 @@
/**
* @publicApi
*
* @description
* Interface defining method to respond to system signals (when application gets
* shutdown by, e.g., SIGTERM)
*
* @see [Lifecycle Events](https://docs.nestjs.com/fundamentals/lifecycle-events)
*/
export interface OnApplicationShutdown {
onApplicationShutdown(signal?: string): any;
}

View File

@@ -1,9 +1,31 @@
/**
* @publicApi
*/
export enum Scope {
/**
* The provider can be shared across multiple classes. The provider lifetime
* is strictly tied to the application lifecycle. Once the application has
* bootstrapped, all providers have been instantiated.
*/
DEFAULT,
/**
* A new private instance of the provider is instantiated for every use
*/
TRANSIENT,
/**
* A new instance is instantiated for each request processing pipeline
*/
REQUEST,
}
/**
* @publicApi
*
* @see [Injection Scopes](https://docs.nestjs.com/fundamentals/injection-scopes)
*/
export interface ScopeOptions {
/**
* Specifies the lifetime of an injected Provider or Controller.
*/
scope?: Scope;
}

View File

@@ -1,6 +1,6 @@
{
"name": "@nestjs/common",
"version": "6.4.0",
"version": "6.5.3",
"description": "Nest - modern, fast, powerful node.js web framework (@common)",
"author": "Kamil Mysliwiec",
"repository": {
@@ -14,7 +14,7 @@
"dependencies": {
"axios": "0.19.0",
"cli-color": "1.4.0",
"uuid": "3.3.2"
"uuid": "3.3.3"
},
"peerDependencies": {
"reflect-metadata": "^0.1.12",

View File

@@ -44,4 +44,29 @@ describe('HttpException', () => {
statusCode: 404,
});
});
it('should inherit from error', () => {
const error = new HttpException('', 400);
expect(error instanceof Error).to.be.true;
});
it('should be serializable', () => {
const message = 'Some Error';
const error = new HttpException(message, 400);
expect(`${error}`).to.be.eql(`Error: ${message}`);
});
describe('when "message" is an object', () => {
it('should serialize an object', () => {
const obj = { foo: 'bar' };
const error = new HttpException(obj, 400);
expect(`${error}`).to.be.eql(`Error: ${JSON.stringify(obj)}`);
expect(`${error}`.includes('[object Object]')).to.not.be.true;
});
it('should serialize sub errors', () => {
const error = new NotFoundException();
expect(`${error}`.includes('Not Found')).to.be.true;
});
});
});

View File

@@ -1,5 +1,4 @@
import { expect } from 'chai';
import * as sinon from 'sinon';
import { ArgumentMetadata } from '../../interfaces';
import { ParseUUIDPipe } from '../../pipes/parse-uuid.pipe';
@@ -56,7 +55,7 @@ describe('ParseUUIDPipe', () => {
});
it('should throw an error - v5 ', async () => {
target = new ParseUUIDPipe({ version: '4' });
target = new ParseUUIDPipe({ version: '5' });
expect(target.transform('123a', {} as ArgumentMetadata)).to.be.rejected;
expect(target.transform(v3, {} as ArgumentMetadata)).to.be.rejected;
expect(target.transform(v4, {} as ArgumentMetadata)).to.be.rejected;

1
packages/core/PACKAGE.md Normal file
View File

@@ -0,0 +1 @@
Implements Nest core functionalities, low-level services, and utilities.

View File

@@ -15,7 +15,6 @@
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://api.travis-ci.org/nestjs/nest.svg?branch=master" alt="Travis" /></a>
<a href="https://travis-ci.org/nestjs/nest" target="_blank"><img src="https://img.shields.io/travis/nestjs/nest/master.svg?label=linux" alt="Linux" /></a>
<a href="https://coveralls.io/github/nestjs/nest?branch=master" target="_blank"><img src="https://coveralls.io/repos/github/nestjs/nest/badge.svg?branch=master#9" alt="Coverage" /></a>
<a href="https://gitter.im/nestjs/nestjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=body_badge" target="_blank"><img src="https://badges.gitter.im/nestjs/nestjs.svg" alt="Gitter" /></a>
<a href="https://discord.gg/G7Qnnhy" target="_blank"><img src="https://img.shields.io/badge/discord-online-brightgreen.svg" alt="Discord"/></a>
<a href="https://opencollective.com/nest#backer" target="_blank"><img src="https://opencollective.com/nest/backers/badge.svg" alt="Backers on Open Collective" /></a>
<a href="https://opencollective.com/nest#sponsor" target="_blank"><img src="https://opencollective.com/nest/sponsors/badge.svg" alt="Sponsors on Open Collective" /></a>

View File

@@ -3,6 +3,13 @@ import { RequestHandler } from '@nestjs/common/interfaces';
import { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
import { NestApplicationOptions } from '@nestjs/common/interfaces/nest-application-options.interface';
/**
* @publicApi
*
* @description
*
* This is the AbstractHttpAdapter
*/
export abstract class AbstractHttpAdapter<
TServer = any,
TRequest = any,

View File

@@ -5,14 +5,22 @@ import {
PipeTransform,
WebSocketAdapter,
} from '@nestjs/common';
import { ConfigurationProvider } from '@nestjs/common/interfaces/configuration-provider.interface';
import { InstanceWrapper } from './injector/instance-wrapper';
export class ApplicationConfig implements ConfigurationProvider {
private globalPipes: PipeTransform<any>[] = [];
export class ApplicationConfig {
private globalPrefix = '';
private globalPipes: PipeTransform[] = [];
private globalFilters: ExceptionFilter[] = [];
private globalInterceptors: NestInterceptor[] = [];
private globalGuards: CanActivate[] = [];
private globalPrefix = '';
private readonly globalRequestPipes: InstanceWrapper<PipeTransform>[] = [];
private readonly globalRequestFilters: InstanceWrapper<
ExceptionFilter
>[] = [];
private readonly globalRequestInterceptors: InstanceWrapper<
NestInterceptor
>[] = [];
private readonly globalRequestGuards: InstanceWrapper<CanActivate>[] = [];
constructor(private ioAdapter: WebSocketAdapter | null = null) {}
@@ -79,4 +87,38 @@ export class ApplicationConfig implements ConfigurationProvider {
public useGlobalGuards(...guards: CanActivate[]) {
this.globalGuards = this.globalGuards.concat(guards);
}
public addGlobalRequestInterceptor(
wrapper: InstanceWrapper<NestInterceptor>,
) {
this.globalRequestInterceptors.push(wrapper);
}
public getGlobalRequestInterceptors(): InstanceWrapper<NestInterceptor>[] {
return this.globalRequestInterceptors;
}
public addGlobalRequestPipe(wrapper: InstanceWrapper<PipeTransform>) {
this.globalRequestPipes.push(wrapper);
}
public getGlobalRequestPipes(): InstanceWrapper<PipeTransform>[] {
return this.globalRequestPipes;
}
public addGlobalRequestFilter(wrapper: InstanceWrapper<ExceptionFilter>) {
this.globalRequestFilters.push(wrapper);
}
public getGlobalRequestFilters(): InstanceWrapper<ExceptionFilter>[] {
return this.globalRequestFilters;
}
public addGlobalRequestGuard(wrapper: InstanceWrapper<CanActivate>) {
this.globalRequestGuards.push(wrapper);
}
public getGlobalRequestGuards(): InstanceWrapper<CanActivate>[] {
return this.globalRequestGuards;
}
}

View File

@@ -2,6 +2,7 @@ import { EXCEPTION_FILTERS_METADATA } from '@nestjs/common/constants';
import { Controller } from '@nestjs/common/interfaces';
import { isEmpty } from '@nestjs/common/utils/shared.utils';
import { STATIC_CONTEXT } from '../injector/constants';
import { InstanceWrapper } from '../injector/instance-wrapper';
import { RouterProxyCallback } from '../router/router-proxy';
import { ApplicationConfig } from './../application-config';
import { NestContainer } from './../injector/container';
@@ -40,10 +41,23 @@ export class ExternalExceptionFilterContext extends BaseExceptionFilterContext {
return exceptionHandler;
}
public getGlobalMetadata<T extends any[]>(): T {
public getGlobalMetadata<T extends any[]>(
contextId = STATIC_CONTEXT,
inquirerId?: string,
): T {
if (!this.config) {
return [] as T;
}
return this.config.getGlobalFilters() as T;
const globalFilters = this.config.getGlobalFilters() as T;
if (contextId === STATIC_CONTEXT && !inquirerId) {
return globalFilters;
}
const scopedFilterWrappers = this.config.getGlobalRequestFilters() as InstanceWrapper[];
const scopedFilters = scopedFilterWrappers
.map(wrapper => wrapper.getInstanceByContextId(contextId, inquirerId))
.filter(host => host)
.map(host => host.instance);
return globalFilters.concat(scopedFilters) as T;
}
}

View File

@@ -1,9 +1,9 @@
import { CanActivate } from '@nestjs/common';
import { GUARDS_METADATA } from '@nestjs/common/constants';
import { Controller } from '@nestjs/common/interfaces';
import { ConfigurationProvider } from '@nestjs/common/interfaces/configuration-provider.interface';
import { isEmpty, isFunction } from '@nestjs/common/utils/shared.utils';
import iterate from 'iterare';
import { ApplicationConfig } from '../application-config';
import { ContextCreator } from '../helpers/context-creator';
import { STATIC_CONTEXT } from '../injector/constants';
import { NestContainer } from '../injector/container';
@@ -14,7 +14,7 @@ export class GuardsContextCreator extends ContextCreator {
constructor(
private readonly container: NestContainer,
private readonly config?: ConfigurationProvider,
private readonly config?: ApplicationConfig,
) {
super();
}
@@ -86,10 +86,23 @@ export class GuardsContextCreator extends ContextCreator {
return injectables.get(guard.name);
}
public getGlobalMetadata<T extends any[]>(): T {
public getGlobalMetadata<T extends any[]>(
contextId = STATIC_CONTEXT,
inquirerId?: string,
): T {
if (!this.config) {
return [] as T;
}
return this.config.getGlobalGuards() as T;
const globalGuards = this.config.getGlobalGuards() as T;
if (contextId === STATIC_CONTEXT && !inquirerId) {
return globalGuards;
}
const scopedGuardWrappers = this.config.getGlobalRequestGuards() as InstanceWrapper[];
const scopedGuards = scopedGuardWrappers
.map(wrapper => wrapper.getInstanceByContextId(contextId, inquirerId))
.filter(host => host)
.map(host => host.instance);
return globalGuards.concat(scopedGuards) as T;
}
}

View File

@@ -8,7 +8,10 @@ export abstract class ContextCreator {
contextId?: ContextId,
inquirerId?: string,
): R;
public getGlobalMetadata?<T extends any[]>(): T;
public getGlobalMetadata?<T extends any[]>(
contextId?: ContextId,
inquirerId?: string,
): T;
public createContext<T extends any[], R extends any[]>(
instance: Controller,
@@ -18,7 +21,8 @@ export abstract class ContextCreator {
inquirerId?: string,
): R {
const globalMetadata =
this.getGlobalMetadata && this.getGlobalMetadata<T>();
this.getGlobalMetadata &&
this.getGlobalMetadata<T>(contextId, inquirerId);
const classMetadata = this.reflectClassMetadata<T>(instance, metadataKey);
const methodMetadata = this.reflectMethodMetadata<T>(callback, metadataKey);
return [

View File

@@ -1,7 +1,7 @@
import { ForbiddenException, ParamData } from '@nestjs/common';
import { CUSTOM_ROUTE_AGRS_METADATA } from '@nestjs/common/constants';
import { Controller, Transform } from '@nestjs/common/interfaces';
import { isFunction } from '@nestjs/common/utils/shared.utils';
import { Controller, PipeTransform } from '@nestjs/common/interfaces';
import { isEmpty, isFunction } from '@nestjs/common/utils/shared.utils';
import { FORBIDDEN_MESSAGE } from '../guards/constants';
import { GuardsConsumer } from '../guards/guards-consumer';
import { GuardsContextCreator } from '../guards/guards-context-creator';
@@ -292,7 +292,7 @@ export class ExternalContextCreator {
}
public createPipesFn(
pipes: any[],
pipes: PipeTransform[],
paramsOptions: (ParamProperties & { metatype?: any })[],
) {
const pipesFn = async (args: any[], ...params: any[]) => {
@@ -322,13 +322,11 @@ export class ExternalContextCreator {
public async getParamValue<T>(
value: T,
{ metatype, type, data }: { metatype: any; type: any; data: any },
transforms: Transform<any>[],
pipes: PipeTransform[],
): Promise<any> {
return this.pipesConsumer.apply(
value,
{ metatype, type, data },
transforms,
);
return isEmpty(pipes)
? value
: this.pipesConsumer.apply(value, { metatype, type, data }, pipes);
}
public async transformToResult(resultOrDeffered: any) {

View File

@@ -1,4 +1,5 @@
import { Controller } from '@nestjs/common/interfaces';
import * as hash from 'object-hash';
import { ContextId } from './../injector/instance-wrapper';
import { ParamProperties } from './context-utils';
@@ -36,7 +37,7 @@ export class HandlerMetadataStorage<TValue = HandlerMetadata, TKey = any> {
private getMetadataKey(controller: Controller, methodName: string): string {
const ctor = controller.constructor;
const controllerKey = ctor && ctor.name;
const controllerKey = ctor && hash(ctor);
return controllerKey + methodName;
}
}

View File

@@ -13,7 +13,7 @@ import {
*
* @param instance The instance which should be checked
*/
function hasOnAppBootstrapHook(
function hasOnAppShutdownHook(
instance: unknown,
): instance is OnApplicationShutdown {
return !isUndefined(
@@ -30,7 +30,7 @@ function callOperator(
): Promise<any>[] {
return iterate(instances)
.filter(instance => !isNil(instance))
.filter(hasOnAppBootstrapHook)
.filter(hasOnAppShutdownHook)
.map(async instance =>
((instance as any) as OnApplicationShutdown).onApplicationShutdown(
signal,
@@ -61,7 +61,7 @@ export async function callAppShutdownHook(
await Promise.all(callOperator(transientInstances, signal));
// Call the instance itself
if (moduleClassInstance && hasOnAppBootstrapHook(moduleClassInstance)) {
if (moduleClassInstance && hasOnAppShutdownHook(moduleClassInstance)) {
await (moduleClassInstance as OnApplicationShutdown).onApplicationShutdown(
signal,
);

View File

@@ -1,4 +1,4 @@
import { DynamicModule } from '@nestjs/common';
import { DynamicModule, Provider } from '@nestjs/common';
import { GLOBAL_MODULE_METADATA } from '@nestjs/common/constants';
import { Injectable } from '@nestjs/common/interfaces/injectable.interface';
import { Type } from '@nestjs/common/interfaces/type.interface';
@@ -129,7 +129,7 @@ export class NestContainer {
module.addRelatedModule(related);
}
public addProvider(provider: Type<any>, token: string): string {
public addProvider(provider: Provider, token: string): string {
if (!provider) {
throw new CircularDependencyException();
}
@@ -141,9 +141,9 @@ export class NestContainer {
}
public addInjectable(
injectable: Type<any>,
injectable: Provider,
token: string,
host: Type<Injectable>,
host?: Type<Injectable>,
) {
if (!this.modules.has(token)) {
throw new UnknownModuleException();

View File

@@ -106,7 +106,7 @@ export class Injector {
contextId,
wrapper,
);
await this.loadEnhancersPerContext(wrapper, module, contextId, wrapper);
await this.loadEnhancersPerContext(wrapper, contextId, wrapper);
}
public async loadInjectable(
@@ -139,7 +139,7 @@ export class Injector {
contextId,
inquirer,
);
await this.loadEnhancersPerContext(wrapper, module, contextId, wrapper);
await this.loadEnhancersPerContext(wrapper, contextId, wrapper);
}
public loadPrototype<T>(
@@ -630,7 +630,7 @@ export class Injector {
instance.constructor && instance.constructor.name,
);
await this.loadInstance(wrapper, collection, module, ctx, wrapper);
await this.loadEnhancersPerContext(wrapper, module, ctx, wrapper);
await this.loadEnhancersPerContext(wrapper, ctx, wrapper);
const host = wrapper.getInstanceByContextId(ctx);
return host && (host.instance as T);
@@ -638,13 +638,20 @@ export class Injector {
public async loadEnhancersPerContext(
wrapper: InstanceWrapper,
module: Module,
ctx: ContextId,
inquirer?: InstanceWrapper,
) {
const enhancers = wrapper.getEnhancersMetadata() || [];
const loadEnhancer = (item: InstanceWrapper) =>
this.loadInstance(item, module.injectables, module, ctx, inquirer);
const loadEnhancer = (item: InstanceWrapper) => {
const hostModule = item.host;
return this.loadInstance(
item,
hostModule.injectables,
hostModule,
ctx,
inquirer,
);
};
await Promise.all(enhancers.map(loadEnhancer));
}

View File

@@ -160,7 +160,7 @@ export class Module {
}
public addInjectable<T extends Injectable>(
injectable: Type<T>,
injectable: Provider,
host?: Type<T>,
) {
if (this.isCustomProvider(injectable)) {

View File

@@ -1,8 +1,8 @@
import { INTERCEPTORS_METADATA } from '@nestjs/common/constants';
import { Controller, NestInterceptor } from '@nestjs/common/interfaces';
import { ConfigurationProvider } from '@nestjs/common/interfaces/configuration-provider.interface';
import { isEmpty, isFunction } from '@nestjs/common/utils/shared.utils';
import iterate from 'iterare';
import { ApplicationConfig } from '../application-config';
import { ContextCreator } from '../helpers/context-creator';
import { STATIC_CONTEXT } from '../injector/constants';
import { NestContainer } from '../injector/container';
@@ -13,7 +13,7 @@ export class InterceptorsContextCreator extends ContextCreator {
constructor(
private readonly container: NestContainer,
private readonly config?: ConfigurationProvider,
private readonly config?: ApplicationConfig,
) {
super();
}
@@ -92,10 +92,23 @@ export class InterceptorsContextCreator extends ContextCreator {
return module.injectables.get(metatype.name);
}
public getGlobalMetadata<T extends any[]>(): T {
public getGlobalMetadata<T extends any[]>(
contextId = STATIC_CONTEXT,
inquirerId?: string,
): T {
if (!this.config) {
return [] as T;
}
return this.config.getGlobalInterceptors() as T;
const globalInterceptors = this.config.getGlobalInterceptors() as T;
if (contextId === STATIC_CONTEXT && !inquirerId) {
return globalInterceptors;
}
const scopedInterceptorWrappers = this.config.getGlobalRequestInterceptors() as InstanceWrapper[];
const scopedInterceptors = scopedInterceptorWrappers
.map(wrapper => wrapper.getInstanceByContextId(contextId, inquirerId))
.filter(host => host)
.map(host => host.instance);
return globalInterceptors.concat(scopedInterceptors) as T;
}
}

View File

@@ -7,7 +7,7 @@ import {
import iterate from 'iterare';
export class MetadataScanner {
public scanFromPrototype<T extends Injectable, R>(
public scanFromPrototype<T extends Injectable, R = any>(
instance: T,
prototype: any,
callback: (name: string) => R,

Some files were not shown because too many files have changed in this diff Show More