diff --git a/packages/common/README.md b/packages/common/README.md index b4da73e66..d9481b20e 100644 --- a/packages/common/README.md +++ b/packages/common/README.md @@ -1,12 +1,12 @@ -# @nestjs-plus/common +# @levelup-nestjs/common

-version -downloads -license +version +downloads +license

-Utility functions and low level reusable modules that provide building blocks for the @nestjs-plus and @nestjs ecosystem. +Utility functions and low level reusable modules that provide building blocks for the @levelup-nestjs and @nestjs ecosystem. ## Mixins diff --git a/packages/common/package-lock.json b/packages/common/package-lock.json index c0dba27dc..e8be05582 100644 --- a/packages/common/package-lock.json +++ b/packages/common/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@nestjs-plus/common", + "name": "@levelup-nestjs/common", "version": "0.0.0", "lockfileVersion": 1, "requires": true, diff --git a/packages/common/src/configModule.ts b/packages/common/src/configModule.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 1be919688..026d66a56 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -1,3 +1,2 @@ export * from './mixins'; export * from './options'; -export * from './dynamicModules'; diff --git a/packages/discovery/README.md b/packages/discovery/README.md index c9351b94a..e2b9604e9 100644 --- a/packages/discovery/README.md +++ b/packages/discovery/README.md @@ -1,9 +1,9 @@ -# @nestjs-plus/discovery +# @levelup-nestjs/discovery

-version -downloads -license +version +downloads +license

## Description @@ -20,18 +20,18 @@ NestJS provides the `MetadataScanner` class to be able to retrieve this data but ### Install -`npm install ---save @nestjs-plus/discovery` +`npm install ---save @levelup-nestjs/discovery` or -`yarn add @nestjs-plus/discovery` +`yarn add @levelup-nestjs/discovery` ### Import Import and add `DiscoveryModule` to the `imports` section of the module you wish to implement Discovery features in. It's common to inject it directly into consuming Module's contructor so that it can be used during the `onModuleInit` lifecycle hook at application startup. ```typescript -import { DiscoveryModule } from '@nestjs-plus/discovery'; +import { DiscoveryModule } from '@levelup-nestjs/discovery'; import { Module } from '@nestjs/common'; @Module({ diff --git a/packages/discovery/package-lock.json b/packages/discovery/package-lock.json index a7420af07..1133d3762 100644 --- a/packages/discovery/package-lock.json +++ b/packages/discovery/package-lock.json @@ -1,5 +1,5 @@ { - "name": "@nestjs-plus/discovery", + "name": "@levelup-nestjs/discovery", "version": "0.0.0", "lockfileVersion": 1, "requires": true, diff --git a/packages/modules/README.md b/packages/modules/README.md new file mode 100644 index 000000000..cf9a45d70 --- /dev/null +++ b/packages/modules/README.md @@ -0,0 +1,9 @@ +# @levelup-nestjs/modules + +

+version +downloads +license +

+ +Reusable utilities for working with NestJS Modules diff --git a/packages/modules/package-lock.json b/packages/modules/package-lock.json new file mode 100644 index 000000000..a61deea01 --- /dev/null +++ b/packages/modules/package-lock.json @@ -0,0 +1,384 @@ +{ + "name": "@levelup-nestjs/modules", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@nestjs/common": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-5.6.2.tgz", + "integrity": "sha512-LJkG60HXtOL0/8MgdITMUEMF9CCMa3gtmxcnxfxvqZN/cFGEFZ5QzMWbEdcP5N+kUJY2BL8gENdmPGyqBNJm0A==", + "requires": { + "axios": "0.18.0", + "cli-color": "1.2.0", + "deprecate": "1.0.0", + "multer": "1.3.0", + "uuid": "3.3.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "append-field": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-0.1.0.tgz", + "integrity": "sha1-bdxY+gg8e8VF08WZWygwzCNm1Eo=" + }, + "axios": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "1.6.1", + "is-buffer": "1.1.6" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.14" + } + }, + "cli-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", + "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", + "requires": { + "ansi-regex": "2.1.1", + "d": "1.0.0", + "es5-ext": "0.10.47", + "es6-iterator": "2.0.3", + "memoizee": "0.4.14", + "timers-ext": "0.1.7" + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.47" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "deprecate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/deprecate/-/deprecate-1.0.0.tgz", + "integrity": "sha1-ZhSQ7SQokWpsiIPYg05WRvTkpKg=" + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.14", + "streamsearch": "0.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "es5-ext": { + "version": "0.10.47", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.47.tgz", + "integrity": "sha512-/1TItLfj+TTfWoeRcDn/0FbGV6SNo4R+On2GGVucPU/j3BWnXE2Co8h8CTo4Tu34gFJtnmwS9xiScKs4EjZhdw==", + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.47", + "es6-symbol": "3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.47" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.47", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.47" + } + }, + "follow-redirects": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", + "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", + "requires": { + "debug": "3.1.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "requires": { + "es5-ext": "0.10.47" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memoizee": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", + "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.47", + "es6-weak-map": "2.0.2", + "event-emitter": "0.3.5", + "is-promise": "2.1.0", + "lru-queue": "0.1.0", + "next-tick": "1.0.0", + "timers-ext": "0.1.7" + } + }, + "mime-db": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", + "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + }, + "mime-types": { + "version": "2.1.21", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", + "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "requires": { + "mime-db": "1.37.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.3.0.tgz", + "integrity": "sha1-CSsmcPaEb6SRSWXvyM+Uwg/sbNI=", + "requires": { + "append-field": "0.1.0", + "busboy": "0.2.14", + "concat-stream": "1.6.2", + "mkdirp": "0.5.1", + "object-assign": "3.0.0", + "on-finished": "2.3.0", + "type-is": "1.6.16", + "xtend": "4.0.1" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "requires": { + "es5-ext": "0.10.47", + "next-tick": "1.0.0" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.21" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + } + } +} diff --git a/packages/modules/package.json b/packages/modules/package.json new file mode 100644 index 000000000..8c1c3c719 --- /dev/null +++ b/packages/modules/package.json @@ -0,0 +1,56 @@ +{ + "name": "@levelup-nestjs/modules", + "version": "0.0.1", + "description": "Reusable utilties to help level up NestJS Modules", + "author": "Jesse Carter ", + "homepage": "https://github.com/golevelup/nestjs#readme", + "license": "MIT", + "keywords": [ + "NestJS" + ], + "main": "lib/index.js", + "typings": "lib/index.d.ts", + "directories": { + "lib": "lib", + "test": "__tests__" + }, + "files": [ + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/golevelup/nestjs.git" + }, + "scripts": { + "build": "tsc --build tsconfig.build.json", + "build:watch": "tsc --build tsconfig.build.json --watch", + "test": "jest" + }, + "bugs": { + "url": "https://github.com/golevelup/nestjs/issues" + }, + "publishConfig": { + "access": "public" + }, + "dependencies": { + "shortid": "^2.2.14" + }, + "devDependencies": { + "@types/shortid": "^0.0.29" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".spec.ts$", + "transform": { + "^.+\\.ts$": "ts-jest" + }, + "coverageDirectory": "../coverage", + "testEnvironment": "node" + }, + "gitHead": "6f97aab8ce9d65dc074750a3ee467ec5ff3b9908" +} diff --git a/packages/common/src/dynamicModules.ts b/packages/modules/src/dynamicModules.ts similarity index 85% rename from packages/common/src/dynamicModules.ts rename to packages/modules/src/dynamicModules.ts index 95e56fcb8..6bf7b7fd5 100644 --- a/packages/common/src/dynamicModules.ts +++ b/packages/modules/src/dynamicModules.ts @@ -96,7 +96,13 @@ export interface IConfigurableDynamicRootModule { export function MakeConfigurableDynamicRootModule( moduleConfigToken: InjectionToken, - additionalProviders: Provider[] = [] + moduleProperties: Partial< + Pick + > = { + imports: [], + exports: [], + providers: [] + } ) { abstract class DynamicRootModule { static moduleSubject = new Subject(); @@ -107,11 +113,17 @@ export function MakeConfigurableDynamicRootModule( ): DynamicModule { const dynamicModule = { module: moduleCtor, - imports: asyncModuleConfig.imports, - exports: asyncModuleConfig.exports, + imports: [ + ...(asyncModuleConfig.imports || []), + ...(moduleProperties.imports || []) + ], + exports: [ + ...(asyncModuleConfig.exports || []), + ...(moduleProperties.exports || []) + ], providers: [ ...createModuleConfigProvider(moduleConfigToken, asyncModuleConfig), - ...additionalProviders + ...(moduleProperties.providers || []) ] }; @@ -123,12 +135,14 @@ export function MakeConfigurableDynamicRootModule( static forRoot(moduleCtor: Type, moduleConfig: U): DynamicModule { const dynamicModule = { module: moduleCtor, + imports: [...(moduleProperties.imports || [])], + exports: [...(moduleProperties.exports || [])], providers: [ { provide: moduleConfigToken, useValue: moduleConfig }, - ...additionalProviders + ...(moduleProperties.providers || []) ] }; diff --git a/packages/modules/src/index.ts b/packages/modules/src/index.ts new file mode 100644 index 000000000..22c41a024 --- /dev/null +++ b/packages/modules/src/index.ts @@ -0,0 +1 @@ +export * from './dynamicModules'; diff --git a/packages/modules/tsconfig.build.json b/packages/modules/tsconfig.build.json new file mode 100644 index 000000000..346c5b9d9 --- /dev/null +++ b/packages/modules/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["./src/**/*.spec.ts", "node_modules"] +} diff --git a/packages/modules/tsconfig.json b/packages/modules/tsconfig.json new file mode 100644 index 000000000..279b3e923 --- /dev/null +++ b/packages/modules/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src" + }, + "include": ["./src"] +} diff --git a/packages/rabbitmq/README.md b/packages/rabbitmq/README.md index 04f916ab7..5084c6d41 100644 --- a/packages/rabbitmq/README.md +++ b/packages/rabbitmq/README.md @@ -1,16 +1,16 @@ -# @nestjs-plus/rabbitmq +# @levelup-nestjs/rabbitmq

-version -downloads -license +version +downloads +license

## Description This module features an opinionated set of decorators for common RabbitMQ patterns including Publish/Subscribe and RPC using Rabbit's [Direct Reply-To Queue](https://www.rabbitmq.com/direct-reply-to.html) for optimal performance. -Expose normal NestJS service methods as messaging handlers that can be configured to support a variety of messaging patterns. The `Kitchen Sink` sample app in the examples directory provides a working example with the provided docker-compose for running a RabbitMQ instance locally. +It allows you to expose normal NestJS service methods as messaging handlers that can be configured to support a variety of messaging patterns. ## Motivation @@ -22,11 +22,11 @@ Some of the most notable missing functionality includes common messaging pattern ### Install -`npm install ---save @nestjs-plus/rabbitmq` +`npm install ---save @levelup-nestjs/rabbitmq` or -`yarn add @nestjs-plus/rabbitmq` +`yarn add @levelup-nestjs/rabbitmq` ### Module Initialization @@ -35,7 +35,7 @@ Import and add `RabbitMQModule` it to the `imports` array of module for which yo If you are using exchanges, provide information about them to the module and they will be automatically asserted for you as part of initialization. If you don't, it's possible message passing will fail if an exchange is addressed that hasn't been created yet. ```typescript -import { RabbitMQModule } from '@nestjs-plus/rabbitmq'; +import { RabbitMQModule } from '@levelup-nestjs/rabbitmq'; import { Module } from '@nestjs/common'; import { MessagingController } from './messaging/messaging.controller'; import { MessagingService } from './messaging/messaging.service'; @@ -64,7 +64,7 @@ export class RabbitExampleModule {} Simply apply the `RabbitRPC` decorator to a new or existing NestJS service class. When a message matching the exchange and routing key is received over RabbitMQ, the result of the Service method will be automatically sent back to the requester using the [Direct Reply-To Queue](https://www.rabbitmq.com/direct-reply-to.html). ```typescript -import { RabbitRPC } from '@nestjs-plus/rabbitmq'; +import { RabbitRPC } from '@levelup-nestjs/rabbitmq'; import { Injectable } from '@nestjs/common'; @Injectable() @@ -87,7 +87,7 @@ export class MessagingService { Simply apply the `RabbitSubscribe` decorator to a new or existing NestJS service class. When a message matching the exchange and routing key is received over RabbitMQ, the service method will automatically be invoked with the message allowing it to be handled as necessary. ```typescript -import { RabbitSubscribe } from '@nestjs-plus/rabbitmq'; +import { RabbitSubscribe } from '@levelup-nestjs/rabbitmq'; import { Injectable } from '@nestjs/common'; @Injectable() @@ -110,7 +110,7 @@ NestJS Plus provides sane defaults for message handling with automatic acking of By default, messages that are Nacked will not be requeued. However, if you would like to requeue the message so that another handler has an opportunity to process it use the optional requeue constructor argument set to true. ```typescript -import { RabbitRPC } from '@nestjs-plus/rabbitmq'; +import { RabbitRPC } from '@levelup-nestjs/rabbitmq'; import { Injectable } from '@nestjs/common'; @Injectable() @@ -146,7 +146,7 @@ If you don't want this behavior, simply don't provide a queue name. A unique one **Important** RPC behavior has not been tested without the use of a named queue as this would cause multiple messages to potentially be sent back in response to a single request. If you're using RPC it is highly recommended that you specify a named queue. The API may be updated in the future to specifically require this. ```typescript -import { RabbitSubscribe } from '@nestjs-plus/rabbitmq'; +import { RabbitSubscribe } from '@levelup-nestjs/rabbitmq'; import { Injectable } from '@nestjs/common'; @Injectable() diff --git a/packages/rabbitmq/package.json b/packages/rabbitmq/package.json index 363ae7236..af6487cfd 100644 --- a/packages/rabbitmq/package.json +++ b/packages/rabbitmq/package.json @@ -33,11 +33,7 @@ "url": "https://github.com/golevelup/nestjs/issues" }, "dependencies": { -<<<<<<< HEAD - "@nestjs-plus/discovery": "^2.0.2", -======= - "@levelup-nestjs/discovery": "^2.0.1", ->>>>>>> chore(packages): update packages for new npm org + "@levelup-nestjs/discovery": "^2.0.2", "amqplib": "^0.5.3", "uuid": "^3.3.2" }, diff --git a/packages/rabbitmq/src/rabbitmq.module.ts b/packages/rabbitmq/src/rabbitmq.module.ts index ae0e455d0..6c308b752 100644 --- a/packages/rabbitmq/src/rabbitmq.module.ts +++ b/packages/rabbitmq/src/rabbitmq.module.ts @@ -1,20 +1,10 @@ import { DiscoveryModule, DiscoveryService } from '@levelup-nestjs/discovery'; -import { - DynamicModule, - Logger, - Module, - OnModuleInit, - Provider -} from '@nestjs/common'; -import { - AsyncOptionsFactoryProvider, - createAsyncOptionsProvider, - MakeConfigurableDynamicRootModule -} from '@levelup-nestjs/common'; +import { MakeConfigurableDynamicRootModule } from '@levelup-nestjs/modules'; +import { DynamicModule, Logger, Module, OnModuleInit } from '@nestjs/common'; import { ExternalContextCreator } from '@nestjs/core/helpers/external-context-creator'; import { groupBy } from 'lodash'; import { AmqpConnection } from './amqp/connection'; -import { RABBIT_HANDLER, RABBIT_CONFIG_TOKEN } from './rabbitmq.constants'; +import { RABBIT_CONFIG_TOKEN, RABBIT_HANDLER } from './rabbitmq.constants'; import { RabbitHandlerConfig, RabbitMQConfig } from './rabbitmq.interfaces'; @Module({ @@ -23,19 +13,24 @@ import { RabbitHandlerConfig, RabbitMQConfig } from './rabbitmq.interfaces'; export class RabbitMQModule extends MakeConfigurableDynamicRootModule( RABBIT_CONFIG_TOKEN, - [ - { - provide: AmqpConnection, - useFactory: async (config: RabbitMQConfig): Promise => { - const connection = new AmqpConnection(config); - await connection.init(); - const logger = new Logger(RabbitMQModule.name); - logger.log('Successfully connected to RabbitMQ'); - return connection; - }, - inject: [RABBIT_CONFIG_TOKEN] - } - ] + { + providers: [ + { + provide: AmqpConnection, + useFactory: async ( + config: RabbitMQConfig + ): Promise => { + const connection = new AmqpConnection(config); + await connection.init(); + const logger = new Logger(RabbitMQModule.name); + logger.log('Successfully connected to RabbitMQ'); + return connection; + }, + inject: [RABBIT_CONFIG_TOKEN] + } + ], + exports: [AmqpConnection] + } ) implements OnModuleInit { private readonly logger = new Logger(RabbitMQModule.name); diff --git a/packages/rabbitmq/src/rabbitmq.spec.ts b/packages/rabbitmq/src/rabbitmq.spec.ts index c4b554936..4987023b1 100644 --- a/packages/rabbitmq/src/rabbitmq.spec.ts +++ b/packages/rabbitmq/src/rabbitmq.spec.ts @@ -1,11 +1,11 @@ import { Injectable, Module } from '@nestjs/common'; import { Test, TestingModule } from '@nestjs/testing'; +import { interval } from 'rxjs'; +import { first, map } from 'rxjs/operators'; import { AmqpConnection } from './amqp/connection'; import { RabbitRPC, RabbitSubscribe } from './rabbitmq.decorators'; -import { RabbitMQModule } from './rabbitmq.module'; import { RabbitMQConfig } from './rabbitmq.interfaces'; -import { interval } from 'rxjs'; -import { map, tap, first } from 'rxjs/operators'; +import { RabbitMQModule } from './rabbitmq.module'; jest.mock('./amqp/connection'); let MockedAmqpConnection = AmqpConnection as jest.Mock; diff --git a/packages/rabbitmq/tsconfig.json b/packages/rabbitmq/tsconfig.json index b7058197e..e748f35c6 100644 --- a/packages/rabbitmq/tsconfig.json +++ b/packages/rabbitmq/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "./src" }, "include": ["./src"], - "references": [{ "path": "../discovery" }, { "path": "../common" }] + "references": [{ "path": "../discovery" }, { "path": "../modules" }] }