@hichchi/nest-crud 0.0.1-beta.4 → 0.0.1
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.
- package/CHANGELOG.md +56 -56
- package/base/base-entity-extension.js +6 -10
- package/base/base-entity-extension.js.map +1 -1
- package/base/base-entity.d.ts +1 -1
- package/base/base-entity.js +43 -47
- package/base/base-entity.js.map +1 -1
- package/base/base-repository.d.ts +6 -6
- package/base/base-repository.js +31 -31
- package/base/base-repository.js.map +1 -1
- package/base/base-user.entity.d.ts +7 -1
- package/base/base-user.entity.js +91 -67
- package/base/base-user.entity.js.map +1 -1
- package/base/index.js +4 -7
- package/base/index.js.map +1 -1
- package/constants.d.ts +2 -0
- package/constants.js +7 -8
- package/constants.js.map +1 -1
- package/crud.module.js +26 -27
- package/crud.module.js.map +1 -1
- package/decorators/entity-extension.decorator.js +17 -20
- package/decorators/entity-extension.decorator.js.map +1 -1
- package/decorators/entity.decorator.js +27 -30
- package/decorators/entity.decorator.js.map +1 -1
- package/decorators/filter.decorator.js +5 -8
- package/decorators/filter.decorator.js.map +1 -1
- package/decorators/index.js +8 -11
- package/decorators/index.js.map +1 -1
- package/decorators/join-column.decorator.js +8 -11
- package/decorators/join-column.decorator.js.map +1 -1
- package/decorators/page.decorator.d.ts +14 -8
- package/decorators/page.decorator.js +9 -111
- package/decorators/page.decorator.js.map +1 -1
- package/decorators/repository.decorator.js +11 -14
- package/decorators/repository.decorator.js.map +1 -1
- package/decorators/search.decorator.js +5 -8
- package/decorators/search.decorator.js.map +1 -1
- package/decorators/sort.decorator.js +5 -8
- package/decorators/sort.decorator.js.map +1 -1
- package/dtos/bulk-delete.dto.js +12 -15
- package/dtos/bulk-delete.dto.js.map +1 -1
- package/dtos/bulk-update.dto.d.ts +6 -0
- package/dtos/bulk-update.dto.js +24 -0
- package/dtos/bulk-update.dto.js.map +1 -0
- package/dtos/ids.dto.d.ts +5 -0
- package/dtos/ids.dto.js +19 -0
- package/dtos/ids.dto.js.map +1 -0
- package/dtos/index.d.ts +1 -0
- package/dtos/index.js +2 -4
- package/dtos/index.js.map +1 -1
- package/enums/crud.enums.js +4 -7
- package/enums/crud.enums.js.map +1 -1
- package/enums/index.js +1 -4
- package/enums/index.js.map +1 -1
- package/enums/metadata-keys.enum.js +2 -5
- package/enums/metadata-keys.enum.js.map +1 -1
- package/exceptions/index.js +1 -4
- package/exceptions/index.js.map +1 -1
- package/exceptions/typeorm.exception.js +4 -9
- package/exceptions/typeorm.exception.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +12 -20
- package/index.js.map +1 -1
- package/interfaces/connection-options.interface.js +1 -2
- package/interfaces/crud-options.interfaces.d.ts +49 -46
- package/interfaces/crud-options.interfaces.js +1 -2
- package/interfaces/index.js +2 -5
- package/interfaces/index.js.map +1 -1
- package/package.json +15 -9
- package/readme-top.md +3 -0
- package/responses/crud.error.responses.js +28 -31
- package/responses/crud.error.responses.js.map +1 -1
- package/responses/crud.success.responses.js +21 -24
- package/responses/crud.success.responses.js.map +1 -1
- package/responses/index.js +2 -5
- package/responses/index.js.map +1 -1
- package/services/crud.service.d.ts +13 -13
- package/services/crud.service.js +39 -44
- package/services/crud.service.js.map +1 -1
- package/services/index.js +1 -4
- package/services/index.js.map +1 -1
- package/tokens.js +2 -5
- package/tokens.js.map +1 -1
- package/types/database.types.js +1 -2
- package/types/decorator.types.js +1 -2
- package/types/decorator.types.js.map +1 -1
- package/types/entity-option-unique.js +1 -2
- package/types/error-handler.type.js +1 -2
- package/types/filter-options.type.js +1 -2
- package/types/find-conditions.type.js +1 -2
- package/types/index.js +8 -11
- package/types/index.js.map +1 -1
- package/types/repository-decorator.type.js +1 -2
- package/types/sort-options.type.js +1 -2
- package/utils/entity.utils.js +42 -46
- package/utils/entity.utils.js.map +1 -1
- package/utils/http.utils.d.ts +2 -2
- package/utils/http.utils.js +8 -13
- package/utils/http.utils.js.map +1 -1
- package/utils/index.js +2 -5
- package/utils/index.js.map +1 -1
- package/utils/repository.utils.d.ts +4 -2
- package/utils/repository.utils.js +10 -12
- package/utils/repository.utils.js.map +1 -1
- package/base/base-controller.d.ts +0 -13
- package/base/base-controller.js +0 -80
- package/base/base-controller.js.map +0 -1
- package/classes/index.d.ts +0 -1
- package/classes/index.js +0 -5
- package/classes/index.js.map +0 -1
- package/classes/paginated-response.d.ts +0 -95
- package/classes/paginated-response.js +0 -106
- package/classes/paginated-response.js.map +0 -1
package/base/base-user.entity.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const tokens_1 = require("../tokens");
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { AfterLoad, BeforeInsert, BeforeUpdate, Column, DeleteDateColumn, JoinColumn, ManyToOne, PrimaryGeneratedColumn, } from "typeorm";
|
|
3
|
+
import { USER_ENTITY_TABLE_NAME } from "../tokens";
|
|
4
|
+
import { AuthProvider } from "@hichchi/nest-connector/auth";
|
|
5
|
+
import { Exclude } from "class-transformer";
|
|
7
6
|
/**
|
|
8
7
|
* Base user entity class that provides common user fields and functionality
|
|
9
8
|
*
|
|
@@ -38,7 +37,7 @@ const tokens_1 = require("../tokens");
|
|
|
38
37
|
* @implements {UserInfo} Provides the core user identification properties
|
|
39
38
|
* @see {@link UserInfo} The interface that defines the required user properties
|
|
40
39
|
*/
|
|
41
|
-
class HichchiUserEntity {
|
|
40
|
+
export class HichchiUserEntity {
|
|
42
41
|
/**
|
|
43
42
|
* Unique identifier for the entity
|
|
44
43
|
*
|
|
@@ -148,6 +147,11 @@ class HichchiUserEntity {
|
|
|
148
147
|
* alternative authentication methods like email-only authentication.
|
|
149
148
|
*/
|
|
150
149
|
username;
|
|
150
|
+
password;
|
|
151
|
+
emailVerified;
|
|
152
|
+
avatar;
|
|
153
|
+
profileData;
|
|
154
|
+
signUpType;
|
|
151
155
|
/**
|
|
152
156
|
* Lifecycle hooks that run before an entity is inserted or updated
|
|
153
157
|
*
|
|
@@ -199,81 +203,101 @@ class HichchiUserEntity {
|
|
|
199
203
|
};
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
(
|
|
205
|
-
tslib_1.__metadata("design:type", String)
|
|
206
|
+
__decorate([
|
|
207
|
+
PrimaryGeneratedColumn("uuid"),
|
|
208
|
+
__metadata("design:type", String)
|
|
206
209
|
], HichchiUserEntity.prototype, "id", void 0);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
+
__decorate([
|
|
211
|
+
Column({ nullable: false, default: () => "CURRENT_TIMESTAMP" }),
|
|
212
|
+
__metadata("design:type", Date)
|
|
210
213
|
], HichchiUserEntity.prototype, "createdAt", void 0);
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
+
__decorate([
|
|
215
|
+
Column({ nullable: false, default: () => "CURRENT_TIMESTAMP" }),
|
|
216
|
+
__metadata("design:type", Date)
|
|
214
217
|
], HichchiUserEntity.prototype, "updatedAt", void 0);
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
+
__decorate([
|
|
219
|
+
DeleteDateColumn({ type: "timestamp", nullable: true }),
|
|
220
|
+
__metadata("design:type", Object)
|
|
218
221
|
], HichchiUserEntity.prototype, "deletedAt", void 0);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
+
__decorate([
|
|
223
|
+
Column({ nullable: true }),
|
|
224
|
+
__metadata("design:type", Object)
|
|
222
225
|
], HichchiUserEntity.prototype, "createdById", void 0);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
226
|
+
__decorate([
|
|
227
|
+
ManyToOne(USER_ENTITY_TABLE_NAME, { nullable: true }),
|
|
228
|
+
JoinColumn(),
|
|
229
|
+
__metadata("design:type", Object)
|
|
227
230
|
], HichchiUserEntity.prototype, "createdBy", void 0);
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
+
__decorate([
|
|
232
|
+
Column({ nullable: true }),
|
|
233
|
+
__metadata("design:type", Object)
|
|
231
234
|
], HichchiUserEntity.prototype, "updatedById", void 0);
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
235
|
+
__decorate([
|
|
236
|
+
ManyToOne(USER_ENTITY_TABLE_NAME, { nullable: true }),
|
|
237
|
+
JoinColumn(),
|
|
238
|
+
__metadata("design:type", Object)
|
|
236
239
|
], HichchiUserEntity.prototype, "updatedBy", void 0);
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
+
__decorate([
|
|
241
|
+
Column({ nullable: true }),
|
|
242
|
+
__metadata("design:type", Object)
|
|
240
243
|
], HichchiUserEntity.prototype, "deletedById", void 0);
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
__decorate([
|
|
245
|
+
ManyToOne(USER_ENTITY_TABLE_NAME, { nullable: true }),
|
|
246
|
+
JoinColumn(),
|
|
247
|
+
__metadata("design:type", Object)
|
|
245
248
|
], HichchiUserEntity.prototype, "deletedBy", void 0);
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
+
__decorate([
|
|
250
|
+
Column({ nullable: false }),
|
|
251
|
+
__metadata("design:type", String)
|
|
249
252
|
], HichchiUserEntity.prototype, "firstName", void 0);
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
+
__decorate([
|
|
254
|
+
Column({ nullable: false }),
|
|
255
|
+
__metadata("design:type", String)
|
|
253
256
|
], HichchiUserEntity.prototype, "lastName", void 0);
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
+
__decorate([
|
|
258
|
+
Column({ nullable: false }),
|
|
259
|
+
__metadata("design:type", String)
|
|
257
260
|
], HichchiUserEntity.prototype, "fullName", void 0);
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
+
__decorate([
|
|
262
|
+
Column("varchar", { nullable: true }),
|
|
263
|
+
__metadata("design:type", Object)
|
|
261
264
|
], HichchiUserEntity.prototype, "email", void 0);
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
+
__decorate([
|
|
266
|
+
Column("varchar", { nullable: true }),
|
|
267
|
+
__metadata("design:type", Object)
|
|
265
268
|
], HichchiUserEntity.prototype, "username", void 0);
|
|
266
|
-
|
|
267
|
-
(
|
|
268
|
-
(
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
__decorate([
|
|
270
|
+
Exclude(),
|
|
271
|
+
Column("varchar", { nullable: true }),
|
|
272
|
+
__metadata("design:type", Object)
|
|
273
|
+
], HichchiUserEntity.prototype, "password", void 0);
|
|
274
|
+
__decorate([
|
|
275
|
+
Column({ default: false }),
|
|
276
|
+
__metadata("design:type", Boolean)
|
|
277
|
+
], HichchiUserEntity.prototype, "emailVerified", void 0);
|
|
278
|
+
__decorate([
|
|
279
|
+
Column("varchar", { nullable: true }),
|
|
280
|
+
__metadata("design:type", Object)
|
|
281
|
+
], HichchiUserEntity.prototype, "avatar", void 0);
|
|
282
|
+
__decorate([
|
|
283
|
+
Column("json", { nullable: true }),
|
|
284
|
+
__metadata("design:type", Object)
|
|
285
|
+
], HichchiUserEntity.prototype, "profileData", void 0);
|
|
286
|
+
__decorate([
|
|
287
|
+
Column("enum", { enum: AuthProvider, nullable: false }),
|
|
288
|
+
__metadata("design:type", String)
|
|
289
|
+
], HichchiUserEntity.prototype, "signUpType", void 0);
|
|
290
|
+
__decorate([
|
|
291
|
+
BeforeInsert(),
|
|
292
|
+
BeforeUpdate(),
|
|
293
|
+
__metadata("design:type", Function),
|
|
294
|
+
__metadata("design:paramtypes", []),
|
|
295
|
+
__metadata("design:returntype", void 0)
|
|
272
296
|
], HichchiUserEntity.prototype, "beforeInsert", null);
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
297
|
+
__decorate([
|
|
298
|
+
AfterLoad(),
|
|
299
|
+
__metadata("design:type", Function),
|
|
300
|
+
__metadata("design:paramtypes", []),
|
|
301
|
+
__metadata("design:returntype", void 0)
|
|
278
302
|
], HichchiUserEntity.prototype, "afterLoad", null);
|
|
279
303
|
//# sourceMappingURL=base-user.entity.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-user.entity.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/base/base-user.entity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base-user.entity.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/base/base-user.entity.ts"],"names":[],"mappings":"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"}
|
package/base/index.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
tslib_1.__exportStar(require("./base-entity-extension"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./base-repository"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./base-user.entity"), exports);
|
|
1
|
+
export * from "./base-entity";
|
|
2
|
+
export * from "./base-entity-extension";
|
|
3
|
+
export * from "./base-repository";
|
|
4
|
+
export * from "./base-user.entity";
|
|
8
5
|
//# sourceMappingURL=index.js.map
|
package/base/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/base/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/constants.d.ts
CHANGED
|
@@ -100,3 +100,5 @@ export declare const EXTRACT_INVALID_QUERY_FIELD_REGEX: RegExp;
|
|
|
100
100
|
* @see {@link EntityUtils.handleError} Method that uses this pattern to extract column names from errors
|
|
101
101
|
*/
|
|
102
102
|
export declare const EXTRACT_INVALID_COLUMN_REGEX: RegExp;
|
|
103
|
+
export declare const ID_PATH = "id";
|
|
104
|
+
export declare const ID_PATH_VAR = ":id";
|
package/constants.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EXTRACT_INVALID_COLUMN_REGEX = exports.EXTRACT_INVALID_QUERY_FIELD_REGEX = exports.FK_CONSTRAINT_REGEX = exports.UNIQUE_CONSTRAINT_REGEX = exports.DEFAULT_MAX_RECURSION_DEPTH = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Default maximum recursion depth for deep object operations
|
|
6
3
|
*
|
|
@@ -21,7 +18,7 @@ exports.EXTRACT_INVALID_COLUMN_REGEX = exports.EXTRACT_INVALID_QUERY_FIELD_REGEX
|
|
|
21
18
|
*
|
|
22
19
|
* @see {@link toQueryDeepPartialEntity} Function that uses this constant to limit recursion depth
|
|
23
20
|
*/
|
|
24
|
-
|
|
21
|
+
export const DEFAULT_MAX_RECURSION_DEPTH = 10;
|
|
25
22
|
/**
|
|
26
23
|
* Regular expression for validating unique constraint naming convention
|
|
27
24
|
*
|
|
@@ -42,7 +39,7 @@ exports.DEFAULT_MAX_RECURSION_DEPTH = 10;
|
|
|
42
39
|
*
|
|
43
40
|
* @see {@link HichchiEntity} Decorator that validates unique constraint names
|
|
44
41
|
*/
|
|
45
|
-
|
|
42
|
+
export const UNIQUE_CONSTRAINT_REGEX = /^UNIQUE_[a-zA-Z]\w+_[a-zA-Z]\w+$/;
|
|
46
43
|
/**
|
|
47
44
|
* Regular expression for validating foreign key constraint naming convention
|
|
48
45
|
*
|
|
@@ -64,7 +61,7 @@ exports.UNIQUE_CONSTRAINT_REGEX = /^UNIQUE_[a-zA-Z]\w+_[a-zA-Z]\w+$/;
|
|
|
64
61
|
* @see {@link HichchiEntity} Decorator that validates foreign key constraint names
|
|
65
62
|
* @see {@link HichchiJoinColumn} Decorator that uses this pattern for foreign key constraints
|
|
66
63
|
*/
|
|
67
|
-
|
|
64
|
+
export const FK_CONSTRAINT_REGEX = /^FK_[a-zA-Z]\w+_[a-zA-Z]\w+$/;
|
|
68
65
|
/**
|
|
69
66
|
* Regular expression for extracting field names from TypeORM property not found errors
|
|
70
67
|
*
|
|
@@ -83,7 +80,7 @@ exports.FK_CONSTRAINT_REGEX = /^FK_[a-zA-Z]\w+_[a-zA-Z]\w+$/;
|
|
|
83
80
|
*
|
|
84
81
|
* @see {@link EntityUtils.handleError} Method that uses this pattern to extract field names from errors
|
|
85
82
|
*/
|
|
86
|
-
|
|
83
|
+
export const EXTRACT_INVALID_QUERY_FIELD_REGEX = /Property "|" was/;
|
|
87
84
|
/**
|
|
88
85
|
* Regular expression for extracting column names from database column not found errors
|
|
89
86
|
*
|
|
@@ -102,5 +99,7 @@ exports.EXTRACT_INVALID_QUERY_FIELD_REGEX = /Property "|" was/;
|
|
|
102
99
|
*
|
|
103
100
|
* @see {@link EntityUtils.handleError} Method that uses this pattern to extract column names from errors
|
|
104
101
|
*/
|
|
105
|
-
|
|
102
|
+
export const EXTRACT_INVALID_COLUMN_REGEX = /Unknown column '|' in 'where clause'/;
|
|
103
|
+
export const ID_PATH = "id";
|
|
104
|
+
export const ID_PATH_VAR = `:${ID_PATH}`;
|
|
106
105
|
//# sourceMappingURL=constants.js.map
|
package/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../libs/nest-crud/src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../libs/nest-crud/src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAElE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,kBAAkB,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,sCAAsC,CAAC;AAEnF,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC;AAE5B,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC"}
|
package/crud.module.js
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// noinspection JSUnusedGlobalSymbols
|
|
3
2
|
var HichchiCrudModule_1;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const nest_core_1 = require("@hichchi/nest-core");
|
|
13
|
-
const nest_connector_1 = require("@hichchi/nest-connector");
|
|
3
|
+
import { __decorate } from "tslib";
|
|
4
|
+
import { Module } from "@nestjs/common";
|
|
5
|
+
import { TypeOrmModule } from "@nestjs/typeorm";
|
|
6
|
+
import { CONNECTION_OPTIONS } from "./tokens";
|
|
7
|
+
import { EntityUtils } from "./utils";
|
|
8
|
+
import { BaseEntity, BaseEntityExtension, HichchiUserEntity } from "./base";
|
|
9
|
+
import { hichchiMetadata, ImplementationException } from "@hichchi/nest-core";
|
|
10
|
+
import { DEFAULT_MYSQL_PORT } from "@hichchi/nest-connector";
|
|
14
11
|
/**
|
|
15
12
|
* Module for integrating TypeORM with NestJS and providing CRUD functionality
|
|
16
13
|
*
|
|
@@ -76,10 +73,10 @@ let HichchiCrudModule = HichchiCrudModule_1 = class HichchiCrudModule {
|
|
|
76
73
|
return {
|
|
77
74
|
module: HichchiCrudModule_1,
|
|
78
75
|
imports: [
|
|
79
|
-
|
|
76
|
+
TypeOrmModule.forRoot({
|
|
80
77
|
type: options.type || "mysql",
|
|
81
78
|
host: options.host || "localhost",
|
|
82
|
-
port: options.port ||
|
|
79
|
+
port: options.port || DEFAULT_MYSQL_PORT,
|
|
83
80
|
username: options.username || "root",
|
|
84
81
|
password: options.password || "",
|
|
85
82
|
database: options.database,
|
|
@@ -96,10 +93,10 @@ let HichchiCrudModule = HichchiCrudModule_1 = class HichchiCrudModule {
|
|
|
96
93
|
],
|
|
97
94
|
providers: [
|
|
98
95
|
{
|
|
99
|
-
provide:
|
|
96
|
+
provide: CONNECTION_OPTIONS,
|
|
100
97
|
useValue: options,
|
|
101
98
|
},
|
|
102
|
-
|
|
99
|
+
EntityUtils,
|
|
103
100
|
],
|
|
104
101
|
};
|
|
105
102
|
}
|
|
@@ -131,8 +128,8 @@ let HichchiCrudModule = HichchiCrudModule_1 = class HichchiCrudModule {
|
|
|
131
128
|
this.validateEntities(entities);
|
|
132
129
|
return {
|
|
133
130
|
module: HichchiCrudModule_1,
|
|
134
|
-
imports: [
|
|
135
|
-
exports: [
|
|
131
|
+
imports: [TypeOrmModule.forFeature(entities)],
|
|
132
|
+
exports: [TypeOrmModule],
|
|
136
133
|
};
|
|
137
134
|
}
|
|
138
135
|
/**
|
|
@@ -165,7 +162,7 @@ let HichchiCrudModule = HichchiCrudModule_1 = class HichchiCrudModule {
|
|
|
165
162
|
option = "migrations";
|
|
166
163
|
}
|
|
167
164
|
if (option) {
|
|
168
|
-
throw new
|
|
165
|
+
throw new ImplementationException("Missing connection option", `Connection option '${option}' cannot be empty in HichchiCrudModule.forRoot()'.`, `Please provide a valid value for the '${option}' connection option.`);
|
|
169
166
|
}
|
|
170
167
|
return true;
|
|
171
168
|
}
|
|
@@ -192,19 +189,21 @@ let HichchiCrudModule = HichchiCrudModule_1 = class HichchiCrudModule {
|
|
|
192
189
|
*/
|
|
193
190
|
static validateEntities(entities) {
|
|
194
191
|
for (const entity of entities) {
|
|
195
|
-
if (!
|
|
196
|
-
throw new
|
|
192
|
+
if (!hichchiMetadata().isHichchiEntity(entity)) {
|
|
193
|
+
throw new ImplementationException("Invalid entity", `'${entity.name}' must be decorated with '@HichchiEntity()'.`);
|
|
197
194
|
}
|
|
198
|
-
if (Object.getPrototypeOf(entity) !==
|
|
199
|
-
Object.getPrototypeOf(entity) !==
|
|
200
|
-
Object.getPrototypeOf(entity) !==
|
|
201
|
-
throw new
|
|
195
|
+
if (Object.getPrototypeOf(entity) !== BaseEntity &&
|
|
196
|
+
Object.getPrototypeOf(entity) !== BaseEntityExtension &&
|
|
197
|
+
Object.getPrototypeOf(entity) !== HichchiUserEntity) {
|
|
198
|
+
throw new ImplementationException("Invalid entity", `'${entity.name}' must extend 'BaseEntity' or 'BaseEntityExtension' or 'HichchiUserEntity'.`);
|
|
202
199
|
}
|
|
203
200
|
}
|
|
204
201
|
}
|
|
205
202
|
};
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
(0, common_1.Module)({})
|
|
203
|
+
HichchiCrudModule = HichchiCrudModule_1 = __decorate([
|
|
204
|
+
Module({})
|
|
209
205
|
], HichchiCrudModule);
|
|
206
|
+
export { HichchiCrudModule };
|
|
207
|
+
// TODO: need to update doc to say install `@nestjs/cache-manager, @keyv/redis, cacheable` to use cache
|
|
208
|
+
// TODO: winston, @nestjs/axios, @nestjs/passport, passport-jwt, bcrypt, @nestjs/jwt, passport-local, passport-google-oauth2
|
|
210
209
|
//# sourceMappingURL=crud.module.js.map
|
package/crud.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.module.js","sourceRoot":"","sources":["../../../libs/nest-crud/src/crud.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crud.module.js","sourceRoot":"","sources":["../../../libs/nest-crud/src/crud.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// noinspection JSUnusedGlobalSymbols
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const nest_core_1 = require("@hichchi/nest-core");
|
|
9
|
-
const metadata_keys_enum_1 = require("../enums/metadata-keys.enum");
|
|
2
|
+
import { Entity, getMetadataArgsStorage } from "typeorm";
|
|
3
|
+
import { FK_CONSTRAINT_REGEX } from "../constants";
|
|
4
|
+
import { BaseEntityExtension } from "../base";
|
|
5
|
+
import { hichchiMetadata, ImplementationException } from "@hichchi/nest-core";
|
|
6
|
+
import { MetadataKeys } from "../enums/metadata-keys.enum";
|
|
10
7
|
/**
|
|
11
8
|
* Decorator for creating entity extensions with enhanced validation
|
|
12
9
|
*
|
|
@@ -50,37 +47,37 @@ const metadata_keys_enum_1 = require("../enums/metadata-keys.enum");
|
|
|
50
47
|
* @see {@link HichchiJoinColumn} The decorator required for entity relationships
|
|
51
48
|
* @see {@link HichchiEntity} The decorator for standard entities with full audit tracking
|
|
52
49
|
*/
|
|
53
|
-
function HichchiEntityExtension(tableName) {
|
|
50
|
+
export function HichchiEntityExtension(tableName) {
|
|
54
51
|
return function (target) {
|
|
55
|
-
if (!(target.prototype instanceof
|
|
56
|
-
throw new
|
|
52
|
+
if (!(target.prototype instanceof BaseEntityExtension)) {
|
|
53
|
+
throw new ImplementationException(`Extension entities must extend BaseEntityExtension: '${target.name}'`, `@HichchiEntityExtension("${tableName}") was used on a class that does not extend BaseEntityExtension.`, "Add `extends BaseEntityExtension` to extension entities to ensure proper behavior.");
|
|
57
54
|
}
|
|
58
|
-
|
|
59
|
-
const metadataArgs =
|
|
55
|
+
Entity(tableName)(target);
|
|
56
|
+
const metadataArgs = getMetadataArgsStorage();
|
|
60
57
|
// Validate OneToOne relation with an @HichchiEntity
|
|
61
58
|
const oneToOneRelations = metadataArgs.relations.filter(relation => relation.target === target && relation.relationType === "one-to-one");
|
|
62
59
|
if (oneToOneRelations.length === 0) {
|
|
63
|
-
throw new
|
|
60
|
+
throw new ImplementationException("Missing @OneToOne relation", `No @OneToOne relation defined in @HichchiEntityExtension("${tableName}").`, "HichchiEntityExtension must have a OneToOne relation to an entity decorated with @HichchiEntity.");
|
|
64
61
|
}
|
|
65
62
|
oneToOneRelations.forEach(relation => {
|
|
66
63
|
const joinColumns = metadataArgs.joinColumns.filter(joinColumn => joinColumn.target === target && joinColumn.propertyName === relation.propertyName);
|
|
67
64
|
if (joinColumns.length === 0) {
|
|
68
|
-
throw new
|
|
65
|
+
throw new ImplementationException("Missing @HichchiJoinColumn", `Missing @HichchiJoinColumn on OneToOne property '${relation.propertyName}' in @HichchiEntityExtension("${tableName}").`, "Please use @HichchiJoinColumn instead of @JoinColumn for consistent foreign key validation.");
|
|
69
66
|
}
|
|
70
67
|
// Validate HichchiJoinColumn usage
|
|
71
68
|
joinColumns.forEach(joinColumn => {
|
|
72
|
-
const isHichchiJoinColumn = Reflect.getMetadata(
|
|
69
|
+
const isHichchiJoinColumn = Reflect.getMetadata(MetadataKeys.HICHCHI_FOREIGN_KEY, target.prototype, joinColumn.propertyName);
|
|
73
70
|
if (!isHichchiJoinColumn) {
|
|
74
|
-
throw new
|
|
71
|
+
throw new ImplementationException("Invalid JoinColumn", `@JoinColumn used instead of @HichchiJoinColumn on '${joinColumn.propertyName}' in @HichchiEntityExtension("${tableName}").`, "Use @HichchiJoinColumn to maintain naming and validation consistency.");
|
|
75
72
|
}
|
|
76
73
|
if (joinColumn.foreignKeyConstraintName &&
|
|
77
|
-
!
|
|
78
|
-
throw new
|
|
74
|
+
!FK_CONSTRAINT_REGEX.test(joinColumn.foreignKeyConstraintName)) {
|
|
75
|
+
throw new ImplementationException(`Invalid foreign key constraint: '${joinColumn.foreignKeyConstraintName}'`, "Foreign key name must follow 'FK_entity_entity' format.", "Ensure constraint names are valid according to the FK naming pattern.");
|
|
79
76
|
}
|
|
80
77
|
});
|
|
81
78
|
});
|
|
82
79
|
// Register in app metadata
|
|
83
|
-
|
|
80
|
+
hichchiMetadata().addEntity(target, tableName, []);
|
|
84
81
|
};
|
|
85
82
|
}
|
|
86
83
|
// TODO: v2.0 Improve this when have better usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-extension.decorator.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/decorators/entity-extension.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-extension.decorator.js","sourceRoot":"","sources":["../../../../libs/nest-crud/src/decorators/entity-extension.decorator.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACpD,OAAO,UAAU,MAAiC;QAC9C,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,YAAY,mBAAmB,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,uBAAuB,CAC7B,wDAAwD,MAAM,CAAC,IAAI,GAAG,EACtE,4BAA4B,SAAS,kEAAkE,EACvG,oFAAoF,CACvF,CAAC;QACN,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC;QAE9C,oDAAoD;QACpD,MAAM,iBAAiB,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CACnD,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,CACnF,CAAC;QAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,uBAAuB,CAC7B,4BAA4B,EAC5B,6DAA6D,SAAS,KAAK,EAC3E,kGAAkG,CACrG,CAAC;QACN,CAAC;QAED,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACjC,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAC/C,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,IAAI,UAAU,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAClG,CAAC;YAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,uBAAuB,CAC7B,4BAA4B,EAC5B,oDAAoD,QAAQ,CAAC,YAAY,iCAAiC,SAAS,KAAK,EACxH,6FAA6F,CAChG,CAAC;YACN,CAAC;YAED,mCAAmC;YACnC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBAC7B,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAC3C,YAAY,CAAC,mBAAmB,EAChC,MAAM,CAAC,SAAiB,EACxB,UAAU,CAAC,YAAY,CACP,CAAC;gBAErB,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACvB,MAAM,IAAI,uBAAuB,CAC7B,oBAAoB,EACpB,sDAAsD,UAAU,CAAC,YAAY,iCAAiC,SAAS,KAAK,EAC5H,uEAAuE,CAC1E,CAAC;gBACN,CAAC;gBAED,IACI,UAAU,CAAC,wBAAwB;oBACnC,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAChE,CAAC;oBACC,MAAM,IAAI,uBAAuB,CAC7B,oCAAoC,UAAU,CAAC,wBAAwB,GAAG,EAC1E,yDAAyD,EACzD,uEAAuE,CAC1E,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,2BAA2B;QAC3B,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;AACN,CAAC;AAED,iDAAiD;AACjD,qFAAqF"}
|