@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.
- package/dist/BaseConnector.d.ts +49 -82
- package/dist/BaseConnector.js +219 -319
- package/dist/Fluent.d.ts +2 -21
- package/dist/Fluent.js +0 -33
- package/dist/FluentEntity.d.ts +7 -0
- package/dist/FluentEntity.js +28 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +34 -27
- package/dist/TypeOrmConnector/TypeOrmConnector.js +599 -343
- package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +182 -48
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +103 -3
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +30 -13
- package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.d.ts +5 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.mongo.repository.js +17 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.d.ts +5 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.mysql.repository.js +17 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +3 -3
- package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +8 -3
- package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -1
- package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +42 -16
- package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +43 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.js +19 -8
- package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.d.ts +5 -0
- package/dist/TypeOrmConnector/test/basic/goat.mongo.repository.js +16 -0
- package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.d.ts +5 -0
- package/dist/TypeOrmConnector/test/basic/goat.mysql.repository.js +16 -0
- package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +3 -4
- package/dist/TypeOrmConnector/test/basic/goat.repository.js +7 -3
- package/dist/TypeOrmConnector/test/dbEntities.d.ts +6 -6
- package/dist/TypeOrmConnector/test/docker/docker.d.ts +35 -0
- package/dist/TypeOrmConnector/test/docker/docker.js +149 -0
- package/dist/TypeOrmConnector/test/docker/mysql.d.ts +17 -0
- package/dist/TypeOrmConnector/test/docker/mysql.js +132 -0
- package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.d.ts +8 -0
- package/dist/TypeOrmConnector/test/mongo/car.mongo.repository.js +23 -0
- package/dist/TypeOrmConnector/test/mongo/mongo.memory.d.ts +4 -0
- package/dist/TypeOrmConnector/test/mongo/mongo.memory.js +43 -0
- package/dist/TypeOrmConnector/test/mongo/mongoDatasource.d.ts +2 -0
- package/dist/TypeOrmConnector/test/mongo/mongoDatasource.js +12 -0
- package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.d.ts +8 -0
- package/dist/TypeOrmConnector/test/mongo/roles.mongo.repository.js +23 -0
- package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.d.ts +6 -0
- package/dist/TypeOrmConnector/test/mongo/roles_user.mongo.repository.js +17 -0
- package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.d.ts +10 -0
- package/dist/TypeOrmConnector/test/mongo/user.mongo.repository.js +31 -0
- package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.d.ts +6 -0
- package/dist/TypeOrmConnector/test/mysql/car.mysql.repository.js +17 -0
- package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.d.ts +2 -0
- package/dist/TypeOrmConnector/test/mysql/mysqlDataSource.js +16 -0
- package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.d.ts +8 -0
- package/dist/TypeOrmConnector/test/mysql/roles.mysql.repository.js +23 -0
- package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.d.ts +6 -0
- package/dist/TypeOrmConnector/test/mysql/roles_user.mysql.repository.js +17 -0
- package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.d.ts +10 -0
- package/dist/TypeOrmConnector/test/mysql/user.mysql.repository.js +32 -0
- package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +1 -0
- package/dist/TypeOrmConnector/test/relations/car/car.entity.js +13 -5
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +3 -3
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +11 -4
- package/dist/TypeOrmConnector/test/relations/car/car.schema.d.ts +38 -0
- package/dist/TypeOrmConnector/test/relations/car/car.schema.js +14 -0
- package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +85 -32
- package/dist/TypeOrmConnector/test/relations/roles/role.schema.d.ts +35 -0
- package/dist/TypeOrmConnector/test/relations/roles/role.schema.js +16 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +4 -4
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +3 -3
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +12 -4
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +2 -2
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +4 -4
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.d.ts +15 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.schema.js +9 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +3 -3
- package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +8 -3
- package/dist/TypeOrmConnector/test/relations/user/user.entity.js +10 -10
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +3 -3
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +17 -5
- package/dist/TypeOrmConnector/test/relations/user/user.schema.d.ts +150 -0
- package/dist/TypeOrmConnector/test/relations/user/user.schema.js +18 -0
- package/dist/TypeOrmConnector/test/{memoryDataSource.d.ts → sqlite/memoryDataSource.d.ts} +0 -0
- package/dist/TypeOrmConnector/test/{memoryDataSource.js → sqlite/memoryDataSource.js} +1 -1
- package/dist/core/Loopback/build-schema.js +1 -3
- package/dist/core/Loopback/json-to-schema.js +6 -6
- package/dist/core/Loopback/mapValues.d.ts +2 -0
- package/dist/core/Loopback/mapValues.js +835 -0
- package/dist/core/Loopback/query.js +6 -4
- package/dist/core/Loopback/type-resolver.d.ts +1 -1
- package/dist/core/Nestjs/applyDecorators.d.ts +1 -1
- package/dist/core/Nestjs/types/common.js +3 -1
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +1 -1
- package/dist/core/Nestjs/types/decorators/create-property.decorator.js +9 -4
- package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +1 -1
- package/dist/core/Nestjs/types/decorators/field.decorator.js +6 -6
- package/dist/core/Nestjs/types/lazy-metadata.storage.js +3 -3
- package/dist/core/Nestjs/types/omit-type.js +6 -2
- package/dist/core/Nestjs/types/reflection.utils.d.ts +1 -1
- package/dist/core/Nestjs/types/reflection.utils.js +9 -2
- package/dist/core/Nestjs/types/type-metadata.storage.js +4 -4
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +1 -11
- package/dist/core/Nestjs/types/utils/mapped-types.utils.js +2 -2
- package/dist/decorators.d.ts +25 -21
- package/dist/decorators.js +76 -70
- package/dist/index.d.ts +6 -7
- package/dist/index.js +5 -7
- package/dist/loadRelations.js +108 -68
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +104 -60
- package/dist/types.js +20 -0
- package/package.json +11 -101
- package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.d.ts +0 -1
- package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +0 -52
- package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.d.ts +0 -1
- package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +0 -55
- package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +0 -8
- package/dist/TypeOrmConnector/test/basic/goat.dto.js +0 -18
- package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +0 -5
- package/dist/TypeOrmConnector/test/relations/car/car.dto.js +0 -12
- package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +0 -5
- package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +0 -12
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +0 -5
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +0 -12
- package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +0 -5
- package/dist/TypeOrmConnector/test/relations/user/user.dto.js +0 -12
- package/dist/core/dtos/access.dto.d.ts +0 -4
- package/dist/core/dtos/access.dto.js +0 -21
- package/dist/core/dtos/pagination.dto.d.ts +0 -13
- 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,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;
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 {
|
|
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,
|
|
6
|
-
constructor(
|
|
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(
|
|
10
|
-
super(
|
|
11
|
-
|
|
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('
|
|
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
|
|
20
|
-
|
|
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.
|
|
31
|
-
const cars = await user1.cars().
|
|
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.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
.
|
|
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
|
-
.
|
|
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 -
|
|
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.
|
|
58
|
-
await user1.cars().
|
|
59
|
-
const results = await BelongsToModel.
|
|
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
|
|
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.
|
|
74
|
-
const associated = await user.roles().
|
|
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.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
27
|
+
decorators_1.f.entity('roles')
|
|
28
28
|
], RoleEntity);
|
|
29
29
|
exports.RoleEntity = RoleEntity;
|