@goatlab/fluent 0.6.23 → 0.7.0

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 (125) hide show
  1. package/dist/BaseConnector.d.ts +49 -82
  2. package/dist/BaseConnector.js +219 -319
  3. package/dist/Fluent.d.ts +2 -21
  4. package/dist/Fluent.js +0 -33
  5. package/dist/FluentEntity.d.ts +7 -0
  6. package/dist/FluentEntity.js +28 -0
  7. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +34 -27
  8. package/dist/TypeOrmConnector/TypeOrmConnector.js +599 -343
  9. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +182 -48
  10. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +103 -3
  11. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +30 -13
  12. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.d.ts +5 -0
  13. package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.js +17 -0
  14. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.d.ts +5 -0
  15. package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.js +17 -0
  16. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +3 -3
  17. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +8 -3
  18. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -1
  19. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +42 -16
  20. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +43 -0
  21. package/dist/TypeOrmConnector/test/basic/goat.entity.js +19 -8
  22. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.d.ts +5 -0
  23. package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.js +16 -0
  24. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.d.ts +5 -0
  25. package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.js +16 -0
  26. package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +3 -4
  27. package/dist/TypeOrmConnector/test/basic/goat.repository.js +7 -3
  28. package/dist/TypeOrmConnector/test/dbEntities.d.ts +6 -6
  29. package/dist/TypeOrmConnector/test/docker/docker.d.ts +35 -0
  30. package/dist/TypeOrmConnector/test/docker/docker.js +149 -0
  31. package/dist/TypeOrmConnector/test/docker/mysql.d.ts +17 -0
  32. package/dist/TypeOrmConnector/test/docker/mysql.js +132 -0
  33. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +8 -0
  34. package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +23 -0
  35. package/dist/TypeOrmConnector/test/mongo/mongo.memory.d.ts +4 -0
  36. package/dist/TypeOrmConnector/test/mongo/mongo.memory.js +43 -0
  37. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.d.ts +2 -0
  38. package/dist/TypeOrmConnector/test/mongo/mongoDatasource.js +12 -0
  39. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +8 -0
  40. package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +23 -0
  41. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.d.ts +6 -0
  42. package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.js +17 -0
  43. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +10 -0
  44. package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +31 -0
  45. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +6 -0
  46. package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +17 -0
  47. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.d.ts +2 -0
  48. package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +16 -0
  49. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +8 -0
  50. package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +23 -0
  51. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.d.ts +6 -0
  52. package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.js +17 -0
  53. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +10 -0
  54. package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +32 -0
  55. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +1 -0
  56. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +13 -5
  57. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +3 -3
  58. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +11 -4
  59. package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +38 -0
  60. package/dist/TypeOrmConnector/test/relations/car/car.schema.js +14 -0
  61. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +85 -32
  62. package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +35 -0
  63. package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +16 -0
  64. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +4 -4
  65. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +3 -3
  66. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +12 -4
  67. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +2 -2
  68. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +4 -4
  69. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.d.ts +15 -0
  70. package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.js +9 -0
  71. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +3 -3
  72. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +8 -3
  73. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +10 -10
  74. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +3 -3
  75. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +17 -5
  76. package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +150 -0
  77. package/dist/TypeOrmConnector/test/relations/user/user.schema.js +18 -0
  78. package/dist/TypeOrmConnector/test/{memoryDataSource.d.ts → sqlite/memoryDataSource.d.ts} +0 -0
  79. package/dist/TypeOrmConnector/test/{memoryDataSource.js → sqlite/memoryDataSource.js} +1 -1
  80. package/dist/core/Loopback/build-schema.js +1 -3
  81. package/dist/core/Loopback/json-to-schema.js +6 -6
  82. package/dist/core/Loopback/mapValues.d.ts +2 -0
  83. package/dist/core/Loopback/mapValues.js +835 -0
  84. package/dist/core/Loopback/query.js +6 -4
  85. package/dist/core/Loopback/type-resolver.d.ts +1 -1
  86. package/dist/core/Nestjs/applyDecorators.d.ts +1 -1
  87. package/dist/core/Nestjs/types/common.js +3 -1
  88. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +1 -1
  89. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +9 -4
  90. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +1 -1
  91. package/dist/core/Nestjs/types/decorators/field.decorator.js +6 -6
  92. package/dist/core/Nestjs/types/lazy-metadata.storage.js +3 -3
  93. package/dist/core/Nestjs/types/omit-type.js +6 -2
  94. package/dist/core/Nestjs/types/reflection.utils.d.ts +1 -1
  95. package/dist/core/Nestjs/types/reflection.utils.js +9 -2
  96. package/dist/core/Nestjs/types/type-metadata.storage.js +4 -4
  97. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +1 -11
  98. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +2 -2
  99. package/dist/decorators.d.ts +25 -21
  100. package/dist/decorators.js +76 -70
  101. package/dist/index.d.ts +6 -7
  102. package/dist/index.js +5 -7
  103. package/dist/loadRelations.js +108 -68
  104. package/dist/tsconfig.tsbuildinfo +1 -1
  105. package/dist/types.d.ts +104 -60
  106. package/dist/types.js +20 -0
  107. package/package.json +11 -101
  108. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.d.ts +0 -1
  109. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +0 -52
  110. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.d.ts +0 -1
  111. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +0 -55
  112. package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +0 -8
  113. package/dist/TypeOrmConnector/test/basic/goat.dto.js +0 -18
  114. package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +0 -5
  115. package/dist/TypeOrmConnector/test/relations/car/car.dto.js +0 -12
  116. package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +0 -5
  117. package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +0 -12
  118. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +0 -5
  119. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +0 -12
  120. package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +0 -5
  121. package/dist/TypeOrmConnector/test/relations/user/user.dto.js +0 -12
  122. package/dist/core/dtos/access.dto.d.ts +0 -4
  123. package/dist/core/dtos/access.dto.js +0 -21
  124. package/dist/core/dtos/pagination.dto.d.ts +0 -13
  125. package/dist/core/dtos/pagination.dto.js +0 -62
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleRepository = void 0;
4
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
5
+ const role_schema_1 = require("../relations/roles/role.schema");
6
+ const roles_user_mongo_repository_1 = require("./roles_user.mongo.repository");
7
+ const roles_entity_1 = require("../relations/roles/roles.entity");
8
+ const mongoDatasource_1 = require("./mongoDatasource");
9
+ const user_mongo_repository_1 = require("./user.mongo.repository");
10
+ class RoleRepository extends TypeOrmConnector_1.TypeOrmConnector {
11
+ constructor() {
12
+ super({
13
+ entity: roles_entity_1.RoleEntity,
14
+ dataSource: mongoDatasource_1.MongoDataSource,
15
+ inputSchema: role_schema_1.RoleEntitySchema
16
+ });
17
+ this.users = () => this.belongsToMany({
18
+ repository: user_mongo_repository_1.UserRepository,
19
+ pivot: roles_user_mongo_repository_1.RoleUsersRepository
20
+ });
21
+ }
22
+ }
23
+ exports.RoleRepository = RoleRepository;
@@ -0,0 +1,6 @@
1
+ import { RolesUser } from '../relations/roles/roles_user.entity';
2
+ import { RolesUserInputSchema } from '../relations/roles/roles_user.schema';
3
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
4
+ export declare class RoleUsersRepository extends TypeOrmConnector<RolesUser, RolesUserInputSchema> {
5
+ constructor();
6
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleUsersRepository = void 0;
4
+ const roles_user_entity_1 = require("../relations/roles/roles_user.entity");
5
+ const roles_user_schema_1 = require("../relations/roles/roles_user.schema");
6
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
7
+ const mongoDatasource_1 = require("./mongoDatasource");
8
+ class RoleUsersRepository extends TypeOrmConnector_1.TypeOrmConnector {
9
+ constructor() {
10
+ super({
11
+ entity: roles_user_entity_1.RolesUser,
12
+ dataSource: mongoDatasource_1.MongoDataSource,
13
+ inputSchema: roles_user_schema_1.RolesUserSchema
14
+ });
15
+ }
16
+ }
17
+ exports.RoleUsersRepository = RoleUsersRepository;
@@ -0,0 +1,10 @@
1
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
2
+ import { UsersEntity } from '../relations/user/user.entity';
3
+ import { UsersEntityInputSchema } from '../relations/user/user.schema';
4
+ import { CarsRepository } from './car.mongo.repository';
5
+ import { RoleRepository } from './roles.mongo.repository';
6
+ export declare class UserRepository extends TypeOrmConnector<UsersEntity, UsersEntityInputSchema> {
7
+ constructor();
8
+ cars: () => CarsRepository;
9
+ roles: () => RoleRepository;
10
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRepository = void 0;
4
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
5
+ const car_entity_1 = require("../relations/car/car.entity");
6
+ const user_entity_1 = require("../relations/user/user.entity");
7
+ const user_schema_1 = require("../relations/user/user.schema");
8
+ const car_mongo_repository_1 = require("./car.mongo.repository");
9
+ const mongoDatasource_1 = require("./mongoDatasource");
10
+ const roles_mongo_repository_1 = require("./roles.mongo.repository");
11
+ const roles_user_mongo_repository_1 = require("./roles_user.mongo.repository");
12
+ class UserRepository extends TypeOrmConnector_1.TypeOrmConnector {
13
+ constructor() {
14
+ super({
15
+ entity: user_entity_1.UsersEntity,
16
+ dataSource: mongoDatasource_1.MongoDataSource,
17
+ inputSchema: user_schema_1.UsersEntitySchema
18
+ });
19
+ this.cars = () => {
20
+ return this.hasMany({
21
+ repository: car_mongo_repository_1.CarsRepository,
22
+ model: car_entity_1.CarsEntity
23
+ });
24
+ };
25
+ this.roles = () => this.belongsToMany({
26
+ repository: roles_mongo_repository_1.RoleRepository,
27
+ pivot: roles_user_mongo_repository_1.RoleUsersRepository
28
+ });
29
+ }
30
+ }
31
+ exports.UserRepository = UserRepository;
@@ -0,0 +1,6 @@
1
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
2
+ import { CarsEntity } from '../relations/car/car.entity';
3
+ import { CarsEntityInputSchema } from '../relations/car/car.schema';
4
+ export declare class CarsRepository extends TypeOrmConnector<CarsEntity, CarsEntityInputSchema> {
5
+ constructor();
6
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarsRepository = void 0;
4
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
5
+ const car_entity_1 = require("../relations/car/car.entity");
6
+ const car_schema_1 = require("../relations/car/car.schema");
7
+ const mysqlDataSource_1 = require("./mysqlDataSource");
8
+ class CarsRepository extends TypeOrmConnector_1.TypeOrmConnector {
9
+ constructor() {
10
+ super({
11
+ entity: car_entity_1.CarsEntity,
12
+ dataSource: mysqlDataSource_1.MYSQLDataSource,
13
+ inputSchema: car_schema_1.CarsEntitySchema
14
+ });
15
+ }
16
+ }
17
+ exports.CarsRepository = CarsRepository;
@@ -0,0 +1,2 @@
1
+ import { DataSource } from 'typeorm';
2
+ export declare const MYSQLDataSource: DataSource;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MYSQLDataSource = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const dbEntities_1 = require("../dbEntities");
6
+ exports.MYSQLDataSource = new typeorm_1.DataSource({
7
+ type: 'mysql',
8
+ database: 'test-db',
9
+ username: 'root',
10
+ password: 'password',
11
+ host: '127.0.0.1',
12
+ port: 3307,
13
+ entities: dbEntities_1.dbEntities,
14
+ synchronize: true,
15
+ logging: false
16
+ });
@@ -0,0 +1,8 @@
1
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
2
+ import { RoleEntityInputSchema } from '../relations/roles/role.schema';
3
+ import { RoleEntity } from '../relations/roles/roles.entity';
4
+ import { UserRepository } from './user.mysql.repository';
5
+ export declare class RoleRepository extends TypeOrmConnector<RoleEntity, RoleEntityInputSchema> {
6
+ constructor();
7
+ users: () => UserRepository;
8
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleRepository = void 0;
4
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
5
+ const role_schema_1 = require("../relations/roles/role.schema");
6
+ const roles_entity_1 = require("../relations/roles/roles.entity");
7
+ const mysqlDataSource_1 = require("./mysqlDataSource");
8
+ const user_mysql_repository_1 = require("./user.mysql.repository");
9
+ const roles_user_mysql_repository_1 = require("./roles_user.mysql.repository");
10
+ class RoleRepository extends TypeOrmConnector_1.TypeOrmConnector {
11
+ constructor() {
12
+ super({
13
+ entity: roles_entity_1.RoleEntity,
14
+ dataSource: mysqlDataSource_1.MYSQLDataSource,
15
+ inputSchema: role_schema_1.RoleEntitySchema
16
+ });
17
+ this.users = () => this.belongsToMany({
18
+ repository: user_mysql_repository_1.UserRepository,
19
+ pivot: roles_user_mysql_repository_1.RoleUsersRepository
20
+ });
21
+ }
22
+ }
23
+ exports.RoleRepository = RoleRepository;
@@ -0,0 +1,6 @@
1
+ import { RolesUser } from '../relations/roles/roles_user.entity';
2
+ import { RolesUserInputSchema } from '../relations/roles/roles_user.schema';
3
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
4
+ export declare class RoleUsersRepository extends TypeOrmConnector<RolesUser, RolesUserInputSchema> {
5
+ constructor();
6
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleUsersRepository = void 0;
4
+ const roles_user_entity_1 = require("../relations/roles/roles_user.entity");
5
+ const roles_user_schema_1 = require("../relations/roles/roles_user.schema");
6
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
7
+ const mysqlDataSource_1 = require("./mysqlDataSource");
8
+ class RoleUsersRepository extends TypeOrmConnector_1.TypeOrmConnector {
9
+ constructor() {
10
+ super({
11
+ entity: roles_user_entity_1.RolesUser,
12
+ dataSource: mysqlDataSource_1.MYSQLDataSource,
13
+ inputSchema: roles_user_schema_1.RolesUserSchema
14
+ });
15
+ }
16
+ }
17
+ exports.RoleUsersRepository = RoleUsersRepository;
@@ -0,0 +1,10 @@
1
+ import { TypeOrmConnector } from '../../TypeOrmConnector';
2
+ import { UsersEntity } from '../relations/user/user.entity';
3
+ import { UsersEntityInputSchema } from '../relations/user/user.schema';
4
+ import { CarsRepository } from './car.mysql.repository';
5
+ import { RoleRepository } from './roles.mysql.repository';
6
+ export declare class UserRepository extends TypeOrmConnector<UsersEntity, UsersEntityInputSchema> {
7
+ constructor();
8
+ cars: () => CarsRepository;
9
+ roles: () => RoleRepository;
10
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRepository = void 0;
4
+ const TypeOrmConnector_1 = require("../../TypeOrmConnector");
5
+ const car_entity_1 = require("../relations/car/car.entity");
6
+ const user_entity_1 = require("../relations/user/user.entity");
7
+ const user_schema_1 = require("../relations/user/user.schema");
8
+ const car_mysql_repository_1 = require("./car.mysql.repository");
9
+ const mysqlDataSource_1 = require("./mysqlDataSource");
10
+ const roles_mysql_repository_1 = require("./roles.mysql.repository");
11
+ const roles_user_mysql_repository_1 = require("./roles_user.mysql.repository");
12
+ class UserRepository extends TypeOrmConnector_1.TypeOrmConnector {
13
+ constructor() {
14
+ super({
15
+ entity: user_entity_1.UsersEntity,
16
+ dataSource: mysqlDataSource_1.MYSQLDataSource,
17
+ inputSchema: user_schema_1.UsersEntitySchema
18
+ });
19
+ this.cars = () => {
20
+ return this.hasMany({
21
+ repository: car_mysql_repository_1.CarsRepository,
22
+ model: car_entity_1.CarsEntity,
23
+ relationKey: { user: true }
24
+ });
25
+ };
26
+ this.roles = () => this.belongsToMany({
27
+ repository: roles_mysql_repository_1.RoleRepository,
28
+ pivot: roles_user_mysql_repository_1.RoleUsersRepository
29
+ });
30
+ }
31
+ }
32
+ exports.UserRepository = UserRepository;
@@ -4,4 +4,5 @@ export declare class CarsEntity {
4
4
  name: string;
5
5
  userId?: string;
6
6
  user?: UsersEntity;
7
+ anotherRelation?: UsersEntity;
7
8
  }
@@ -7,26 +7,34 @@ const user_entity_1 = require("../user/user.entity");
7
7
  let CarsEntity = class CarsEntity {
8
8
  };
9
9
  tslib_1.__decorate([
10
- decorators_1.Decorators.id(),
10
+ decorators_1.f.id(),
11
11
  tslib_1.__metadata("design:type", String)
12
12
  ], CarsEntity.prototype, "id", void 0);
13
13
  tslib_1.__decorate([
14
- decorators_1.Decorators.property({ required: true }),
14
+ decorators_1.f.property({ required: true }),
15
15
  tslib_1.__metadata("design:type", String)
16
16
  ], CarsEntity.prototype, "name", void 0);
17
17
  tslib_1.__decorate([
18
- decorators_1.Decorators.property({ required: true }),
18
+ decorators_1.f.property({ required: true }),
19
19
  tslib_1.__metadata("design:type", String)
20
20
  ], CarsEntity.prototype, "userId", void 0);
21
21
  tslib_1.__decorate([
22
- decorators_1.Decorators.belongsTo({
22
+ decorators_1.f.belongsTo({
23
23
  entity: () => user_entity_1.UsersEntity,
24
24
  inverse: user => user.cars,
25
25
  pivotColumnName: 'userId'
26
26
  }),
27
27
  tslib_1.__metadata("design:type", user_entity_1.UsersEntity)
28
28
  ], CarsEntity.prototype, "user", void 0);
29
+ tslib_1.__decorate([
30
+ decorators_1.f.belongsTo({
31
+ entity: () => user_entity_1.UsersEntity,
32
+ inverse: user => user.cars,
33
+ pivotColumnName: 'userId'
34
+ }),
35
+ tslib_1.__metadata("design:type", user_entity_1.UsersEntity)
36
+ ], CarsEntity.prototype, "anotherRelation", void 0);
29
37
  CarsEntity = tslib_1.__decorate([
30
- decorators_1.Decorators.entity('cars')
38
+ decorators_1.f.entity('cars')
31
39
  ], CarsEntity);
32
40
  exports.CarsEntity = CarsEntity;
@@ -1,8 +1,8 @@
1
1
  import { CarsEntity } from './car.entity';
2
- import { CarsEntityIn } from './car.dto';
2
+ import { CarsEntityInputSchema } from './car.schema';
3
3
  import { TypeOrmConnector } from '../../../TypeOrmConnector';
4
4
  import { UserRepository } from '../user/user.repositoryTypeOrm';
5
- export declare class CarsRepository extends TypeOrmConnector<CarsEntity, CarsEntityIn> {
6
- constructor(relationQuery?: any);
5
+ export declare class CarsRepository extends TypeOrmConnector<CarsEntity, CarsEntityInputSchema> {
6
+ constructor();
7
7
  user: () => UserRepository;
8
8
  }
@@ -2,13 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CarsRepository = void 0;
4
4
  const car_entity_1 = require("./car.entity");
5
+ const car_schema_1 = require("./car.schema");
5
6
  const TypeOrmConnector_1 = require("../../../TypeOrmConnector");
6
7
  const user_repositoryTypeOrm_1 = require("../user/user.repositoryTypeOrm");
7
- const memoryDataSource_1 = require("../../memoryDataSource");
8
+ const memoryDataSource_1 = require("../../sqlite/memoryDataSource");
8
9
  class CarsRepository extends TypeOrmConnector_1.TypeOrmConnector {
9
- constructor(relationQuery) {
10
- super(car_entity_1.CarsEntity, memoryDataSource_1.MemoryDataSource, relationQuery);
11
- this.user = () => this.belongsTo(user_repositoryTypeOrm_1.UserRepository, 'user');
10
+ constructor() {
11
+ super({
12
+ entity: car_entity_1.CarsEntity,
13
+ dataSource: memoryDataSource_1.MemoryDataSource,
14
+ inputSchema: car_schema_1.CarsEntitySchema
15
+ });
16
+ this.user = () => this.belongsTo({
17
+ repository: user_repositoryTypeOrm_1.UserRepository
18
+ });
12
19
  }
13
20
  }
14
21
  exports.CarsRepository = CarsRepository;
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ export declare const CarsEntitySchema: z.ZodObject<{
3
+ id: z.ZodOptional<z.ZodString>;
4
+ name: z.ZodString;
5
+ userId: z.ZodOptional<z.ZodString>;
6
+ user: z.ZodOptional<z.ZodObject<{
7
+ id: z.ZodOptional<z.ZodString>;
8
+ name: z.ZodString;
9
+ age: z.ZodOptional<z.ZodNumber>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ id?: string | undefined;
12
+ age?: number | undefined;
13
+ name: string;
14
+ }, {
15
+ id?: string | undefined;
16
+ age?: number | undefined;
17
+ name: string;
18
+ }>>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ id?: string | undefined;
21
+ userId?: string | undefined;
22
+ user?: {
23
+ id?: string | undefined;
24
+ age?: number | undefined;
25
+ name: string;
26
+ } | undefined;
27
+ name: string;
28
+ }, {
29
+ id?: string | undefined;
30
+ userId?: string | undefined;
31
+ user?: {
32
+ id?: string | undefined;
33
+ age?: number | undefined;
34
+ name: string;
35
+ } | undefined;
36
+ name: string;
37
+ }>;
38
+ export declare type CarsEntityInputSchema = z.infer<typeof CarsEntitySchema>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarsEntitySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.CarsEntitySchema = zod_1.z.object({
6
+ id: zod_1.z.string().optional(),
7
+ name: zod_1.z.string(),
8
+ userId: zod_1.z.string().optional(),
9
+ user: zod_1.z.object({
10
+ id: zod_1.z.string().optional(),
11
+ name: zod_1.z.string(),
12
+ age: zod_1.z.number().optional(),
13
+ }).optional()
14
+ });
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.relationsTestSuite = void 0;
4
+ const js_utils_1 = require("@goatlab/js-utils");
4
5
  let Model;
5
6
  let BelongsToModel;
6
7
  let ManyToManyModel;
@@ -10,56 +11,101 @@ const relationsTestSuite = (ModelF, BelongsToModelF, ManyToManyModelF) => {
10
11
  BelongsToModel = new BelongsToModelF();
11
12
  ManyToManyModel = new ManyToManyModelF();
12
13
  });
13
- test('Attach - OneToMany - Should insert data', async () => {
14
+ test('requireById - Should return valid Object', async () => {
14
15
  const insertedUser = await Model.insert({
15
16
  name: 'testUser',
16
17
  age: 20
17
18
  });
18
19
  expect(typeof insertedUser.id).toBe('string');
19
- const user = await Model.where(keys => keys.id, '=', insertedUser.id).load();
20
- const cars = await user.cars().attach({ name: 'Another new car' });
20
+ const findById = await Model.requireById(insertedUser.id);
21
+ expect(findById.id).toBe(insertedUser.id);
22
+ });
23
+ test('requireById - Should fail if not found', async () => {
24
+ const insertedUser = await Model.insert({
25
+ name: 'testUser',
26
+ age: 20
27
+ });
28
+ const [error, found] = await js_utils_1.Promises.try(Model.requireById('62ed01e4219a6ab760ae5c50'));
29
+ expect(error?.message).toBe('Object 62ed01e4219a6ab760ae5c50 not found');
30
+ });
31
+ test('loadFirst - Should return a cloned class', async () => {
32
+ const insertedUser = await Model.insert({
33
+ name: 'testUser',
34
+ age: 20
35
+ });
36
+ expect(typeof insertedUser.id).toBe('string');
37
+ const user = Model.loadFirst({
38
+ where: {
39
+ id: insertedUser.id
40
+ }
41
+ });
42
+ expect(Array.isArray(user)).toBe(false);
43
+ expect(typeof user).toBe('object');
44
+ expect(typeof user.associate).toBe('function');
45
+ });
46
+ test('Associate - OneToMany - Should insert data', async () => {
47
+ const insertedUser = await Model.insert({
48
+ name: 'testUser',
49
+ age: 20
50
+ });
51
+ expect(typeof insertedUser.id).toBe('string');
52
+ const user = await Model.loadById(insertedUser.id);
53
+ const cars = await user.cars().associate({ name: 'Another new car' });
21
54
  expect(Array.isArray(cars)).toBe(true);
22
55
  expect(cars[0].name).toBe('Another new car');
56
+ expect(cars[0].userId).toBe(insertedUser.id);
23
57
  });
24
- test('Query related model - OneToMany', async () => {
58
+ test('Query related model - OneToMany (belongsToMany)', async () => {
25
59
  const insertedUser = await Model.insert({
26
60
  name: 'testUser',
27
61
  age: 20
28
62
  });
29
63
  expect(typeof insertedUser.id).toBe('string');
30
- const user1 = await Model.where(keys => keys.id, '=', insertedUser.id).load();
31
- const cars = await user1.cars().attach({ name: 'My new car' });
64
+ const user1 = await Model.loadById(insertedUser.id);
65
+ const cars = await user1.cars().associate({ name: 'My new car' });
32
66
  expect(Array.isArray(cars)).toBe(true);
33
- const searchUserWithRelation = await Model.where(keys => keys.id, '=', insertedUser.id)
34
- .with({ cars: BelongsToModelF })
35
- .get();
36
- expect(Array.isArray(searchUserWithRelation[0].cars)).toBe(true);
37
- expect(searchUserWithRelation[0].cars.length > 0).toBe(true);
67
+ const searchUserWithRelation = await Model.findMany({
68
+ where: { id: insertedUser.id },
69
+ include: {
70
+ cars: true
71
+ }
72
+ });
73
+ const firstResult = searchUserWithRelation[0];
74
+ expect(Array.isArray(searchUserWithRelation)).toBe(true);
75
+ expect(Array.isArray(firstResult.cars)).toBe(true);
76
+ expect(firstResult.cars.length > 0).toBe(true);
77
+ expect(firstResult.cars[0].userId).toBe(insertedUser.id);
38
78
  const searchCar = await user1
39
79
  .cars()
40
- .where(keys => keys.name, '=', 'My new car')
41
- .get();
80
+ .findMany({ where: { name: 'My new car' } });
42
81
  expect(Array.isArray(searchCar)).toBe(true);
43
82
  expect(searchCar.length > 0).toBe(true);
44
83
  const searchCar2 = await user1
45
84
  .cars()
46
- .where(keys => keys.name, '=', 'My.......')
47
- .get();
85
+ .findMany({ where: { name: 'My.......' } });
48
86
  expect(Array.isArray(searchCar2)).toBe(true);
49
87
  expect(searchCar2.length === 0).toBe(true);
50
88
  });
51
- test('Query related model - BelongTo', async () => {
89
+ test('Query related model - ManyToOne (BelongsTo)', async () => {
52
90
  const insertedUser = await Model.insert({
53
91
  name: 'testUser',
54
92
  age: 20
55
93
  });
56
94
  expect(typeof insertedUser.id).toBe('string');
57
- const user1 = await Model.where(keys => keys.id, '=', insertedUser.id).load();
58
- await user1.cars().attach({ name: 'My new car' });
59
- const results = await BelongsToModel.with({ user: ModelF }).get();
95
+ const user1 = await Model.loadById(insertedUser.id);
96
+ await user1.cars().associate({ name: 'My new car' });
97
+ const results = await BelongsToModel.findMany({
98
+ where: {
99
+ userId: insertedUser.id
100
+ },
101
+ include: {
102
+ user: true
103
+ }
104
+ });
60
105
  expect(Array.isArray(results)).toBe(true);
61
106
  expect(results.length > 0).toBe(true);
62
- expect(typeof results[0].user.name).toBe('string');
107
+ expect(typeof results[0].user?.name).toBe('string');
108
+ expect(results[0].user['id']).toBe(insertedUser.id);
63
109
  });
64
110
  test('Query related model - ManyToMany', async () => {
65
111
  const insertedUser = await Model.insert({
@@ -70,23 +116,30 @@ const relationsTestSuite = (ModelF, BelongsToModelF, ManyToManyModelF) => {
70
116
  const adminRole = await ManyToManyModel.insert({
71
117
  name: 'Administrator'
72
118
  });
73
- const user = await Model.where(keys => keys.id, '=', insertedUser.id).load();
74
- const associated = await user.roles().associate(adminRole.id);
119
+ const user = await Model.loadById(insertedUser.id);
120
+ const associated = await user.roles().attach(adminRole.id);
75
121
  expect(associated[0].userId).toBe(insertedUser.id);
76
122
  expect(associated[0].roleId).toBe(adminRole.id);
77
- const searchUserWithRelation = await Model.where(keys => keys.id, '=', insertedUser.id)
78
- .with({
79
- roles: ManyToManyModelF
80
- })
81
- .get();
123
+ const searchUserWithRelation = await Model.findMany({
124
+ where: {
125
+ id: insertedUser.id
126
+ },
127
+ include: {
128
+ roles: true
129
+ }
130
+ });
82
131
  expect(Array.isArray(searchUserWithRelation[0].roles)).toBe(true);
83
132
  expect(searchUserWithRelation[0].roles.length > 0).toBe(true);
84
133
  expect(typeof searchUserWithRelation[0].roles[0].name).toBe('string');
85
- const roles = await ManyToManyModel.where(keys => keys.name, '=', 'Administrator')
86
- .with({
87
- users: ModelF
88
- })
89
- .get();
134
+ expect(searchUserWithRelation[0].roles[0].id).toBe(adminRole.id);
135
+ const roles = await ManyToManyModel.findMany({
136
+ where: {
137
+ name: 'Administrator'
138
+ },
139
+ include: {
140
+ users: true
141
+ }
142
+ });
90
143
  expect(Array.isArray(roles)).toBe(true);
91
144
  expect(roles.length > 0).toBe(true);
92
145
  expect(typeof roles[0].users[0].name).toBe('string');
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ export declare const RoleEntitySchema: z.ZodObject<{
3
+ id: z.ZodOptional<z.ZodString>;
4
+ name: z.ZodString;
5
+ users: z.ZodOptional<z.ZodArray<z.ZodObject<{
6
+ id: z.ZodOptional<z.ZodString>;
7
+ name: z.ZodString;
8
+ age: z.ZodOptional<z.ZodNumber>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ id?: string | undefined;
11
+ age?: number | undefined;
12
+ name: string;
13
+ }, {
14
+ id?: string | undefined;
15
+ age?: number | undefined;
16
+ name: string;
17
+ }>, "many">>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ id?: string | undefined;
20
+ users?: {
21
+ id?: string | undefined;
22
+ age?: number | undefined;
23
+ name: string;
24
+ }[] | undefined;
25
+ name: string;
26
+ }, {
27
+ id?: string | undefined;
28
+ users?: {
29
+ id?: string | undefined;
30
+ age?: number | undefined;
31
+ name: string;
32
+ }[] | undefined;
33
+ name: string;
34
+ }>;
35
+ export declare type RoleEntityInputSchema = z.infer<typeof RoleEntitySchema>;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoleEntitySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.RoleEntitySchema = zod_1.z.object({
6
+ id: zod_1.z.string().optional(),
7
+ name: zod_1.z.string(),
8
+ users: zod_1.z
9
+ .object({
10
+ id: zod_1.z.string().optional(),
11
+ name: zod_1.z.string(),
12
+ age: zod_1.z.number().optional()
13
+ })
14
+ .array()
15
+ .optional()
16
+ });
@@ -7,15 +7,15 @@ const user_entity_1 = require("../user/user.entity");
7
7
  let RoleEntity = class RoleEntity {
8
8
  };
9
9
  tslib_1.__decorate([
10
- decorators_1.Decorators.id(),
10
+ decorators_1.f.id(),
11
11
  tslib_1.__metadata("design:type", String)
12
12
  ], RoleEntity.prototype, "id", void 0);
13
13
  tslib_1.__decorate([
14
- decorators_1.Decorators.property({ required: true }),
14
+ decorators_1.f.property({ required: true }),
15
15
  tslib_1.__metadata("design:type", String)
16
16
  ], RoleEntity.prototype, "name", void 0);
17
17
  tslib_1.__decorate([
18
- decorators_1.Decorators.belongsToMany({
18
+ decorators_1.f.belongsToMany({
19
19
  entity: () => user_entity_1.UsersEntity,
20
20
  joinTableName: 'roles_users',
21
21
  foreignKey: 'roleId',
@@ -24,6 +24,6 @@ tslib_1.__decorate([
24
24
  tslib_1.__metadata("design:type", Array)
25
25
  ], RoleEntity.prototype, "users", void 0);
26
26
  RoleEntity = tslib_1.__decorate([
27
- decorators_1.Decorators.entity('roles')
27
+ decorators_1.f.entity('roles')
28
28
  ], RoleEntity);
29
29
  exports.RoleEntity = RoleEntity;