mongodb-dynamic-api 1.2.0-beta.3 → 1.2.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/index.d.ts +1 -0
  3. package/package.json +9 -14
  4. package/src/builders/index.d.ts +1 -0
  5. package/src/builders/index.js +17 -0
  6. package/src/builders/route-decorators.builder.d.ts +18 -0
  7. package/src/builders/route-decorators.builder.js +72 -0
  8. package/src/decorators/index.d.ts +1 -0
  9. package/src/decorators/index.js +17 -0
  10. package/src/decorators/schema-options.decorator.d.ts +4 -0
  11. package/src/decorators/schema-options.decorator.js +11 -0
  12. package/src/dtos/entity.param.d.ts +4 -0
  13. package/src/dtos/entity.param.js +26 -0
  14. package/src/dtos/entity.query.d.ts +2 -0
  15. package/src/dtos/entity.query.js +6 -0
  16. package/src/dtos/index.d.ts +2 -0
  17. package/src/dtos/index.js +18 -0
  18. package/src/dynamic-api.constant.d.ts +2 -0
  19. package/src/dynamic-api.constant.js +5 -0
  20. package/src/dynamic-api.module.d.ts +7 -0
  21. package/src/dynamic-api.module.js +80 -0
  22. package/src/helpers/index.d.ts +1 -0
  23. package/src/helpers/index.js +17 -0
  24. package/src/helpers/route-decorators.helper.d.ts +4 -0
  25. package/src/helpers/route-decorators.helper.js +8 -0
  26. package/src/index.d.ts +11 -0
  27. package/src/index.js +27 -0
  28. package/src/interfaces/dynamic-api-options.interface.d.ts +14 -0
  29. package/src/interfaces/dynamic-api-options.interface.js +2 -0
  30. package/src/interfaces/dynamic-api-schema-options.interface.d.ts +43 -0
  31. package/src/interfaces/dynamic-api-schema-options.interface.js +2 -0
  32. package/src/interfaces/entity-mappers.interface.d.ts +8 -0
  33. package/src/interfaces/entity-mappers.interface.js +2 -0
  34. package/src/interfaces/index.d.ts +6 -0
  35. package/src/interfaces/index.js +22 -0
  36. package/src/interfaces/maybe-promise.type.d.ts +2 -0
  37. package/src/interfaces/maybe-promise.type.js +2 -0
  38. package/src/interfaces/route-config.interface.d.ts +16 -0
  39. package/src/interfaces/route-config.interface.js +2 -0
  40. package/src/interfaces/service-provider.interface.d.ts +6 -0
  41. package/src/interfaces/service-provider.interface.js +2 -0
  42. package/src/mixins/entity-body.mixin.d.ts +16 -0
  43. package/src/mixins/entity-body.mixin.js +24 -0
  44. package/src/mixins/entity-presenter.mixin.d.ts +46 -0
  45. package/src/mixins/entity-presenter.mixin.js +9 -0
  46. package/src/mixins/index.d.ts +2 -0
  47. package/src/mixins/index.js +18 -0
  48. package/src/models/base-entity.model.d.ts +32 -0
  49. package/src/models/base-entity.model.js +40 -0
  50. package/src/models/index.d.ts +2 -0
  51. package/src/models/index.js +18 -0
  52. package/src/models/soft-deletable-entity.model.d.ts +5 -0
  53. package/src/models/soft-deletable-entity.model.js +29 -0
  54. package/src/modules/create-many/base-create-many.service.d.ts +33 -0
  55. package/src/modules/create-many/base-create-many.service.js +22 -0
  56. package/src/modules/create-many/create-many-controller.interface.d.ts +7 -0
  57. package/src/modules/create-many/create-many-controller.interface.js +2 -0
  58. package/src/modules/create-many/create-many-controller.mixin.d.ts +6 -0
  59. package/src/modules/create-many/create-many-controller.mixin.js +75 -0
  60. package/src/modules/create-many/create-many-service.interface.d.ts +5 -0
  61. package/src/modules/create-many/create-many-service.interface.js +2 -0
  62. package/src/modules/create-many/create-many.helper.d.ts +7 -0
  63. package/src/modules/create-many/create-many.helper.js +72 -0
  64. package/src/modules/create-many/create-many.module.d.ts +6 -0
  65. package/src/modules/create-many/create-many.module.js +28 -0
  66. package/src/modules/create-many/index.d.ts +6 -0
  67. package/src/modules/create-many/index.js +22 -0
  68. package/src/modules/create-one/base-create-one.service.d.ts +33 -0
  69. package/src/modules/create-one/base-create-one.service.js +22 -0
  70. package/src/modules/create-one/create-one-controller.interface.d.ts +7 -0
  71. package/src/modules/create-one/create-one-controller.interface.js +2 -0
  72. package/src/modules/create-one/create-one-controller.mixin.d.ts +6 -0
  73. package/src/modules/create-one/create-one-controller.mixin.js +62 -0
  74. package/src/modules/create-one/create-one-service.interface.d.ts +5 -0
  75. package/src/modules/create-one/create-one-service.interface.js +2 -0
  76. package/src/modules/create-one/create-one.helper.d.ts +7 -0
  77. package/src/modules/create-one/create-one.helper.js +72 -0
  78. package/src/modules/create-one/create-one.module.d.ts +6 -0
  79. package/src/modules/create-one/create-one.module.js +28 -0
  80. package/src/modules/create-one/index.d.ts +6 -0
  81. package/src/modules/create-one/index.js +22 -0
  82. package/src/modules/delete-one/base-delete-one.service.d.ts +34 -0
  83. package/src/modules/delete-one/base-delete-one.service.js +29 -0
  84. package/src/modules/delete-one/delete-one-controller.interface.d.ts +7 -0
  85. package/src/modules/delete-one/delete-one-controller.interface.js +2 -0
  86. package/src/modules/delete-one/delete-one-controller.mixin.d.ts +6 -0
  87. package/src/modules/delete-one/delete-one-controller.mixin.js +63 -0
  88. package/src/modules/delete-one/delete-one-service.interface.d.ts +8 -0
  89. package/src/modules/delete-one/delete-one-service.interface.js +2 -0
  90. package/src/modules/delete-one/delete-one.helper.d.ts +7 -0
  91. package/src/modules/delete-one/delete-one.helper.js +72 -0
  92. package/src/modules/delete-one/delete-one.module.d.ts +6 -0
  93. package/src/modules/delete-one/delete-one.module.js +28 -0
  94. package/src/modules/delete-one/delete-one.presenter.d.ts +3 -0
  95. package/src/modules/delete-one/delete-one.presenter.js +20 -0
  96. package/src/modules/delete-one/index.d.ts +7 -0
  97. package/src/modules/delete-one/index.js +23 -0
  98. package/src/modules/duplicate-one/base-duplicate-one.service.d.ts +33 -0
  99. package/src/modules/duplicate-one/base-duplicate-one.service.js +41 -0
  100. package/src/modules/duplicate-one/duplicate-one-controller.interface.d.ts +7 -0
  101. package/src/modules/duplicate-one/duplicate-one-controller.interface.js +2 -0
  102. package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
  103. package/src/modules/duplicate-one/duplicate-one-controller.mixin.js +72 -0
  104. package/src/modules/duplicate-one/duplicate-one-service.interface.d.ts +5 -0
  105. package/src/modules/duplicate-one/duplicate-one-service.interface.js +2 -0
  106. package/src/modules/duplicate-one/duplicate-one.helper.d.ts +7 -0
  107. package/src/modules/duplicate-one/duplicate-one.helper.js +72 -0
  108. package/src/modules/duplicate-one/duplicate-one.module.d.ts +6 -0
  109. package/src/modules/duplicate-one/duplicate-one.module.js +28 -0
  110. package/src/modules/duplicate-one/index.d.ts +6 -0
  111. package/src/modules/duplicate-one/index.js +22 -0
  112. package/src/modules/get-many/base-get-many.service.d.ts +33 -0
  113. package/src/modules/get-many/base-get-many.service.js +21 -0
  114. package/src/modules/get-many/get-many-controller.interface.d.ts +7 -0
  115. package/src/modules/get-many/get-many-controller.interface.js +2 -0
  116. package/src/modules/get-many/get-many-controller.mixin.d.ts +6 -0
  117. package/src/modules/get-many/get-many-controller.mixin.js +63 -0
  118. package/src/modules/get-many/get-many-service.interface.d.ts +5 -0
  119. package/src/modules/get-many/get-many-service.interface.js +2 -0
  120. package/src/modules/get-many/get-many.helper.d.ts +7 -0
  121. package/src/modules/get-many/get-many.helper.js +72 -0
  122. package/src/modules/get-many/get-many.module.d.ts +6 -0
  123. package/src/modules/get-many/get-many.module.js +28 -0
  124. package/src/modules/get-many/index.d.ts +6 -0
  125. package/src/modules/get-many/index.js +22 -0
  126. package/src/modules/get-one/base-get-one.service.d.ts +33 -0
  127. package/src/modules/get-one/base-get-one.service.js +24 -0
  128. package/src/modules/get-one/get-one-controller.interface.d.ts +7 -0
  129. package/src/modules/get-one/get-one-controller.interface.js +2 -0
  130. package/src/modules/get-one/get-one-controller.mixin.d.ts +6 -0
  131. package/src/modules/get-one/get-one-controller.mixin.js +71 -0
  132. package/src/modules/get-one/get-one-service.interface.d.ts +5 -0
  133. package/src/modules/get-one/get-one-service.interface.js +2 -0
  134. package/src/modules/get-one/get-one.helper.d.ts +7 -0
  135. package/src/modules/get-one/get-one.helper.js +72 -0
  136. package/src/modules/get-one/get-one.module.d.ts +6 -0
  137. package/src/modules/get-one/get-one.module.js +28 -0
  138. package/src/modules/get-one/index.d.ts +6 -0
  139. package/src/modules/get-one/index.js +22 -0
  140. package/src/modules/index.d.ts +8 -0
  141. package/src/modules/index.js +24 -0
  142. package/src/modules/replace-one/base-replace-one.service.d.ts +33 -0
  143. package/src/modules/replace-one/base-replace-one.service.js +33 -0
  144. package/src/modules/replace-one/index.d.ts +6 -0
  145. package/src/modules/replace-one/index.js +22 -0
  146. package/src/modules/replace-one/replace-one-controller.interface.d.ts +7 -0
  147. package/src/modules/replace-one/replace-one-controller.interface.js +2 -0
  148. package/src/modules/replace-one/replace-one-controller.mixin.d.ts +6 -0
  149. package/src/modules/replace-one/replace-one-controller.mixin.js +72 -0
  150. package/src/modules/replace-one/replace-one-service.interface.d.ts +5 -0
  151. package/src/modules/replace-one/replace-one-service.interface.js +2 -0
  152. package/src/modules/replace-one/replace-one.helper.d.ts +7 -0
  153. package/src/modules/replace-one/replace-one.helper.js +72 -0
  154. package/src/modules/replace-one/replace-one.module.d.ts +6 -0
  155. package/src/modules/replace-one/replace-one.module.js +28 -0
  156. package/src/modules/update-one/base-update-one.service.d.ts +33 -0
  157. package/src/modules/update-one/base-update-one.service.js +30 -0
  158. package/src/modules/update-one/index.d.ts +6 -0
  159. package/src/modules/update-one/index.js +22 -0
  160. package/src/modules/update-one/update-one-controller.interface.d.ts +7 -0
  161. package/src/modules/update-one/update-one-controller.interface.js +2 -0
  162. package/src/modules/update-one/update-one-controller.mixin.d.ts +6 -0
  163. package/src/modules/update-one/update-one-controller.mixin.js +72 -0
  164. package/src/modules/update-one/update-one-service.interface.d.ts +5 -0
  165. package/src/modules/update-one/update-one-service.interface.js +2 -0
  166. package/src/modules/update-one/update-one.helper.d.ts +7 -0
  167. package/src/modules/update-one/update-one.helper.js +72 -0
  168. package/src/modules/update-one/update-one.module.d.ts +6 -0
  169. package/src/modules/update-one/update-one.module.js +28 -0
  170. package/src/services/base.service.d.ts +36 -0
  171. package/src/services/base.service.js +33 -0
  172. package/src/services/index.d.ts +1 -0
  173. package/src/services/index.js +17 -0
  174. package/tsconfig.tsbuildinfo +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  Changelog
2
2
 
3
+ ## [1.2.0-beta.5](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.5) (2024-03-01)
4
+
5
+ ## [1.2.0-beta.4](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.4) (2024-02-29)
6
+
3
7
  ## [1.2.0-beta.3](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.3) (2024-02-29)
4
8
 
5
9
  ## [1.2.0-beta.2](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/prerelease...1.2.0-beta.2) (2024-02-29)
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './src';
package/package.json CHANGED
@@ -1,33 +1,32 @@
1
1
  {
2
2
  "name": "mongodb-dynamic-api",
3
- "version": "1.2.0-beta.3",
3
+ "version": "1.2.0-beta.5",
4
4
  "description": "Auto generated CRUD API for MongoDB using NestJS",
5
5
  "author": "Mickaël NODANCHE <mikeonline75@gmail.com> (https://cv-mikeonline.web.app)",
6
6
  "homepage": "https://mikedev75015.github.io",
7
7
  "license": "MIT",
8
8
  "readmeFilename": "README.md",
9
9
  "main": "index.js",
10
- "files": [
11
- "dist/**/*",
12
- "*.md"
13
- ],
10
+ "types": "index.d.ts",
14
11
  "scripts": {
15
- "start:dev": "tsc -w",
16
- "build": "tsc",
17
12
  "prepare": "npm run build",
13
+ "build": "tsc",
18
14
  "format": "prettier --write \"src/**/*.ts\"",
19
15
  "lint": "tslint -p tsconfig.json -c tslint.json",
20
16
  "test": "jest --runInBand",
21
17
  "test-cov": "jest --runInBand --coverage",
22
18
  "test:ci:junit": "jest --ci --runInBand --coverage --testResultsProcessor=jest-junit",
23
19
  "test:ci:sonar": "jest --ci --runInBand --coverage --testResultsProcessor=jest-sonar-reporter",
24
- "compodoc": "npx compodoc -p tsconfig.json libs/dynamic-api/src --theme postmark",
25
20
  "pre-release-tag": "git tag -f prerelease && git push -f origin prerelease",
26
21
  "prerelease": "release-it --ci --preRelease=beta --no-git.requireUpstream",
27
22
  "release": "release-it --ci",
28
23
  "publish-prerelease": "npm publish ./dist --tag prerelease",
29
24
  "publish-release": "npm publish ./dist --tag latest"
30
25
  },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/MikeDev75015/mongodb-dynamic-api.git"
29
+ },
31
30
  "keywords": [
32
31
  "nestjs",
33
32
  "mongodb",
@@ -51,7 +50,6 @@
51
50
  "rxjs": "^7.8.1"
52
51
  },
53
52
  "devDependencies": {
54
- "@compodoc/compodoc": "^1.1.23",
55
53
  "@golevelup/ts-jest": "^0.4.0",
56
54
  "@nestjs/cli": "^10.3.1",
57
55
  "@nestjs/schematics": "^10.1.0",
@@ -102,12 +100,9 @@
102
100
  "<rootDir>/"
103
101
  ],
104
102
  "coveragePathIgnorePatterns": [
105
- "index.ts"
103
+ "index.ts",
104
+ ".*\\.mock\\.ts"
106
105
  ],
107
- "moduleNameMapper": {
108
- "@dynamic-api/(.*)": "<rootDir>/dynamic-api/src/$1",
109
- "@dynamic-api": "<rootDir>/dynamic-api/src"
110
- },
111
106
  "reporters": [
112
107
  "default"
113
108
  ]
@@ -0,0 +1 @@
1
+ export * from './route-decorators.builder';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./route-decorators.builder"), exports);
@@ -0,0 +1,18 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { RouteType } from '../interfaces';
3
+ import { BaseEntity } from '../models';
4
+ declare class RouteDecoratorsBuilder<Entity extends BaseEntity> {
5
+ private readonly routeType;
6
+ private readonly entity;
7
+ private readonly description?;
8
+ private readonly param?;
9
+ private readonly query?;
10
+ private readonly body?;
11
+ private readonly presenter?;
12
+ private readonly responseRouteTypeIsArray;
13
+ constructor(routeType: RouteType, entity: Type<Entity>, description?: string, param?: Type, query?: Type, body?: Type, presenter?: Type);
14
+ build(): MethodDecorator[];
15
+ private getRouteDecorators;
16
+ private getApiDecorators;
17
+ }
18
+ export { RouteDecoratorsBuilder };
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteDecoratorsBuilder = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const swagger_1 = require("@nestjs/swagger");
6
+ const lodash_1 = require("lodash");
7
+ class RouteDecoratorsBuilder {
8
+ constructor(routeType, entity, description, param, query, body, presenter) {
9
+ this.routeType = routeType;
10
+ this.entity = entity;
11
+ this.description = description;
12
+ this.param = param;
13
+ this.query = query;
14
+ this.body = body;
15
+ this.presenter = presenter;
16
+ this.responseRouteTypeIsArray = [
17
+ 'GetMany',
18
+ ];
19
+ }
20
+ build() {
21
+ const [paramKey] = this.param ? (0, lodash_1.keys)(new this.param()) : [];
22
+ return [
23
+ ...this.getRouteDecorators(paramKey),
24
+ ...this.getApiDecorators(paramKey),
25
+ ];
26
+ }
27
+ getRouteDecorators(paramKey) {
28
+ switch (this.routeType) {
29
+ case 'GetMany':
30
+ return [(0, common_1.Get)()];
31
+ case 'GetOne':
32
+ return [(0, common_1.Get)(`:${paramKey}`)];
33
+ case 'CreateMany':
34
+ return [(0, common_1.Post)('many')];
35
+ case 'CreateOne':
36
+ return [(0, common_1.Post)()];
37
+ case 'UpdateOne':
38
+ return [(0, common_1.Patch)(`:${paramKey}`)];
39
+ case 'ReplaceOne':
40
+ return [(0, common_1.Put)(`:${paramKey}`)];
41
+ case 'DuplicateOne':
42
+ return [(0, common_1.Post)(`:${paramKey}`)];
43
+ case 'DeleteOne':
44
+ return [(0, common_1.Delete)(`:${paramKey}`)];
45
+ default:
46
+ throw new Error(`Unexpected route type! Cannot build route decorators. Received: ${this.routeType}`);
47
+ }
48
+ }
49
+ getApiDecorators(paramKey) {
50
+ return [
51
+ (0, swagger_1.ApiOperation)({
52
+ operationId: `${(0, lodash_1.lowerFirst)(this.routeType)}${this.entity.name}`,
53
+ summary: this.description ??
54
+ `${(0, lodash_1.upperFirst)((0, lodash_1.lowerCase)(this.routeType))} ${(0, lodash_1.lowerCase)(this.entity.name)}`,
55
+ }),
56
+ (0, swagger_1.ApiResponse)({
57
+ type: this.presenter ?? this.entity,
58
+ isArray: this.responseRouteTypeIsArray.includes(this.routeType),
59
+ }),
60
+ ...(this.body ? [(0, swagger_1.ApiBody)({ type: this.body })] : []),
61
+ ...(this.param && paramKey
62
+ ? [
63
+ (0, swagger_1.ApiParam)({
64
+ type: typeof new this.param()[paramKey],
65
+ name: paramKey,
66
+ }),
67
+ ]
68
+ : []),
69
+ ];
70
+ }
71
+ }
72
+ exports.RouteDecoratorsBuilder = RouteDecoratorsBuilder;
@@ -0,0 +1 @@
1
+ export * from './schema-options.decorator';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./schema-options.decorator"), exports);
@@ -0,0 +1,4 @@
1
+ import { DynamicAPISchemaOptionsInterface } from '../interfaces';
2
+ declare const DYNAMIC_API_SCHEMA_OPTIONS_METADATA = "dynamic-api-module:schema-options";
3
+ declare function DynamicAPISchemaOptions(options: DynamicAPISchemaOptionsInterface): ClassDecorator;
4
+ export { DYNAMIC_API_SCHEMA_OPTIONS_METADATA, DynamicAPISchemaOptions };
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamicAPISchemaOptions = exports.DYNAMIC_API_SCHEMA_OPTIONS_METADATA = void 0;
4
+ const DYNAMIC_API_SCHEMA_OPTIONS_METADATA = 'dynamic-api-module:schema-options';
5
+ exports.DYNAMIC_API_SCHEMA_OPTIONS_METADATA = DYNAMIC_API_SCHEMA_OPTIONS_METADATA;
6
+ function DynamicAPISchemaOptions(options) {
7
+ return (target) => {
8
+ Reflect.defineMetadata(DYNAMIC_API_SCHEMA_OPTIONS_METADATA, options, target);
9
+ };
10
+ }
11
+ exports.DynamicAPISchemaOptions = DynamicAPISchemaOptions;
@@ -0,0 +1,4 @@
1
+ import { BaseEntity } from '../models';
2
+ export declare class EntityParam implements Pick<BaseEntity, 'id'> {
3
+ id: string;
4
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EntityParam = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ class EntityParam {
16
+ constructor() {
17
+ this.id = '';
18
+ }
19
+ }
20
+ exports.EntityParam = EntityParam;
21
+ __decorate([
22
+ (0, swagger_1.ApiProperty)(),
23
+ (0, class_validator_1.IsNotEmpty)(),
24
+ (0, class_validator_1.IsString)(),
25
+ __metadata("design:type", Object)
26
+ ], EntityParam.prototype, "id", void 0);
@@ -0,0 +1,2 @@
1
+ export declare class EntityQuery {
2
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityQuery = void 0;
4
+ class EntityQuery {
5
+ }
6
+ exports.EntityQuery = EntityQuery;
@@ -0,0 +1,2 @@
1
+ export * from './entity.param';
2
+ export * from './entity.query';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./entity.param"), exports);
18
+ __exportStar(require("./entity.query"), exports);
@@ -0,0 +1,2 @@
1
+ declare const DEFAULT_BDD_CONNECTION_NAME = "dynamic-api-connection";
2
+ export { DEFAULT_BDD_CONNECTION_NAME };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_BDD_CONNECTION_NAME = void 0;
4
+ const DEFAULT_BDD_CONNECTION_NAME = 'dynamic-api-connection';
5
+ exports.DEFAULT_BDD_CONNECTION_NAME = DEFAULT_BDD_CONNECTION_NAME;
@@ -0,0 +1,7 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { DynamicApiOptions } from './interfaces';
3
+ import { BaseEntity } from './models';
4
+ export declare class DynamicApiModule {
5
+ static forRoot(mongodbUri?: string): DynamicModule;
6
+ static forFeature<Entity extends BaseEntity>({ entity, controllerOptions: { path, apiTag, version: apiVersion }, routes, }: DynamicApiOptions<Entity>): DynamicModule;
7
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var DynamicApiModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DynamicApiModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const mongoose_1 = require("@nestjs/mongoose");
13
+ const decorators_1 = require("./decorators");
14
+ const dynamic_api_constant_1 = require("./dynamic-api.constant");
15
+ const modules_1 = require("./modules");
16
+ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
17
+ static forRoot(mongodbUri) {
18
+ if (!mongodbUri && (!process.env.BDD_URL || !process.env.BDD_BASE)) {
19
+ throw new Error('You must provide a mongodbUri or set the BDD_URL and BDD_BASE environment variables');
20
+ }
21
+ return {
22
+ module: DynamicApiModule_1,
23
+ imports: [
24
+ mongoose_1.MongooseModule.forRoot(mongodbUri ??
25
+ `${process.env.BDD_URL}/${process.env.BDD_BASE}?retryWrites=true&w=majority`, {
26
+ connectionName: process.env.BBD_CONNECTION_NAME || dynamic_api_constant_1.DEFAULT_BDD_CONNECTION_NAME,
27
+ }),
28
+ ],
29
+ };
30
+ }
31
+ static forFeature({ entity, controllerOptions: { path, apiTag, version: apiVersion }, routes, }) {
32
+ const { indexes, hooks } = Reflect.getOwnMetadata(decorators_1.DYNAMIC_API_SCHEMA_OPTIONS_METADATA, entity);
33
+ const schema = mongoose_1.SchemaFactory.createForClass(entity);
34
+ if (indexes) {
35
+ indexes.forEach(({ fields, options }) => {
36
+ schema.index(fields, options);
37
+ });
38
+ }
39
+ if (hooks?.length) {
40
+ hooks.forEach(({ type, method, callback, options }) => {
41
+ schema[method](type, { document: true, query: true, ...options }, callback);
42
+ });
43
+ }
44
+ const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema }], process.env.BBD_CONNECTION_NAME || dynamic_api_constant_1.DEFAULT_BDD_CONNECTION_NAME);
45
+ return {
46
+ module: DynamicApiModule_1,
47
+ imports: [
48
+ ...routes
49
+ .map(({ type, description, version: routeVersion, dTOs }) => {
50
+ const version = routeVersion ?? apiVersion;
51
+ switch (type) {
52
+ case 'CreateMany':
53
+ return modules_1.CreateManyModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
54
+ case 'CreateOne':
55
+ return modules_1.CreateOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
56
+ case 'DeleteOne':
57
+ return modules_1.DeleteOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
58
+ case 'DuplicateOne':
59
+ return modules_1.DuplicateOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
60
+ case 'GetMany':
61
+ return modules_1.GetManyModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
62
+ case 'GetOne':
63
+ return modules_1.GetOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
64
+ case 'ReplaceOne':
65
+ return modules_1.ReplaceOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
66
+ case 'UpdateOne':
67
+ return modules_1.UpdateOneModule.forFeature(databaseModule, entity, path, apiTag, version, description, dTOs);
68
+ default:
69
+ throw new Error(`Route for ${type} is not implemented`);
70
+ }
71
+ })
72
+ .filter((module) => module),
73
+ ],
74
+ };
75
+ }
76
+ };
77
+ exports.DynamicApiModule = DynamicApiModule;
78
+ exports.DynamicApiModule = DynamicApiModule = DynamicApiModule_1 = __decorate([
79
+ (0, common_1.Module)({})
80
+ ], DynamicApiModule);
@@ -0,0 +1 @@
1
+ export * from './route-decorators.helper';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./route-decorators.helper"), exports);
@@ -0,0 +1,4 @@
1
+ import { RouteDecoratorsBuilder } from '../builders';
2
+ import { BaseEntity } from '../models';
3
+ declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators: RouteDecoratorsBuilder<Entity>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
4
+ export { RouteDecoratorsHelper };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RouteDecoratorsHelper = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ function RouteDecoratorsHelper(routeDecorators) {
6
+ return (0, common_1.applyDecorators)(...routeDecorators.build());
7
+ }
8
+ exports.RouteDecoratorsHelper = RouteDecoratorsHelper;
package/src/index.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export * from './builders';
2
+ export * from './decorators';
3
+ export * from './dtos';
4
+ export * from './helpers';
5
+ export * from './interfaces';
6
+ export * from './mixins';
7
+ export * from './models';
8
+ export * from './modules';
9
+ export * from './services';
10
+ export * from './dynamic-api.module';
11
+ export * from './dynamic-api.constant';
package/src/index.js ADDED
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./builders"), exports);
18
+ __exportStar(require("./decorators"), exports);
19
+ __exportStar(require("./dtos"), exports);
20
+ __exportStar(require("./helpers"), exports);
21
+ __exportStar(require("./interfaces"), exports);
22
+ __exportStar(require("./mixins"), exports);
23
+ __exportStar(require("./models"), exports);
24
+ __exportStar(require("./modules"), exports);
25
+ __exportStar(require("./services"), exports);
26
+ __exportStar(require("./dynamic-api.module"), exports);
27
+ __exportStar(require("./dynamic-api.constant"), exports);
@@ -0,0 +1,14 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { BaseEntity } from '../models';
3
+ import { RouteConfig } from './route-config.interface';
4
+ interface ControllerOptions {
5
+ path: string;
6
+ apiTag?: string;
7
+ version?: string;
8
+ }
9
+ export interface DynamicApiOptions<Entity extends BaseEntity> {
10
+ entity: Type<Entity>;
11
+ controllerOptions: ControllerOptions;
12
+ routes: RouteConfig<Entity>[];
13
+ }
14
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,43 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import { IndexDefinition, IndexOptions } from 'mongoose';
26
+ type HookEvent = 'find' | 'findOne' | 'save' | 'findOneAndUpdate' | 'findOneAndReplace' | 'deleteOne';
27
+ type SchemaHook = {
28
+ type: HookEvent;
29
+ method: 'pre' | 'post';
30
+ callback: (...args: any[]) => void;
31
+ options?: {
32
+ document?: boolean;
33
+ query?: boolean;
34
+ };
35
+ };
36
+ interface DynamicAPISchemaOptionsInterface {
37
+ indexes?: {
38
+ fields: IndexDefinition;
39
+ options?: IndexOptions;
40
+ }[];
41
+ hooks?: SchemaHook[];
42
+ }
43
+ export type { SchemaHook, DynamicAPISchemaOptionsInterface };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ import { BaseEntity } from '../models';
2
+ interface BodyToPartialEntityMapper {
3
+ toEntity?: <Entity extends BaseEntity, Body>(body: Body) => Promise<Partial<Entity>>;
4
+ }
5
+ interface EntityToPresenterMapper {
6
+ fromEntity?: <Entity extends BaseEntity, Presenter>(entity: Entity) => Promise<Presenter>;
7
+ }
8
+ export type { BodyToPartialEntityMapper, EntityToPresenterMapper };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ export * from './entity-mappers.interface';
2
+ export * from './dynamic-api-options.interface';
3
+ export * from './dynamic-api-schema-options.interface';
4
+ export * from './maybe-promise.type';
5
+ export * from './route-config.interface';
6
+ export * from './service-provider.interface';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./entity-mappers.interface"), exports);
18
+ __exportStar(require("./dynamic-api-options.interface"), exports);
19
+ __exportStar(require("./dynamic-api-schema-options.interface"), exports);
20
+ __exportStar(require("./maybe-promise.type"), exports);
21
+ __exportStar(require("./route-config.interface"), exports);
22
+ __exportStar(require("./service-provider.interface"), exports);
@@ -0,0 +1,2 @@
1
+ type MaybePromise<T> = T | Promise<T>;
2
+ export type { MaybePromise };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,16 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { BaseEntity } from '../models';
3
+ type RouteType = 'GetMany' | 'GetOne' | 'CreateOne' | 'CreateMany' | 'UpdateOne' | 'ReplaceOne' | 'DeleteOne' | 'DuplicateOne';
4
+ type DTOsBundle = {
5
+ query?: Type;
6
+ param?: Type;
7
+ body?: Type;
8
+ presenter?: Type;
9
+ };
10
+ interface RouteConfig<Entity extends BaseEntity> {
11
+ type: RouteType;
12
+ description?: string;
13
+ version?: string;
14
+ dTOs?: DTOsBundle;
15
+ }
16
+ export { DTOsBundle, RouteType, RouteConfig };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,6 @@
1
+ import { Type } from '@nestjs/common';
2
+ interface ServiceProvider {
3
+ provide: string;
4
+ useClass: Type;
5
+ }
6
+ export type { ServiceProvider };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });