@goatlab/fluent 0.6.0 → 0.6.3

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 (192) hide show
  1. package/dist/BaseConnector.d.ts +79 -0
  2. package/dist/BaseConnector.js +361 -0
  3. package/dist/Fluent.d.ts +26 -0
  4. package/dist/Fluent.js +52 -0
  5. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +36 -0
  6. package/dist/TypeOrmConnector/TypeOrmConnector.js +509 -0
  7. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.d.ts +1 -0
  8. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +52 -0
  9. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.d.ts +1 -0
  10. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +55 -0
  11. package/dist/TypeOrmConnector/TypeOrmSqliteConnector.spec.d.ts +1 -0
  12. package/dist/TypeOrmConnector/TypeOrmSqliteConnector.spec.js +47 -0
  13. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +1 -0
  14. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +114 -0
  15. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +16 -0
  16. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +57 -0
  17. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +5 -0
  18. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +11 -0
  19. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -0
  20. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +45 -0
  21. package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +8 -0
  22. package/dist/TypeOrmConnector/test/basic/goat.dto.js +18 -0
  23. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +10 -0
  24. package/dist/TypeOrmConnector/test/basic/goat.entity.js +42 -0
  25. package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +6 -0
  26. package/dist/TypeOrmConnector/test/basic/goat.repository.js +11 -0
  27. package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
  28. package/dist/TypeOrmConnector/test/flock.js +25 -0
  29. package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +5 -0
  30. package/dist/TypeOrmConnector/test/relations/car/car.dto.js +12 -0
  31. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +7 -0
  32. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +32 -0
  33. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +8 -0
  34. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +13 -0
  35. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -0
  36. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +93 -0
  37. package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +5 -0
  38. package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +12 -0
  39. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +6 -0
  40. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +29 -0
  41. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +8 -0
  42. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +14 -0
  43. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +5 -0
  44. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +12 -0
  45. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +5 -0
  46. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +23 -0
  47. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +6 -0
  48. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +11 -0
  49. package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +5 -0
  50. package/dist/TypeOrmConnector/test/relations/user/user.dto.js +12 -0
  51. package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +14 -0
  52. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +56 -0
  53. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +10 -0
  54. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +16 -0
  55. package/dist/core/Loopback/build-schema.d.ts +31 -0
  56. package/dist/core/Loopback/build-schema.js +335 -0
  57. package/dist/core/Loopback/common-types.d.ts +36 -0
  58. package/dist/core/Loopback/common-types.js +13 -0
  59. package/dist/core/Loopback/json-to-schema.d.ts +6 -0
  60. package/dist/core/Loopback/json-to-schema.js +96 -0
  61. package/dist/core/Loopback/metadata.d.ts +9 -0
  62. package/dist/core/Loopback/metadata.js +28 -0
  63. package/dist/core/Loopback/model.d.ts +87 -0
  64. package/dist/core/Loopback/model.js +244 -0
  65. package/dist/core/Loopback/query.d.ts +97 -0
  66. package/dist/core/Loopback/query.js +290 -0
  67. package/dist/core/Loopback/relation.types.d.ts +45 -0
  68. package/dist/core/Loopback/relation.types.js +13 -0
  69. package/dist/core/Loopback/type-resolver.d.ts +7 -0
  70. package/dist/core/Loopback/type-resolver.js +34 -0
  71. package/dist/core/Loopback/type.d.ts +9 -0
  72. package/dist/core/Loopback/type.js +2 -0
  73. package/dist/core/Nestjs/applyDecorators.d.ts +1 -0
  74. package/dist/core/Nestjs/applyDecorators.js +17 -0
  75. package/dist/core/Nestjs/types/common.d.ts +16 -0
  76. package/dist/core/Nestjs/types/common.js +35 -0
  77. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
  78. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +7 -0
  79. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
  80. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +65 -0
  81. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
  82. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +131 -0
  83. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +1 -0
  84. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +19 -0
  85. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
  86. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +50 -0
  87. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +1 -0
  88. package/dist/core/Nestjs/types/decorators/directive.decorator.js +36 -0
  89. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +1 -0
  90. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +25 -0
  91. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +15 -0
  92. package/dist/core/Nestjs/types/decorators/field.decorator.js +56 -0
  93. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +7 -0
  94. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +23 -0
  95. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +9 -0
  96. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +27 -0
  97. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
  98. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +42 -0
  99. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
  100. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +9 -0
  101. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
  102. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +9 -0
  103. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
  104. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +9 -0
  105. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
  106. package/dist/core/Nestjs/types/errors/undefined-type.error.js +10 -0
  107. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
  108. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +10 -0
  109. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +5 -0
  110. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +2 -0
  111. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
  112. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +2 -0
  113. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
  114. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +2 -0
  115. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
  116. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +2 -0
  117. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +235 -0
  118. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +2 -0
  119. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
  120. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +2 -0
  121. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
  122. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +2 -0
  123. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
  124. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +2 -0
  125. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
  126. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +2 -0
  127. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
  128. package/dist/core/Nestjs/types/lazy-metadata.storage.js +67 -0
  129. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
  130. package/dist/core/Nestjs/types/metadata/class.metadata.js +2 -0
  131. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
  132. package/dist/core/Nestjs/types/metadata/directive.metadata.js +2 -0
  133. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
  134. package/dist/core/Nestjs/types/metadata/enum.metadata.js +2 -0
  135. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
  136. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +2 -0
  137. package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
  138. package/dist/core/Nestjs/types/metadata/index.js +11 -0
  139. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
  140. package/dist/core/Nestjs/types/metadata/interface.metadata.js +2 -0
  141. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
  142. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +2 -0
  143. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
  144. package/dist/core/Nestjs/types/metadata/param.metadata.js +2 -0
  145. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
  146. package/dist/core/Nestjs/types/metadata/property.metadata.js +2 -0
  147. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
  148. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +2 -0
  149. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
  150. package/dist/core/Nestjs/types/metadata/union.metadata.js +2 -0
  151. package/dist/core/Nestjs/types/object-type.decorator.d.ts +8 -0
  152. package/dist/core/Nestjs/types/object-type.decorator.js +25 -0
  153. package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
  154. package/dist/core/Nestjs/types/omit-type.js +30 -0
  155. package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
  156. package/dist/core/Nestjs/types/reflection.utils.js +58 -0
  157. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +4 -0
  158. package/dist/core/Nestjs/types/set-metadata.decorator.js +16 -0
  159. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +69 -0
  160. package/dist/core/Nestjs/types/type-metadata.storage.js +342 -0
  161. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
  162. package/dist/core/Nestjs/types/utils/enum.utils.js +29 -0
  163. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +13 -0
  164. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
  165. package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +2 -0
  166. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +38 -0
  167. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
  168. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +36 -0
  169. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
  170. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
  171. package/dist/core/database/createConnection.d.ts +30 -0
  172. package/dist/core/database/createConnection.js +43 -0
  173. package/dist/core/database/decorators.d.ts +43 -0
  174. package/dist/core/database/decorators.js +98 -0
  175. package/dist/core/dtos/access.dto.d.ts +4 -0
  176. package/dist/core/dtos/access.dto.js +21 -0
  177. package/dist/core/dtos/pagination.dto.d.ts +13 -0
  178. package/dist/core/dtos/pagination.dto.js +62 -0
  179. package/dist/core/types.d.ts +23 -0
  180. package/dist/core/types.js +29 -0
  181. package/dist/generatorDatasource.d.ts +2 -0
  182. package/dist/generatorDatasource.js +12 -0
  183. package/dist/index.d.ts +15 -0
  184. package/dist/index.js +0 -1
  185. package/dist/loadRelations.d.ts +10 -0
  186. package/dist/loadRelations.js +92 -0
  187. package/dist/outputKeys.d.ts +2 -0
  188. package/dist/outputKeys.js +17 -0
  189. package/dist/tsconfig.tsbuildinfo +1 -0
  190. package/dist/types.d.ts +85 -0
  191. package/dist/types.js +2 -0
  192. package/package.json +6 -7
@@ -0,0 +1,509 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypeOrmConnector = exports.getRelations = exports.GoatRepository = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const mongodb_1 = require("mongodb");
6
+ const js_utils_1 = require("@goatlab/js-utils");
7
+ const loadRelations_1 = require("../loadRelations");
8
+ const index_1 = require("../index");
9
+ class GoatRepository extends typeorm_1.Repository {
10
+ }
11
+ exports.GoatRepository = GoatRepository;
12
+ const getRelations = typeOrmRepo => {
13
+ const relations = {};
14
+ for (const relation of typeOrmRepo.metadata.relations) {
15
+ relations[relation.inverseEntityMetadata.givenTableName.toLowerCase()] = {
16
+ isOneToMany: relation.isOneToMany,
17
+ isManyToOne: relation.isManyToOne,
18
+ isManyToMany: relation.isManyToMany,
19
+ inverseSidePropertyPath: relation.inverseSidePropertyPath,
20
+ propertyPath: relation.propertyName,
21
+ entityName: relation.inverseEntityMetadata.name,
22
+ tableName: relation.inverseEntityMetadata.tableName,
23
+ targetClass: relation.inverseEntityMetadata.target,
24
+ joinColumns: relation.joinColumns,
25
+ inverseJoinColumns: relation.inverseJoinColumns
26
+ };
27
+ }
28
+ return {
29
+ relations
30
+ };
31
+ };
32
+ exports.getRelations = getRelations;
33
+ class TypeOrmConnector extends index_1.BaseConnector {
34
+ constructor(entity, relationQuery, connectionName) {
35
+ super();
36
+ this.connectionName = connectionName;
37
+ if (!index_1.modelGeneratorDataSource.isInitialized) {
38
+ throw new Error('Fluent model generator data source is not initialized');
39
+ }
40
+ this.repository = index_1.modelGeneratorDataSource.getRepository(entity);
41
+ this.relationQuery = relationQuery;
42
+ const { relations } = (0, exports.getRelations)(this.repository);
43
+ this.modelRelations = relations;
44
+ this.outputKeys = (0, index_1.getOutputKeys)(this.repository) || [];
45
+ this.isMongoDB =
46
+ this.repository.metadata.connection.driver.options.type === 'mongodb';
47
+ }
48
+ async get() {
49
+ const query = this.getGeneratedQuery();
50
+ const result = await this.repository.find(query);
51
+ let data = this.jsApplySelect(result);
52
+ data = await (0, loadRelations_1.loadRelations)({
53
+ data,
54
+ relations: this.relations,
55
+ modelRelations: this.modelRelations,
56
+ connectionName: this.connectionName,
57
+ provider: 'typeorm',
58
+ self: this
59
+ });
60
+ this.reset();
61
+ return data;
62
+ }
63
+ async getPaginated() {
64
+ const response = await this.get();
65
+ const results = {
66
+ current_page: response[0].meta.currentPage,
67
+ data: response[0].data,
68
+ first_page_url: response[0].meta.firstPageUrl,
69
+ next_page_url: response[0].meta.nextPageUrl,
70
+ path: response[0].meta.path,
71
+ per_page: response[0].meta.itemsPerPage,
72
+ prev_page_url: response[0].meta.previousPageUrl,
73
+ total: response[0].meta.totalItemCount
74
+ };
75
+ if (results && results.data && this.selectArray.length > 0) {
76
+ results.data = this.jsApplySelect(results.data);
77
+ return results;
78
+ }
79
+ return results;
80
+ }
81
+ async all() {
82
+ return this.get();
83
+ }
84
+ async find(filter = {}) {
85
+ const stringFilter = filter;
86
+ let parsedFilter = {};
87
+ try {
88
+ parsedFilter = JSON.parse(stringFilter);
89
+ }
90
+ catch (error) {
91
+ parsedFilter = {};
92
+ }
93
+ this.selectArray = (parsedFilter && parsedFilter.fields) || [];
94
+ this.whereArray =
95
+ (parsedFilter && parsedFilter.where && parsedFilter.where.and) || [];
96
+ this.orWhereArray =
97
+ (parsedFilter && parsedFilter.where && parsedFilter.where.or) || [];
98
+ this.limit((parsedFilter && (parsedFilter.limit || parsedFilter.take)) || 100);
99
+ this.offset((parsedFilter && (parsedFilter.offset || parsedFilter.skip)) || 0);
100
+ if (parsedFilter && parsedFilter.order) {
101
+ const orderB = [
102
+ parsedFilter.order.field,
103
+ parsedFilter.order.asc ? 'asc' : 'desc',
104
+ parsedFilter.order.type || 'string'
105
+ ];
106
+ this.chainReference.push({ method: 'orderBy', orderB });
107
+ this.orderByArray = orderB;
108
+ }
109
+ return this.get();
110
+ }
111
+ async paginate(paginator) {
112
+ if (!paginator) {
113
+ throw new Error('Paginator cannot be empty');
114
+ }
115
+ this.paginator = paginator;
116
+ const response = await this.getPaginated();
117
+ return response;
118
+ }
119
+ raw() {
120
+ return this.repository;
121
+ }
122
+ async insert(data) {
123
+ const datum = await this.repository.save(data);
124
+ const result = this.jsApplySelect([datum]);
125
+ this.reset();
126
+ return result[0];
127
+ }
128
+ async insertMany(data) {
129
+ const inserted = await this.repository.save(data, {
130
+ chunk: data.length / 300
131
+ });
132
+ this.reset();
133
+ const result = this.jsApplySelect(inserted);
134
+ return result;
135
+ }
136
+ async updateById(id, data) {
137
+ const parsedId = this.isMongoDB
138
+ ? new mongodb_1.ObjectId(id)
139
+ : id;
140
+ const dataToInsert = this.outputKeys.includes('updated')
141
+ ? {
142
+ ...data,
143
+ ...{ updated: new Date() }
144
+ }
145
+ : data;
146
+ const updated = await this.repository.update(id, dataToInsert);
147
+ const dbResult = await this.repository.findBy({
148
+ id: (0, typeorm_1.In)([parsedId])
149
+ });
150
+ const result = this.jsApplySelect(dbResult);
151
+ this.reset();
152
+ return result[0];
153
+ }
154
+ async replaceById(id, data) {
155
+ const parsedId = this.isMongoDB
156
+ ? new mongodb_1.ObjectId(id)
157
+ : id;
158
+ const value = await this.repository.findOneOrFail({
159
+ where: { id: parsedId }
160
+ });
161
+ const flatValue = js_utils_1.Objects.flatten(JSON.parse(JSON.stringify(value)));
162
+ Object.keys(flatValue).forEach(key => {
163
+ flatValue[key] = null;
164
+ });
165
+ const nullObject = js_utils_1.Objects.nest(flatValue);
166
+ const newValue = { ...nullObject, ...data };
167
+ delete newValue._id;
168
+ delete newValue.id;
169
+ delete newValue.created;
170
+ delete newValue.updated;
171
+ const dataToInsert = this.outputKeys.includes('updated')
172
+ ? {
173
+ ...data,
174
+ ...{ updated: new Date() }
175
+ }
176
+ : data;
177
+ await this.repository.update(id, dataToInsert);
178
+ const val = await this.repository.findOneOrFail({
179
+ where: {
180
+ id: parsedId
181
+ }
182
+ });
183
+ const returnValue = this.jsApplySelect([val]);
184
+ this.reset();
185
+ return returnValue[0];
186
+ }
187
+ async clear({ sure }) {
188
+ if (!sure || sure !== true) {
189
+ throw new Error('Clear() method will delete everything!, you must set the "sure" parameter "clear({sure:true})" to continue');
190
+ }
191
+ return;
192
+ const data = await this.repository.clear();
193
+ this.reset();
194
+ return true;
195
+ }
196
+ async deleteById(id) {
197
+ const parsedId = this.isMongoDB
198
+ ? new mongodb_1.ObjectId(id)
199
+ : id;
200
+ const removed = this.repository.delete(parsedId);
201
+ this.reset();
202
+ return id;
203
+ }
204
+ async findById(id) {
205
+ const parsedId = this.isMongoDB
206
+ ? new mongodb_1.ObjectId(id)
207
+ : id;
208
+ const data = await this.repository.findBy({
209
+ id: (0, typeorm_1.In)([parsedId])
210
+ });
211
+ const result = this.jsApplySelect(data);
212
+ this.reset();
213
+ return result[0];
214
+ }
215
+ getPage() {
216
+ const page = 'page=';
217
+ if (this.paginator && this.paginator.page) {
218
+ return `${page + this.paginator.page}&`;
219
+ }
220
+ return '';
221
+ }
222
+ getPaginatorLimit(filter) {
223
+ if (this.paginator && this.paginator.perPage) {
224
+ return { ...filter, limit: this.paginator.perPage };
225
+ }
226
+ return filter;
227
+ }
228
+ getPopulate() {
229
+ const populate = [];
230
+ this.populateArray.forEach(relation => {
231
+ if (typeof relation === 'string') {
232
+ populate.push({ relation });
233
+ }
234
+ else if (Array.isArray(relation)) {
235
+ relation.forEach(nestedRelation => {
236
+ if (typeof nestedRelation === 'string') {
237
+ populate.push({ relation: nestedRelation });
238
+ }
239
+ else if (typeof nestedRelation === 'object') {
240
+ populate.push(nestedRelation);
241
+ }
242
+ });
243
+ }
244
+ else if (typeof relation === 'object') {
245
+ populate.push(relation);
246
+ }
247
+ });
248
+ return populate;
249
+ }
250
+ getGeneratedQuery() {
251
+ let filter = {};
252
+ filter = this.isMongoDB
253
+ ? this.getMongoFilters(filter)
254
+ : this.getFilters(filter);
255
+ filter = this.getLimit(filter);
256
+ filter = this.getSkip(filter);
257
+ filter = this.getSelect(filter);
258
+ filter = this.getOrderBy(filter);
259
+ filter = this.getPaginatorLimit(filter);
260
+ const page = this.getPage();
261
+ const populate = this.getPopulate();
262
+ if (this.rawQuery) {
263
+ filter.relations = populate || this.rawQuery.populate;
264
+ filter.take = filter.take || this.rawQuery.limit;
265
+ filter.skip = filter.skip || this.rawQuery.skip;
266
+ filter.order = filter.order || this.rawQuery.order;
267
+ filter.select = { ...filter.select, ...this.rawQuery.fields };
268
+ filter.where = { ...this.rawQuery.where };
269
+ }
270
+ return filter;
271
+ }
272
+ getFilters(filters) {
273
+ const andFilters = this.whereArray;
274
+ const orFilters = this.orWhereArray;
275
+ if (this.relationQuery && this.relationQuery.data) {
276
+ const ids = this.relationQuery.data.map(d => d.id);
277
+ andFilters.push([
278
+ this.relationQuery.relation.inverseSidePropertyPath,
279
+ 'in',
280
+ ids
281
+ ]);
282
+ }
283
+ if (!andFilters || andFilters.length === 0) {
284
+ return filters;
285
+ }
286
+ const Filters = { where: [{}] };
287
+ andFilters.forEach(condition => {
288
+ const element = condition[0];
289
+ const operator = condition[1];
290
+ const value = condition[2];
291
+ switch (operator) {
292
+ case '=':
293
+ Filters.where[0] = js_utils_1.Objects.nest({
294
+ ...Filters.where[0],
295
+ ...{ [element]: (0, typeorm_1.Equal)(value) }
296
+ });
297
+ break;
298
+ case '!=':
299
+ Filters.where[0] = js_utils_1.Objects.nest({
300
+ ...Filters.where[0],
301
+ ...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)) }
302
+ });
303
+ break;
304
+ case '>':
305
+ Filters.where[0] = js_utils_1.Objects.nest({
306
+ ...Filters.where[0],
307
+ ...{ [element]: (0, typeorm_1.MoreThan)(value) }
308
+ });
309
+ break;
310
+ case '>=':
311
+ Filters.where[0] = js_utils_1.Objects.nest({
312
+ ...Filters.where[0],
313
+ ...{ [element]: (0, typeorm_1.MoreThanOrEqual)(value) }
314
+ });
315
+ break;
316
+ case '<':
317
+ Filters.where[0] = js_utils_1.Objects.nest({
318
+ ...Filters.where[0],
319
+ ...{ [element]: (0, typeorm_1.LessThan)(value) }
320
+ });
321
+ break;
322
+ case '<=':
323
+ Filters.where[0] = js_utils_1.Objects.nest({
324
+ ...Filters.where[0],
325
+ ...{ [element]: (0, typeorm_1.LessThanOrEqual)(value) }
326
+ });
327
+ break;
328
+ case 'in':
329
+ Filters.where[0] = js_utils_1.Objects.nest({
330
+ ...Filters.where[0],
331
+ ...{ [element]: (0, typeorm_1.In)(value) }
332
+ });
333
+ break;
334
+ case 'nin':
335
+ Filters.where[0] = js_utils_1.Objects.nest({
336
+ ...Filters.where[0],
337
+ ...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.In)(value)) }
338
+ });
339
+ break;
340
+ case 'exists':
341
+ Filters.where[0] = js_utils_1.Objects.nest({
342
+ ...Filters.where[0],
343
+ ...{ [element]: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) }
344
+ });
345
+ break;
346
+ case '!exists':
347
+ Filters.where[0] = js_utils_1.Objects.nest({
348
+ ...Filters.where[0],
349
+ ...{ [element]: (0, typeorm_1.IsNull)() }
350
+ });
351
+ break;
352
+ case 'regexp':
353
+ Filters.where[0] = js_utils_1.Objects.nest({
354
+ ...Filters.where[0],
355
+ ...{ [element]: (0, typeorm_1.Like)(value) }
356
+ });
357
+ break;
358
+ }
359
+ });
360
+ orFilters.forEach(condition => {
361
+ const element = condition[0];
362
+ const operator = condition[1];
363
+ const value = condition[2];
364
+ switch (operator) {
365
+ case '=':
366
+ Filters.where.push({ [element]: (0, typeorm_1.Equal)(value) });
367
+ break;
368
+ case '!=':
369
+ Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.Equal)(value)) });
370
+ break;
371
+ case '>':
372
+ Filters.where.push({ [element]: (0, typeorm_1.MoreThan)(value) });
373
+ break;
374
+ case '>=':
375
+ Filters.where.push(js_utils_1.Objects.nest({ [element]: (0, typeorm_1.MoreThanOrEqual)(value) }));
376
+ break;
377
+ case '<':
378
+ Filters.where.push({ [element]: (0, typeorm_1.LessThan)(value) });
379
+ break;
380
+ case '<=':
381
+ Filters.where.push({ [element]: (0, typeorm_1.LessThanOrEqual)(value) });
382
+ break;
383
+ case 'in':
384
+ Filters.where.push({ [element]: (0, typeorm_1.In)(value) });
385
+ break;
386
+ case 'nin':
387
+ Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.In)(value)) });
388
+ break;
389
+ case 'exists':
390
+ Filters.where.push({ [element]: (0, typeorm_1.Not)((0, typeorm_1.IsNull)()) });
391
+ break;
392
+ case '!exists':
393
+ Filters.where.push({ [element]: (0, typeorm_1.IsNull)() });
394
+ break;
395
+ case 'regexp':
396
+ Filters.where.push({ [element]: (0, typeorm_1.Like)(value) });
397
+ break;
398
+ }
399
+ });
400
+ return Filters;
401
+ }
402
+ getMongoFilters(filters) {
403
+ const andFilters = this.whereArray;
404
+ const orFilters = this.orWhereArray;
405
+ if (this.relationQuery && this.relationQuery.data) {
406
+ const ids = this.relationQuery.data.map(d => js_utils_1.Ids.objectID(d.id));
407
+ andFilters.push([
408
+ this.relationQuery.relation.inverseSidePropertyPath,
409
+ 'in',
410
+ ids
411
+ ]);
412
+ }
413
+ if (!andFilters || andFilters.length === 0) {
414
+ return filters;
415
+ }
416
+ const Filters = { where: { $and: [] } };
417
+ andFilters.forEach(condition => {
418
+ let element = condition[0];
419
+ const operator = condition[1];
420
+ let value = condition[2];
421
+ if (element === 'id') {
422
+ element = '_id';
423
+ value = Array.isArray(value)
424
+ ? value.map(v => js_utils_1.Ids.objectID(v))
425
+ : js_utils_1.Ids.objectID(value);
426
+ }
427
+ switch (operator) {
428
+ case '=':
429
+ Filters.where.$and.push({ [element]: { $eq: value } });
430
+ break;
431
+ case '!=':
432
+ Filters.where.$and.push({ [element]: { $neq: value } });
433
+ break;
434
+ case '>':
435
+ Filters.where.$and.push({ [element]: { $gt: value } });
436
+ break;
437
+ case '>=':
438
+ Filters.where.$and.push({ [element]: { $gte: value } });
439
+ break;
440
+ case '<':
441
+ Filters.where.$and.push({ [element]: { $lt: value } });
442
+ break;
443
+ case '<=':
444
+ Filters.where.$and.push({ [element]: { $lte: value } });
445
+ break;
446
+ case 'in':
447
+ Filters.where.$and.push({ [element]: { $in: value } });
448
+ break;
449
+ case 'nin':
450
+ Filters.where.$and.push({
451
+ [element]: { $not: { $in: value } }
452
+ });
453
+ break;
454
+ case 'exists':
455
+ Filters.where.$and.push({ [element]: { $exists: true } });
456
+ break;
457
+ case '!exists':
458
+ Filters.where.$and.push({ [element]: { $exists: false } });
459
+ break;
460
+ case 'regex':
461
+ Filters.where.$and.push({ [element]: { $regex: value } });
462
+ break;
463
+ }
464
+ });
465
+ return Filters;
466
+ }
467
+ getOrderBy(filter) {
468
+ if (!this.orderByArray || this.orderByArray.length === 0) {
469
+ return filter;
470
+ }
471
+ return {
472
+ ...filter,
473
+ order: {
474
+ [this.orderByArray[0]]: this.orderByArray[1].toUpperCase()
475
+ }
476
+ };
477
+ }
478
+ getLimit(filter) {
479
+ if (!this.limitNumber || this.limitNumber === 0) {
480
+ this.limitNumber = (this.rawQuery && this.rawQuery.limit) || 50;
481
+ }
482
+ return { ...filter, take: this.limitNumber };
483
+ }
484
+ getSkip(filter) {
485
+ if (!this.offsetNumber) {
486
+ this.offsetNumber = (this.rawQuery && this.rawQuery.skip) || 0;
487
+ }
488
+ return { ...filter, skip: this.offsetNumber };
489
+ }
490
+ getSelect(filter) {
491
+ let select = this.selectArray;
492
+ if (Object.keys(select).length === 0 && select.constructor === Object) {
493
+ select = [''];
494
+ }
495
+ select = select.map(s => {
496
+ s = s.split(' as ')[0];
497
+ s = s.includes('id') ? 'id' : s;
498
+ return s;
499
+ });
500
+ if (select.find(e => e.startsWith('data.'))) {
501
+ select.unshift('data');
502
+ }
503
+ if (!select) {
504
+ return filter;
505
+ }
506
+ return { ...filter, fields: select };
507
+ }
508
+ }
509
+ exports.TypeOrmConnector = TypeOrmConnector;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const typeorm_1 = require("typeorm");
4
+ const car_entity_1 = require("./test/relations/car/car.entity");
5
+ const car_repositoryTypeOrm_1 = require("./test/relations/car/car.repositoryTypeOrm");
6
+ const goat_entity_1 = require("./test/basic/goat.entity");
7
+ const goat_repository_1 = require("./test/basic/goat.repository");
8
+ const roles_entity_1 = require("./test/relations/roles/roles.entity");
9
+ const roles_repositoryTypeOrm_1 = require("./test/relations/roles/roles.repositoryTypeOrm");
10
+ const roles_user_entity_1 = require("./test/relations/roles/roles_user.entity");
11
+ const typeOrm_entity_1 = require("./test/advanced/typeOrm.entity");
12
+ const typeOrm_repository_1 = require("./test/advanced/typeOrm.repository");
13
+ const user_repositoryTypeOrm_1 = require("./test/relations/user/user.repositoryTypeOrm");
14
+ const user_entity_1 = require("./test/relations/user/user.entity");
15
+ const advancedTestSuite_1 = require("./test/advanced/advancedTestSuite");
16
+ const basicTestSuite_1 = require("./test/basic/basicTestSuite");
17
+ const relationsTestsSuite_1 = require("./test/relations/relationsTestsSuite");
18
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 600000;
19
+ let mongoConnection;
20
+ beforeAll(async (done) => {
21
+ mongoConnection = '';
22
+ await (0, typeorm_1.createConnection)({
23
+ type: 'mongodb',
24
+ name: 'runningTest',
25
+ url: mongoConnection.url,
26
+ useNewUrlParser: true,
27
+ useUnifiedTopology: true,
28
+ entities: [
29
+ goat_entity_1.GoatEntity,
30
+ typeOrm_entity_1.TypeORMDataModel,
31
+ car_entity_1.CarsEntity,
32
+ user_entity_1.UsersEntity,
33
+ roles_entity_1.RoleEntity,
34
+ roles_user_entity_1.RolesUser
35
+ ],
36
+ synchronize: false,
37
+ logging: false
38
+ });
39
+ done();
40
+ });
41
+ afterAll(async () => {
42
+ await mongoConnection.instance.stop();
43
+ });
44
+ describe('Execute all basic test Suite', () => {
45
+ (0, basicTestSuite_1.basicTestSuite)(goat_repository_1.GoatRepository);
46
+ });
47
+ describe('Execute all advanced test Suite', () => {
48
+ (0, advancedTestSuite_1.advancedTestSuite)(typeOrm_repository_1.TypeOrmRepository);
49
+ });
50
+ describe('Execute all relations test suite', () => {
51
+ (0, relationsTestsSuite_1.relationsTestSuite)(user_repositoryTypeOrm_1.UserRepository, car_repositoryTypeOrm_1.CarsRepository, roles_repositoryTypeOrm_1.RoleRepository);
52
+ });
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const typeorm_1 = require("typeorm");
4
+ const car_entity_1 = require("./test/relations/car/car.entity");
5
+ const car_repositoryTypeOrm_1 = require("./test/relations/car/car.repositoryTypeOrm");
6
+ const goat_entity_1 = require("./test/basic/goat.entity");
7
+ const goat_repository_1 = require("./test/basic/goat.repository");
8
+ const roles_entity_1 = require("./test/relations/roles/roles.entity");
9
+ const roles_repositoryTypeOrm_1 = require("./test/relations/roles/roles.repositoryTypeOrm");
10
+ const roles_user_entity_1 = require("./test/relations/roles/roles_user.entity");
11
+ const typeOrm_entity_1 = require("./test/advanced/typeOrm.entity");
12
+ const typeOrm_repository_1 = require("./test/advanced/typeOrm.repository");
13
+ const user_repositoryTypeOrm_1 = require("./test/relations/user/user.repositoryTypeOrm");
14
+ const user_entity_1 = require("./test/relations/user/user.entity");
15
+ const advancedTestSuite_1 = require("./test/advanced/advancedTestSuite");
16
+ const basicTestSuite_1 = require("./test/basic/basicTestSuite");
17
+ const relationsTestsSuite_1 = require("./test/relations/relationsTestsSuite");
18
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 600000;
19
+ let tearDown;
20
+ beforeAll(async (done) => {
21
+ const { databaseURL, kill } = { databaseURL: '', kill: () => { } };
22
+ tearDown = kill;
23
+ const conn = new typeorm_1.DataSource({
24
+ type: 'mysql',
25
+ name: 'runningTest',
26
+ database: 'test-db',
27
+ username: 'test-user',
28
+ password: 'password',
29
+ port: 3306,
30
+ entities: [
31
+ goat_entity_1.GoatEntity,
32
+ typeOrm_entity_1.TypeORMDataModel,
33
+ car_entity_1.CarsEntity,
34
+ user_entity_1.UsersEntity,
35
+ roles_entity_1.RoleEntity,
36
+ roles_user_entity_1.RolesUser
37
+ ],
38
+ synchronize: true,
39
+ logging: false
40
+ });
41
+ await conn.initialize();
42
+ done();
43
+ });
44
+ afterAll(() => {
45
+ return tearDown();
46
+ });
47
+ describe('Execute all basic test Suite', () => {
48
+ (0, basicTestSuite_1.basicTestSuite)(goat_repository_1.GoatRepository);
49
+ });
50
+ describe('Execute all advanced test Suite', () => {
51
+ (0, advancedTestSuite_1.advancedTestSuite)(typeOrm_repository_1.TypeOrmRepository);
52
+ });
53
+ describe('Execute all relations test suite', () => {
54
+ (0, relationsTestsSuite_1.relationsTestSuite)(user_repositoryTypeOrm_1.UserRepository, car_repositoryTypeOrm_1.CarsRepository, roles_repositoryTypeOrm_1.RoleRepository);
55
+ });
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const car_entity_1 = require("./test/relations/car/car.entity");
4
+ const car_repositoryTypeOrm_1 = require("./test/relations/car/car.repositoryTypeOrm");
5
+ const goat_entity_1 = require("./test/basic/goat.entity");
6
+ const goat_repository_1 = require("./test/basic/goat.repository");
7
+ const roles_entity_1 = require("./test/relations/roles/roles.entity");
8
+ const roles_repositoryTypeOrm_1 = require("./test/relations/roles/roles.repositoryTypeOrm");
9
+ const roles_user_entity_1 = require("./test/relations/roles/roles_user.entity");
10
+ const typeOrm_entity_1 = require("./test/advanced/typeOrm.entity");
11
+ const typeOrm_repository_1 = require("./test/advanced/typeOrm.repository");
12
+ const user_repositoryTypeOrm_1 = require("./test/relations/user/user.repositoryTypeOrm");
13
+ const user_entity_1 = require("./test/relations/user/user.entity");
14
+ const advancedTestSuite_1 = require("./test/advanced/advancedTestSuite");
15
+ const basicTestSuite_1 = require("./test/basic/basicTestSuite");
16
+ const relationsTestsSuite_1 = require("./test/relations/relationsTestsSuite");
17
+ const index_1 = require("../index");
18
+ jest.setTimeout(600000);
19
+ beforeAll(async (done) => {
20
+ const entities = [
21
+ goat_entity_1.GoatEntity,
22
+ typeOrm_entity_1.TypeORMDataModel,
23
+ car_entity_1.CarsEntity,
24
+ user_entity_1.UsersEntity,
25
+ roles_entity_1.RoleEntity,
26
+ roles_user_entity_1.RolesUser
27
+ ];
28
+ await index_1.Fluent.models(entities);
29
+ await (0, index_1.createConnection)({
30
+ connectionName: 'runningTest',
31
+ type: 'sqlite',
32
+ databaseName: ':memory:',
33
+ entitiesPath: entities,
34
+ logging: false,
35
+ synchronize: true
36
+ }).useFactory();
37
+ done();
38
+ });
39
+ describe('Execute all basic test Suite', () => {
40
+ (0, basicTestSuite_1.basicTestSuite)(goat_repository_1.GoatRepository);
41
+ });
42
+ describe('Execute all advanced test Suite', () => {
43
+ (0, advancedTestSuite_1.advancedTestSuite)(typeOrm_repository_1.TypeOrmRepository);
44
+ });
45
+ describe('Execute all relations test suite', () => {
46
+ (0, relationsTestsSuite_1.relationsTestSuite)(user_repositoryTypeOrm_1.UserRepository, car_repositoryTypeOrm_1.CarsRepository, roles_repositoryTypeOrm_1.RoleRepository);
47
+ });
@@ -0,0 +1 @@
1
+ export declare const advancedTestSuite: (Model: any) => void;