@goatlab/fluent 0.6.2 → 0.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseConnector.d.ts +79 -0
- package/dist/BaseConnector.js +361 -0
- package/dist/Fluent.d.ts +26 -0
- package/dist/Fluent.js +52 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +36 -0
- package/dist/TypeOrmConnector/TypeOrmConnector.js +509 -0
- package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.d.ts +1 -0
- package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +52 -0
- package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.d.ts +1 -0
- package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +55 -0
- package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +1 -0
- package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +114 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +16 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +57 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.d.ts +5 -0
- package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +11 -0
- package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -0
- package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +45 -0
- package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +8 -0
- package/dist/TypeOrmConnector/test/basic/goat.dto.js +18 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +10 -0
- package/dist/TypeOrmConnector/test/basic/goat.entity.js +42 -0
- package/dist/TypeOrmConnector/test/basic/goat.repository.d.ts +6 -0
- package/dist/TypeOrmConnector/test/basic/goat.repository.js +11 -0
- package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
- package/dist/TypeOrmConnector/test/flock.js +25 -0
- package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +5 -0
- package/dist/TypeOrmConnector/test/relations/car/car.dto.js +12 -0
- package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +7 -0
- package/dist/TypeOrmConnector/test/relations/car/car.entity.js +32 -0
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.d.ts +8 -0
- package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +13 -0
- package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -0
- package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +93 -0
- package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +5 -0
- package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +12 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +6 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +29 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.d.ts +8 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +14 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +5 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +12 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +5 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +23 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.d.ts +6 -0
- package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +11 -0
- package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +5 -0
- package/dist/TypeOrmConnector/test/relations/user/user.dto.js +12 -0
- package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +14 -0
- package/dist/TypeOrmConnector/test/relations/user/user.entity.js +56 -0
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.d.ts +10 -0
- package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +16 -0
- package/dist/core/Loopback/build-schema.d.ts +31 -0
- package/dist/core/Loopback/build-schema.js +335 -0
- package/dist/core/Loopback/common-types.d.ts +36 -0
- package/dist/core/Loopback/common-types.js +13 -0
- package/dist/core/Loopback/json-to-schema.d.ts +6 -0
- package/dist/core/Loopback/json-to-schema.js +96 -0
- package/dist/core/Loopback/metadata.d.ts +9 -0
- package/dist/core/Loopback/metadata.js +28 -0
- package/dist/core/Loopback/model.d.ts +87 -0
- package/dist/core/Loopback/model.js +244 -0
- package/dist/core/Loopback/query.d.ts +97 -0
- package/dist/core/Loopback/query.js +290 -0
- package/dist/core/Loopback/relation.types.d.ts +45 -0
- package/dist/core/Loopback/relation.types.js +13 -0
- package/dist/core/Loopback/type-resolver.d.ts +7 -0
- package/dist/core/Loopback/type-resolver.js +34 -0
- package/dist/core/Loopback/type.d.ts +9 -0
- package/dist/core/Loopback/type.js +2 -0
- package/dist/core/Nestjs/applyDecorators.d.ts +1 -0
- package/dist/core/Nestjs/applyDecorators.js +17 -0
- package/dist/core/Nestjs/types/common.d.ts +16 -0
- package/dist/core/Nestjs/types/common.js +35 -0
- package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
- package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +7 -0
- package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
- package/dist/core/Nestjs/types/decorators/api-property.decorator.js +65 -0
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
- package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +131 -0
- package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +1 -0
- package/dist/core/Nestjs/types/decorators/args-type.decorator.js +19 -0
- package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
- package/dist/core/Nestjs/types/decorators/create-property.decorator.js +50 -0
- package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +1 -0
- package/dist/core/Nestjs/types/decorators/directive.decorator.js +36 -0
- package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +1 -0
- package/dist/core/Nestjs/types/decorators/extensions.decorator.js +25 -0
- package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +15 -0
- package/dist/core/Nestjs/types/decorators/field.decorator.js +56 -0
- package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +7 -0
- package/dist/core/Nestjs/types/decorators/input-type.decorator.js +23 -0
- package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +9 -0
- package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +27 -0
- package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
- package/dist/core/Nestjs/types/decorators/partial-type.helper.js +42 -0
- package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +9 -0
- package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/directive-parsing.error.js +9 -0
- package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +9 -0
- package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
- package/dist/core/Nestjs/types/errors/undefined-type.error.js +10 -0
- package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
- package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +10 -0
- package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
- package/dist/core/Nestjs/types/interfaces/complexity.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
- package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +235 -0
- package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
- package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
- package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +2 -0
- package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
- package/dist/core/Nestjs/types/interfaces/type-options.interface.js +2 -0
- package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
- package/dist/core/Nestjs/types/lazy-metadata.storage.js +67 -0
- package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
- package/dist/core/Nestjs/types/metadata/class.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/directive.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
- package/dist/core/Nestjs/types/metadata/enum.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/extensions.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
- package/dist/core/Nestjs/types/metadata/index.js +11 -0
- package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
- package/dist/core/Nestjs/types/metadata/interface.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
- package/dist/core/Nestjs/types/metadata/object-type.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
- package/dist/core/Nestjs/types/metadata/param.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
- package/dist/core/Nestjs/types/metadata/property.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
- package/dist/core/Nestjs/types/metadata/resolver.metadata.js +2 -0
- package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
- package/dist/core/Nestjs/types/metadata/union.metadata.js +2 -0
- package/dist/core/Nestjs/types/object-type.decorator.d.ts +8 -0
- package/dist/core/Nestjs/types/object-type.decorator.js +25 -0
- package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
- package/dist/core/Nestjs/types/omit-type.js +30 -0
- package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
- package/dist/core/Nestjs/types/reflection.utils.js +58 -0
- package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +4 -0
- package/dist/core/Nestjs/types/set-metadata.decorator.js +16 -0
- package/dist/core/Nestjs/types/type-metadata.storage.d.ts +69 -0
- package/dist/core/Nestjs/types/type-metadata.storage.js +342 -0
- package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
- package/dist/core/Nestjs/types/utils/enum.utils.js +29 -0
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +13 -0
- package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
- package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +2 -0
- package/dist/core/Nestjs/types/utils/mapped-types.utils.js +38 -0
- package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
- package/dist/core/Nestjs/types/utils/model-properties-accessor.js +36 -0
- package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
- package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
- package/dist/core/database/createConnection.d.ts +30 -0
- package/dist/core/database/createConnection.js +43 -0
- package/dist/core/database/decorators.d.ts +43 -0
- package/dist/core/database/decorators.js +98 -0
- package/dist/core/dtos/access.dto.d.ts +4 -0
- package/dist/core/dtos/access.dto.js +21 -0
- package/dist/core/dtos/pagination.dto.d.ts +13 -0
- package/dist/core/dtos/pagination.dto.js +62 -0
- package/dist/core/types.d.ts +23 -0
- package/dist/core/types.js +29 -0
- package/dist/generatorDatasource.d.ts +2 -0
- package/dist/generatorDatasource.js +12 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +0 -1
- package/dist/loadRelations.d.ts +10 -0
- package/dist/loadRelations.js +92 -0
- package/dist/outputKeys.d.ts +2 -0
- package/dist/outputKeys.js +17 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.js +2 -0
- package/package.json +4 -4
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ModelPropertiesAccessor = void 0;
|
|
4
|
+
const common_1 = require("../common");
|
|
5
|
+
require("reflect-metadata");
|
|
6
|
+
const api_property_decorator_1 = require("../decorators/api-property.decorator");
|
|
7
|
+
const type_metadata_storage_1 = require("../type-metadata.storage");
|
|
8
|
+
class ModelPropertiesAccessor {
|
|
9
|
+
getModelProperties(prototype) {
|
|
10
|
+
const properties = Reflect.getMetadata(api_property_decorator_1.DECORATORS.API_MODEL_PROPERTIES_ARRAY, prototype) ||
|
|
11
|
+
[];
|
|
12
|
+
return properties
|
|
13
|
+
.filter(common_1.isString)
|
|
14
|
+
.filter((key) => key.charAt(0) === ':' && !(0, common_1.isFunction)(prototype[key]))
|
|
15
|
+
.map((key) => key.slice(1));
|
|
16
|
+
}
|
|
17
|
+
applyMetadataFactory(prototype) {
|
|
18
|
+
const classPrototype = prototype;
|
|
19
|
+
do {
|
|
20
|
+
if (!prototype.constructor) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (!prototype.constructor[type_metadata_storage_1.METADATA_FACTORY_NAME]) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const metadata = prototype.constructor[type_metadata_storage_1.METADATA_FACTORY_NAME]();
|
|
27
|
+
const properties = Object.keys(metadata);
|
|
28
|
+
properties.forEach(key => {
|
|
29
|
+
(0, api_property_decorator_1.createApiPropertyDecorator)(metadata[key], false)(classPrototype, key);
|
|
30
|
+
});
|
|
31
|
+
} while ((prototype = Reflect.getPrototypeOf(prototype)) &&
|
|
32
|
+
prototype !== Object.prototype &&
|
|
33
|
+
prototype);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ModelPropertiesAccessor = ModelPropertiesAccessor;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyFieldDecorators = void 0;
|
|
4
|
+
const directive_decorator_1 = require("../decorators/directive.decorator");
|
|
5
|
+
const extensions_decorator_1 = require("../decorators/extensions.decorator");
|
|
6
|
+
function applyFieldDecorators(targetClass, item) {
|
|
7
|
+
if (item.extensions) {
|
|
8
|
+
(0, extensions_decorator_1.Extensions)(item.extensions)(targetClass.prototype, item.name);
|
|
9
|
+
}
|
|
10
|
+
if (item.directives?.length) {
|
|
11
|
+
item.directives.map(directive => {
|
|
12
|
+
(0, directive_decorator_1.Directive)(directive.sdl)(targetClass.prototype, item.name);
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.applyFieldDecorators = applyFieldDecorators;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
interface ConnectionOptions {
|
|
3
|
+
type: 'mongodb' | 'firebase' | 'sqlite' | 'mysql';
|
|
4
|
+
username?: string;
|
|
5
|
+
password?: string;
|
|
6
|
+
host?: string;
|
|
7
|
+
port?: number;
|
|
8
|
+
connectionName: string;
|
|
9
|
+
databaseName?: string;
|
|
10
|
+
entitiesPath?: string[] | any[];
|
|
11
|
+
synchronize?: boolean;
|
|
12
|
+
logging?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface FluentConnectionFactory {
|
|
15
|
+
type: 'mongodb' | 'firebase' | 'sqlite' | 'mysql';
|
|
16
|
+
connection?: DataSource;
|
|
17
|
+
}
|
|
18
|
+
export declare const createConnection: ({ type, username, password, host, port, databaseName, entitiesPath, connectionName, synchronize, logging }: ConnectionOptions) => {
|
|
19
|
+
provide: string;
|
|
20
|
+
useFactory: () => Promise<{
|
|
21
|
+
type: "firebase";
|
|
22
|
+
}>;
|
|
23
|
+
} | {
|
|
24
|
+
provide: string;
|
|
25
|
+
useFactory: () => Promise<{
|
|
26
|
+
type: "mysql" | "sqlite" | "mongodb";
|
|
27
|
+
connection: DataSource;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createConnection = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const createConnection = ({ type, username, password, host, port, databaseName, entitiesPath, connectionName, synchronize, logging }) => {
|
|
6
|
+
if (type === 'firebase') {
|
|
7
|
+
return {
|
|
8
|
+
provide: connectionName,
|
|
9
|
+
useFactory: async () => ({ type })
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
provide: connectionName,
|
|
14
|
+
useFactory: async () => {
|
|
15
|
+
const dataSource = new typeorm_1.DataSource({
|
|
16
|
+
name: connectionName,
|
|
17
|
+
type,
|
|
18
|
+
username,
|
|
19
|
+
password,
|
|
20
|
+
host,
|
|
21
|
+
port,
|
|
22
|
+
database: databaseName,
|
|
23
|
+
useNewUrlParser: type === 'mongodb' ? true : undefined,
|
|
24
|
+
useUnifiedTopology: type === 'mongodb' ? true : undefined,
|
|
25
|
+
entities: [...entitiesPath],
|
|
26
|
+
synchronize,
|
|
27
|
+
logging
|
|
28
|
+
});
|
|
29
|
+
if (dataSource.isInitialized) {
|
|
30
|
+
return {
|
|
31
|
+
type,
|
|
32
|
+
connection: dataSource
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const connection = await dataSource.initialize();
|
|
36
|
+
return {
|
|
37
|
+
type,
|
|
38
|
+
connection
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
exports.createConnection = createConnection;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Primitives } from '../../types';
|
|
2
|
+
interface PropertyInterface {
|
|
3
|
+
required?: boolean;
|
|
4
|
+
unique?: boolean;
|
|
5
|
+
hidden?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface EnumProperty {
|
|
8
|
+
enum: any[];
|
|
9
|
+
default?: Primitives;
|
|
10
|
+
}
|
|
11
|
+
export declare type ObjectTypeI<T> = new () => T;
|
|
12
|
+
interface ManyToManyInterface<T> {
|
|
13
|
+
entity: (type?: any) => ObjectTypeI<T>;
|
|
14
|
+
joinTableName: string;
|
|
15
|
+
foreignKey: string;
|
|
16
|
+
inverseForeignKey: string;
|
|
17
|
+
}
|
|
18
|
+
interface BelongsToInterface<T> {
|
|
19
|
+
entity: (type?: any) => ObjectTypeI<T>;
|
|
20
|
+
inverse: string | ((object: T) => any);
|
|
21
|
+
pivotColumnName: string;
|
|
22
|
+
}
|
|
23
|
+
interface hasManyInterface<T> {
|
|
24
|
+
entity: (type?: any) => ObjectTypeI<T>;
|
|
25
|
+
inverse: string | ((object: T) => any);
|
|
26
|
+
}
|
|
27
|
+
export declare const Decorators: Readonly<{
|
|
28
|
+
id: (isMongo?: boolean) => PropertyDecorator;
|
|
29
|
+
entity: (name: string) => ClassDecorator;
|
|
30
|
+
property: (params?: PropertyInterface) => PropertyDecorator;
|
|
31
|
+
embed: (e: any) => PropertyDecorator;
|
|
32
|
+
embedArray: (e: any, params?: PropertyInterface) => PropertyDecorator;
|
|
33
|
+
array: (e: any, params?: PropertyInterface) => PropertyDecorator;
|
|
34
|
+
Enum: (e: EnumProperty, params?: PropertyInterface) => PropertyDecorator;
|
|
35
|
+
created: (e?: any) => PropertyDecorator;
|
|
36
|
+
updated: (e?: any) => PropertyDecorator;
|
|
37
|
+
version: (e?: any) => PropertyDecorator;
|
|
38
|
+
deleted: (e?: any) => PropertyDecorator;
|
|
39
|
+
belongsToMany: <T>({ entity, joinTableName, foreignKey, inverseForeignKey }: ManyToManyInterface<T>) => PropertyDecorator;
|
|
40
|
+
hasMany: <T_1>({ entity, inverse }: hasManyInterface<T_1>) => PropertyDecorator;
|
|
41
|
+
belongsTo: <T_2>({ entity, inverse, pivotColumnName }: BelongsToInterface<T_2>) => PropertyDecorator;
|
|
42
|
+
}>;
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Decorators = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const fireorm_1 = require("fireorm");
|
|
6
|
+
const graphql_1 = require("graphql");
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const applyDecorators_1 = require("../Nestjs/applyDecorators");
|
|
9
|
+
const field_decorator_1 = require("../Nestjs/types/decorators/field.decorator");
|
|
10
|
+
exports.Decorators = (() => {
|
|
11
|
+
const id = (isMongo) => {
|
|
12
|
+
isMongo = false;
|
|
13
|
+
if (process.env.MAIN_DATABASE_TYPE === 'mongodb' || isMongo) {
|
|
14
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ObjectIdColumn)(), (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID), (0, typeorm_1.Column)());
|
|
15
|
+
}
|
|
16
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.PrimaryGeneratedColumn)('uuid'), (0, types_1.ApiProperty)(), (0, field_decorator_1.Field)(() => graphql_1.GraphQLID), (0, typeorm_1.Column)());
|
|
17
|
+
};
|
|
18
|
+
const entity = (name) => {
|
|
19
|
+
const PascalCase = name;
|
|
20
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Entity)({ name: PascalCase }), (0, types_1.ObjectType)(), (0, fireorm_1.Collection)(PascalCase));
|
|
21
|
+
};
|
|
22
|
+
const property = (params) => {
|
|
23
|
+
if (params && params.hidden) {
|
|
24
|
+
return (0, applyDecorators_1.applyDecorators)((0, types_1.HideField)(), (0, typeorm_1.Column)({
|
|
25
|
+
select: false,
|
|
26
|
+
nullable: !params.required
|
|
27
|
+
}), (0, types_1.ApiProperty)({
|
|
28
|
+
nullable: !params.required,
|
|
29
|
+
required: !!params.required
|
|
30
|
+
}), (0, types_1.ApiHideProperty)());
|
|
31
|
+
}
|
|
32
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
|
|
33
|
+
nullable: !params.required
|
|
34
|
+
}), (0, types_1.ApiProperty)({
|
|
35
|
+
nullable: !params.required,
|
|
36
|
+
required: !!params.required
|
|
37
|
+
}), (0, field_decorator_1.Field)());
|
|
38
|
+
};
|
|
39
|
+
const embed = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({ type: e }));
|
|
40
|
+
const embedArray = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)(type => e), (0, types_1.ApiProperty)({
|
|
41
|
+
isArray: true,
|
|
42
|
+
type: e,
|
|
43
|
+
nullable: !params.required,
|
|
44
|
+
required: !!params.required
|
|
45
|
+
}));
|
|
46
|
+
const array = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
|
|
47
|
+
type: 'simple-array',
|
|
48
|
+
nullable: !params?.required
|
|
49
|
+
}), (0, types_1.ApiProperty)({
|
|
50
|
+
type: [e],
|
|
51
|
+
nullable: !params?.required,
|
|
52
|
+
required: !!params?.required
|
|
53
|
+
}));
|
|
54
|
+
const Enum = (e, params) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.Column)({
|
|
55
|
+
type: 'enum',
|
|
56
|
+
enum: e.enum,
|
|
57
|
+
default: e.default,
|
|
58
|
+
nullable: !params.required
|
|
59
|
+
}), (0, types_1.ApiProperty)({
|
|
60
|
+
enum: e.enum,
|
|
61
|
+
default: e.default,
|
|
62
|
+
nullable: !params.required,
|
|
63
|
+
required: !!params.required
|
|
64
|
+
}));
|
|
65
|
+
const created = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.CreateDateColumn)(), (0, types_1.ApiProperty)());
|
|
66
|
+
const updated = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.UpdateDateColumn)(), (0, types_1.ApiProperty)());
|
|
67
|
+
const deleted = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.DeleteDateColumn)(), (0, types_1.ApiProperty)());
|
|
68
|
+
const version = (e) => (0, applyDecorators_1.applyDecorators)((0, typeorm_1.VersionColumn)(), (0, types_1.ApiProperty)());
|
|
69
|
+
function belongsToMany({ entity, joinTableName, foreignKey, inverseForeignKey }) {
|
|
70
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ManyToMany)(entity), (0, typeorm_1.JoinTable)({
|
|
71
|
+
name: joinTableName,
|
|
72
|
+
joinColumns: [{ name: foreignKey }],
|
|
73
|
+
inverseJoinColumns: [{ name: inverseForeignKey }]
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
function belongsTo({ entity, inverse, pivotColumnName }) {
|
|
77
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.ManyToOne)(entity, inverse), (0, typeorm_1.JoinColumn)({ name: pivotColumnName }));
|
|
78
|
+
}
|
|
79
|
+
function hasMany({ entity, inverse }) {
|
|
80
|
+
return (0, applyDecorators_1.applyDecorators)((0, typeorm_1.OneToMany)(entity, inverse));
|
|
81
|
+
}
|
|
82
|
+
return Object.freeze({
|
|
83
|
+
id,
|
|
84
|
+
entity,
|
|
85
|
+
property,
|
|
86
|
+
embed,
|
|
87
|
+
embedArray,
|
|
88
|
+
array,
|
|
89
|
+
Enum,
|
|
90
|
+
created,
|
|
91
|
+
updated,
|
|
92
|
+
version,
|
|
93
|
+
deleted,
|
|
94
|
+
belongsToMany,
|
|
95
|
+
hasMany,
|
|
96
|
+
belongsTo
|
|
97
|
+
});
|
|
98
|
+
})();
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Access = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
let Access = class Access {
|
|
7
|
+
};
|
|
8
|
+
tslib_1.__decorate([
|
|
9
|
+
(0, types_1.Column)({ nullable: true }),
|
|
10
|
+
(0, types_1.ApiProperty)(),
|
|
11
|
+
tslib_1.__metadata("design:type", String)
|
|
12
|
+
], Access.prototype, "type", void 0);
|
|
13
|
+
tslib_1.__decorate([
|
|
14
|
+
(0, types_1.Column)({ nullable: true, type: 'simple-array' }),
|
|
15
|
+
(0, types_1.ApiProperty)(),
|
|
16
|
+
tslib_1.__metadata("design:type", Array)
|
|
17
|
+
], Access.prototype, "roles", void 0);
|
|
18
|
+
Access = tslib_1.__decorate([
|
|
19
|
+
(0, types_1.ObjectType)()
|
|
20
|
+
], Access);
|
|
21
|
+
exports.Access = Access;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class IPaginationMeta {
|
|
2
|
+
itemCount: number;
|
|
3
|
+
totalItems: number;
|
|
4
|
+
itemsPerPage: number;
|
|
5
|
+
totalPages: number;
|
|
6
|
+
currentPage: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class IPaginationLinks {
|
|
9
|
+
first?: string;
|
|
10
|
+
previous?: string;
|
|
11
|
+
next?: string;
|
|
12
|
+
last?: string;
|
|
13
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IPaginationLinks = exports.IPaginationMeta = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
let IPaginationMeta = class IPaginationMeta {
|
|
7
|
+
};
|
|
8
|
+
tslib_1.__decorate([
|
|
9
|
+
(0, types_1.Column)('number'),
|
|
10
|
+
(0, types_1.ApiProperty)(),
|
|
11
|
+
tslib_1.__metadata("design:type", Number)
|
|
12
|
+
], IPaginationMeta.prototype, "itemCount", void 0);
|
|
13
|
+
tslib_1.__decorate([
|
|
14
|
+
(0, types_1.Column)('number'),
|
|
15
|
+
(0, types_1.ApiProperty)(),
|
|
16
|
+
tslib_1.__metadata("design:type", Number)
|
|
17
|
+
], IPaginationMeta.prototype, "totalItems", void 0);
|
|
18
|
+
tslib_1.__decorate([
|
|
19
|
+
(0, types_1.Column)('number'),
|
|
20
|
+
(0, types_1.ApiProperty)(),
|
|
21
|
+
tslib_1.__metadata("design:type", Number)
|
|
22
|
+
], IPaginationMeta.prototype, "itemsPerPage", void 0);
|
|
23
|
+
tslib_1.__decorate([
|
|
24
|
+
(0, types_1.Column)('number'),
|
|
25
|
+
(0, types_1.ApiProperty)(),
|
|
26
|
+
tslib_1.__metadata("design:type", Number)
|
|
27
|
+
], IPaginationMeta.prototype, "totalPages", void 0);
|
|
28
|
+
tslib_1.__decorate([
|
|
29
|
+
(0, types_1.Column)('number'),
|
|
30
|
+
(0, types_1.ApiProperty)(),
|
|
31
|
+
tslib_1.__metadata("design:type", Number)
|
|
32
|
+
], IPaginationMeta.prototype, "currentPage", void 0);
|
|
33
|
+
IPaginationMeta = tslib_1.__decorate([
|
|
34
|
+
(0, types_1.InputType)()
|
|
35
|
+
], IPaginationMeta);
|
|
36
|
+
exports.IPaginationMeta = IPaginationMeta;
|
|
37
|
+
let IPaginationLinks = class IPaginationLinks {
|
|
38
|
+
};
|
|
39
|
+
tslib_1.__decorate([
|
|
40
|
+
(0, types_1.Column)('text'),
|
|
41
|
+
(0, types_1.ApiProperty)(),
|
|
42
|
+
tslib_1.__metadata("design:type", String)
|
|
43
|
+
], IPaginationLinks.prototype, "first", void 0);
|
|
44
|
+
tslib_1.__decorate([
|
|
45
|
+
(0, types_1.Column)('text'),
|
|
46
|
+
(0, types_1.ApiProperty)(),
|
|
47
|
+
tslib_1.__metadata("design:type", String)
|
|
48
|
+
], IPaginationLinks.prototype, "previous", void 0);
|
|
49
|
+
tslib_1.__decorate([
|
|
50
|
+
(0, types_1.Column)('text'),
|
|
51
|
+
(0, types_1.ApiProperty)(),
|
|
52
|
+
tslib_1.__metadata("design:type", String)
|
|
53
|
+
], IPaginationLinks.prototype, "next", void 0);
|
|
54
|
+
tslib_1.__decorate([
|
|
55
|
+
(0, types_1.Column)('text'),
|
|
56
|
+
(0, types_1.ApiProperty)(),
|
|
57
|
+
tslib_1.__metadata("design:type", String)
|
|
58
|
+
], IPaginationLinks.prototype, "last", void 0);
|
|
59
|
+
IPaginationLinks = tslib_1.__decorate([
|
|
60
|
+
(0, types_1.InputType)()
|
|
61
|
+
], IPaginationLinks);
|
|
62
|
+
exports.IPaginationLinks = IPaginationLinks;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Column as TypeORMColumn } from 'typeorm';
|
|
2
|
+
import { SchemaObject as LBSchemaObject } from 'openapi3-ts';
|
|
3
|
+
import { InputType as NestInputType } from './Nestjs/types/decorators/input-type.decorator';
|
|
4
|
+
import { PartialType as NestjsPartialType } from './Nestjs/types/decorators/partial-type.helper';
|
|
5
|
+
import { ObjectType as NestObjectType } from './Nestjs/types/object-type.decorator';
|
|
6
|
+
import { ApiProperty as NEstJSApiProperty } from './Nestjs/types/decorators/api-property.decorator';
|
|
7
|
+
import { OmitType as NEstJSOmitType } from './Nestjs/types/omit-type';
|
|
8
|
+
import { ApiHideProperty as NEstApiHideProperty } from './Nestjs/types/decorators/api-hide-property.decorator';
|
|
9
|
+
import { SchemaRef } from './Loopback/json-to-schema';
|
|
10
|
+
import { JsonSchemaOptions } from './Loopback/build-schema';
|
|
11
|
+
export declare function LBgetModelSchemaRef<T extends object>(modelCtor: Function & {
|
|
12
|
+
prototype: T;
|
|
13
|
+
}, options?: JsonSchemaOptions<T>): SchemaRef;
|
|
14
|
+
export declare const ApiProperty: typeof NEstJSApiProperty;
|
|
15
|
+
export declare const ApiHideProperty: typeof NEstApiHideProperty;
|
|
16
|
+
export declare const OmitType: typeof NEstJSOmitType;
|
|
17
|
+
export declare const InputType: typeof NestInputType;
|
|
18
|
+
export declare const PartialType: typeof NestjsPartialType;
|
|
19
|
+
export declare const Column: typeof TypeORMColumn;
|
|
20
|
+
export declare const getModelSchemaRef: typeof LBgetModelSchemaRef;
|
|
21
|
+
export declare const ObjectType: typeof NestObjectType;
|
|
22
|
+
export declare type SchemaObject = LBSchemaObject;
|
|
23
|
+
export declare function HideField(): PropertyDecorator;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HideField = exports.ObjectType = exports.getModelSchemaRef = exports.Column = exports.PartialType = exports.InputType = exports.OmitType = exports.ApiHideProperty = exports.ApiProperty = exports.LBgetModelSchemaRef = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const input_type_decorator_1 = require("./Nestjs/types/decorators/input-type.decorator");
|
|
6
|
+
const partial_type_helper_1 = require("./Nestjs/types/decorators/partial-type.helper");
|
|
7
|
+
const object_type_decorator_1 = require("./Nestjs/types/object-type.decorator");
|
|
8
|
+
const api_property_decorator_1 = require("./Nestjs/types/decorators/api-property.decorator");
|
|
9
|
+
const omit_type_1 = require("./Nestjs/types/omit-type");
|
|
10
|
+
const api_hide_property_decorator_1 = require("./Nestjs/types/decorators/api-hide-property.decorator");
|
|
11
|
+
const json_to_schema_1 = require("./Loopback/json-to-schema");
|
|
12
|
+
const build_schema_1 = require("./Loopback/build-schema");
|
|
13
|
+
function LBgetModelSchemaRef(modelCtor, options) {
|
|
14
|
+
const jsonSchema = (0, build_schema_1.getJsonSchemaRef)(modelCtor, options);
|
|
15
|
+
return (0, json_to_schema_1.jsonToSchemaObject)(jsonSchema);
|
|
16
|
+
}
|
|
17
|
+
exports.LBgetModelSchemaRef = LBgetModelSchemaRef;
|
|
18
|
+
exports.ApiProperty = api_property_decorator_1.ApiProperty;
|
|
19
|
+
exports.ApiHideProperty = api_hide_property_decorator_1.ApiHideProperty;
|
|
20
|
+
exports.OmitType = omit_type_1.OmitType;
|
|
21
|
+
exports.InputType = input_type_decorator_1.InputType;
|
|
22
|
+
exports.PartialType = partial_type_helper_1.PartialType;
|
|
23
|
+
exports.Column = typeorm_1.Column;
|
|
24
|
+
exports.getModelSchemaRef = LBgetModelSchemaRef;
|
|
25
|
+
exports.ObjectType = object_type_decorator_1.ObjectType;
|
|
26
|
+
function HideField() {
|
|
27
|
+
return (target, propertyKey) => { };
|
|
28
|
+
}
|
|
29
|
+
exports.HideField = HideField;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.modelGeneratorDataSource = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
exports.modelGeneratorDataSource = new typeorm_1.DataSource({
|
|
6
|
+
name: '_goat_model_generator',
|
|
7
|
+
type: 'sqlite',
|
|
8
|
+
database: ':memory:',
|
|
9
|
+
logging: false,
|
|
10
|
+
synchronize: true,
|
|
11
|
+
dropSchema: true
|
|
12
|
+
});
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseConnector } from './BaseConnector';
|
|
2
|
+
import type { FluentConnectorInterface } from './BaseConnector';
|
|
3
|
+
import { Collection } from '@goatlab/js-utils';
|
|
4
|
+
import { Fluent } from './Fluent';
|
|
5
|
+
import { modelGeneratorDataSource } from './generatorDatasource';
|
|
6
|
+
import { getOutputKeys } from './outputKeys';
|
|
7
|
+
import { Decorators } from './core/database/decorators';
|
|
8
|
+
import type { BaseDaoExtendedAttributes, BaseDataElement, DaoOutput, Deleted, Filter, LogicOperator, PaginatedData, Paginator, Paths, Primitives, PrimitivesArray, Sure, WhereClause } from './types';
|
|
9
|
+
import { ApiProperty, ApiHideProperty, OmitType, InputType, PartialType, Column, getModelSchemaRef, ObjectType, HideField } from './core/types';
|
|
10
|
+
import type { SchemaObject } from './core/types';
|
|
11
|
+
import { createConnection } from './core/database/createConnection';
|
|
12
|
+
import { TypeOrmConnector } from './TypeOrmConnector/TypeOrmConnector';
|
|
13
|
+
import { loadRelations } from './loadRelations';
|
|
14
|
+
export { BaseConnector, Collection, createConnection, Decorators, Fluent, getOutputKeys, modelGeneratorDataSource, ApiProperty, ApiHideProperty, OmitType, InputType, PartialType, Column, getModelSchemaRef, ObjectType, HideField, TypeOrmConnector, loadRelations };
|
|
15
|
+
export type { BaseDaoExtendedAttributes, BaseDataElement, DaoOutput, Deleted, Filter, FluentConnectorInterface, LogicOperator, PaginatedData, Paginator, Paths, Primitives, PrimitivesArray, Sure, WhereClause, SchemaObject };
|
package/dist/index.js
CHANGED
|
@@ -29,4 +29,3 @@ const TypeOrmConnector_1 = require("./TypeOrmConnector/TypeOrmConnector");
|
|
|
29
29
|
Object.defineProperty(exports, "TypeOrmConnector", { enumerable: true, get: function () { return TypeOrmConnector_1.TypeOrmConnector; } });
|
|
30
30
|
const loadRelations_1 = require("./loadRelations");
|
|
31
31
|
Object.defineProperty(exports, "loadRelations", { enumerable: true, get: function () { return loadRelations_1.loadRelations; } });
|
|
32
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface RelationshipLoader {
|
|
2
|
+
data: any[];
|
|
3
|
+
relations: any;
|
|
4
|
+
modelRelations: any;
|
|
5
|
+
connectionName?: string;
|
|
6
|
+
provider?: 'typeorm' | 'firebase';
|
|
7
|
+
self: any;
|
|
8
|
+
}
|
|
9
|
+
export declare const loadRelations: ({ data, relations, modelRelations, connectionName, provider, self }: RelationshipLoader) => Promise<any[]>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadRelations = void 0;
|
|
4
|
+
const js_utils_1 = require("@goatlab/js-utils");
|
|
5
|
+
const TypeOrmConnector_1 = require("./TypeOrmConnector/TypeOrmConnector");
|
|
6
|
+
const loadRelations = async ({ data, relations, modelRelations, connectionName, provider, self }) => {
|
|
7
|
+
if (!relations) {
|
|
8
|
+
return data;
|
|
9
|
+
}
|
|
10
|
+
const chunkSize = provider === 'typeorm' ? 100 : 10;
|
|
11
|
+
for (const relation of Object.keys(relations)) {
|
|
12
|
+
if (modelRelations[relation]) {
|
|
13
|
+
const relationModel = modelRelations[relation];
|
|
14
|
+
let firebaseConnector;
|
|
15
|
+
if (provider === 'firebase') {
|
|
16
|
+
firebaseConnector = require('../FirebaseConnector').FirebaseConnector;
|
|
17
|
+
}
|
|
18
|
+
const Model = typeof self[relation] === 'function'
|
|
19
|
+
? self[relation]()
|
|
20
|
+
: provider === 'typeorm'
|
|
21
|
+
? new TypeOrmConnector_1.TypeOrmConnector(relationModel.targetClass, undefined, connectionName || 'LOCAL_DB')
|
|
22
|
+
: new firebaseConnector(relationModel.targetClass);
|
|
23
|
+
if (relationModel.isOneToMany) {
|
|
24
|
+
const ids = js_utils_1.Arrays.deDuplicate(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
|
|
25
|
+
const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
|
|
26
|
+
const promises = [];
|
|
27
|
+
for (const relatedIds of chunks) {
|
|
28
|
+
const results = await Model.andWhere(Model._keys[relationModel.inverseSidePropertyPath], 'in', relatedIds).get();
|
|
29
|
+
promises.push(results);
|
|
30
|
+
}
|
|
31
|
+
const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
|
|
32
|
+
const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r[relationModel.inverseSidePropertyPath]);
|
|
33
|
+
data.forEach(d => {
|
|
34
|
+
if (grouped[d.id]) {
|
|
35
|
+
d[relationModel.propertyPath] = grouped[d.id];
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else if (relationModel.isManyToOne) {
|
|
40
|
+
const ids = js_utils_1.Arrays.deDuplicate(data.map(d => d[relationModel.joinColumns[0].propertyPath]));
|
|
41
|
+
const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
|
|
42
|
+
const promises = [];
|
|
43
|
+
for (const relatedIds of chunks) {
|
|
44
|
+
const results = await Model.andWhere(Model._keys.id, 'in', relatedIds).get();
|
|
45
|
+
promises.push(results);
|
|
46
|
+
}
|
|
47
|
+
const relatedResults = js_utils_1.Arrays.collapse(promises);
|
|
48
|
+
const grouped = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
|
|
49
|
+
data.forEach(d => {
|
|
50
|
+
if (grouped[d[relationModel.joinColumns[0].propertyPath]]) {
|
|
51
|
+
d[relationModel.propertyPath] =
|
|
52
|
+
grouped[d[relationModel.joinColumns[0].propertyPath]][0];
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else if (relationModel.isManyToMany) {
|
|
57
|
+
const ids = js_utils_1.Arrays.deDuplicate(data.map(d => Model.isMongoDB ? js_utils_1.Ids.objectID(d.id) : d.id));
|
|
58
|
+
const chunks = js_utils_1.Arrays.chunk(ids, chunkSize);
|
|
59
|
+
if (relationModel.joinColumns.length === 0) {
|
|
60
|
+
return data;
|
|
61
|
+
}
|
|
62
|
+
const pivotRepository = self[relationModel.propertyPath]().relationQuery.pivot;
|
|
63
|
+
const promises = [];
|
|
64
|
+
for (const pivotIds of chunks) {
|
|
65
|
+
const results = await pivotRepository
|
|
66
|
+
.where(relationModel.joinColumns[0].propertyName, 'in', pivotIds)
|
|
67
|
+
.get();
|
|
68
|
+
promises.push(results);
|
|
69
|
+
}
|
|
70
|
+
const pivotResults = js_utils_1.Arrays.collapse(await Promise.all(promises));
|
|
71
|
+
const uniquePivotIds = pivotResults.map(p => p[relationModel.inverseJoinColumns[0].propertyName]);
|
|
72
|
+
const relationChunks = js_utils_1.Arrays.chunk(uniquePivotIds, chunkSize);
|
|
73
|
+
const relationPromises = [];
|
|
74
|
+
for (const relatedIds of relationChunks) {
|
|
75
|
+
const results = await Model.andWhere(Model._keys.id, 'in', relatedIds).get();
|
|
76
|
+
relationPromises.push(results);
|
|
77
|
+
}
|
|
78
|
+
const relatedResults = js_utils_1.Arrays.collapse(await Promise.all(relationPromises));
|
|
79
|
+
const groupedPivot = js_utils_1.Arrays.groupBy(pivotResults, r => r[relationModel.joinColumns[0].propertyName]);
|
|
80
|
+
const groupedRelated = js_utils_1.Arrays.groupBy(relatedResults, r => r.id);
|
|
81
|
+
data.forEach(d => {
|
|
82
|
+
groupedPivot[d.id]?.forEach(gp => {
|
|
83
|
+
d[relationModel.propertyPath] =
|
|
84
|
+
groupedRelated[gp[relationModel.inverseJoinColumns[0].propertyName]];
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return data;
|
|
91
|
+
};
|
|
92
|
+
exports.loadRelations = loadRelations;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOutputKeys = void 0;
|
|
4
|
+
const js_utils_1 = require("@goatlab/js-utils");
|
|
5
|
+
const getOutputKeys = (repository) => {
|
|
6
|
+
const excludedCols = [];
|
|
7
|
+
repository.metadata.columns.forEach(c => {
|
|
8
|
+
if (!c.isSelect) {
|
|
9
|
+
excludedCols.push(c.propertyName);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
const keys = repository.metadata.propertiesMap;
|
|
13
|
+
const flatKeys = js_utils_1.Objects.flatten(keys, true);
|
|
14
|
+
const outputKeys = Object.keys(flatKeys).filter(e => !excludedCols.includes(e));
|
|
15
|
+
return outputKeys;
|
|
16
|
+
};
|
|
17
|
+
exports.getOutputKeys = getOutputKeys;
|