@goatlab/fluent 0.6.6 → 0.6.9

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 (177) hide show
  1. package/dist/BaseConnector.d.ts +79 -0
  2. package/dist/BaseConnector.js +361 -0
  3. package/dist/Fluent.d.ts +26 -0
  4. package/dist/Fluent.js +52 -0
  5. package/dist/TypeOrmConnector/TypeOrmConnector.d.ts +2 -2
  6. package/dist/TypeOrmConnector/TypeOrmConnector.js +511 -0
  7. package/dist/TypeOrmConnector/TypeOrmMongoConnector._bypass.js +52 -0
  8. package/dist/TypeOrmConnector/TypeOrmMysqlConnector._bypass.js +55 -0
  9. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.d.ts +1 -0
  10. package/dist/TypeOrmConnector/test/advanced/advancedTestSuite.js +114 -0
  11. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.d.ts +16 -0
  12. package/dist/TypeOrmConnector/test/advanced/typeOrm.entity.js +57 -0
  13. package/dist/TypeOrmConnector/test/advanced/typeOrm.repository.js +11 -0
  14. package/dist/TypeOrmConnector/test/basic/basicTestSuite.d.ts +1 -0
  15. package/dist/TypeOrmConnector/test/basic/basicTestSuite.js +45 -0
  16. package/dist/TypeOrmConnector/test/basic/goat.dto.d.ts +8 -0
  17. package/dist/TypeOrmConnector/test/basic/goat.dto.js +18 -0
  18. package/dist/TypeOrmConnector/test/basic/goat.entity.d.ts +10 -0
  19. package/dist/TypeOrmConnector/test/basic/goat.entity.js +42 -0
  20. package/dist/TypeOrmConnector/test/basic/goat.repository.js +11 -0
  21. package/dist/TypeOrmConnector/test/flock.d.ts +4 -0
  22. package/dist/TypeOrmConnector/test/flock.js +25 -0
  23. package/dist/TypeOrmConnector/test/relations/car/car.dto.d.ts +5 -0
  24. package/dist/TypeOrmConnector/test/relations/car/car.dto.js +12 -0
  25. package/dist/TypeOrmConnector/test/relations/car/car.entity.d.ts +7 -0
  26. package/dist/TypeOrmConnector/test/relations/car/car.entity.js +32 -0
  27. package/dist/TypeOrmConnector/test/relations/car/car.repositoryTypeOrm.js +13 -0
  28. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.d.ts +1 -0
  29. package/dist/TypeOrmConnector/test/relations/relationsTestsSuite.js +93 -0
  30. package/dist/TypeOrmConnector/test/relations/roles/role.dto.d.ts +5 -0
  31. package/dist/TypeOrmConnector/test/relations/roles/role.dto.js +12 -0
  32. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.d.ts +6 -0
  33. package/dist/TypeOrmConnector/test/relations/roles/roles.entity.js +29 -0
  34. package/dist/TypeOrmConnector/test/relations/roles/roles.repositoryTypeOrm.js +14 -0
  35. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.d.ts +5 -0
  36. package/dist/TypeOrmConnector/test/relations/roles/roles_user.dto.js +12 -0
  37. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.d.ts +5 -0
  38. package/dist/TypeOrmConnector/test/relations/roles/roles_user.entity.js +23 -0
  39. package/dist/TypeOrmConnector/test/relations/roles/roles_users.repositoryTypeOrm.js +11 -0
  40. package/dist/TypeOrmConnector/test/relations/user/user.dto.d.ts +5 -0
  41. package/dist/TypeOrmConnector/test/relations/user/user.dto.js +12 -0
  42. package/dist/TypeOrmConnector/test/relations/user/user.entity.d.ts +14 -0
  43. package/dist/TypeOrmConnector/test/relations/user/user.entity.js +56 -0
  44. package/dist/TypeOrmConnector/test/relations/user/user.repositoryTypeOrm.js +16 -0
  45. package/dist/core/Loopback/build-schema.d.ts +31 -0
  46. package/dist/core/Loopback/build-schema.js +335 -0
  47. package/dist/core/Loopback/common-types.d.ts +36 -0
  48. package/dist/core/Loopback/common-types.js +13 -0
  49. package/dist/core/Loopback/json-to-schema.d.ts +6 -0
  50. package/dist/core/Loopback/json-to-schema.js +96 -0
  51. package/dist/core/Loopback/metadata.d.ts +9 -0
  52. package/dist/core/Loopback/metadata.js +28 -0
  53. package/dist/core/Loopback/model.d.ts +87 -0
  54. package/dist/core/Loopback/model.js +244 -0
  55. package/dist/core/Loopback/query.d.ts +97 -0
  56. package/dist/core/Loopback/query.js +290 -0
  57. package/dist/core/Loopback/relation.types.d.ts +45 -0
  58. package/dist/core/Loopback/relation.types.js +13 -0
  59. package/dist/core/Loopback/type-resolver.d.ts +7 -0
  60. package/dist/core/Loopback/type-resolver.js +34 -0
  61. package/dist/core/Loopback/type.d.ts +9 -0
  62. package/dist/core/Loopback/type.js +2 -0
  63. package/dist/core/Nestjs/applyDecorators.d.ts +1 -0
  64. package/dist/core/Nestjs/applyDecorators.js +17 -0
  65. package/dist/core/Nestjs/types/common.d.ts +16 -0
  66. package/dist/core/Nestjs/types/common.js +35 -0
  67. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.d.ts +1 -0
  68. package/dist/core/Nestjs/types/decorators/api-hide-property.decorator.js +7 -0
  69. package/dist/core/Nestjs/types/decorators/api-property.decorator.d.ts +27 -0
  70. package/dist/core/Nestjs/types/decorators/api-property.decorator.js +65 -0
  71. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.d.ts +5 -0
  72. package/dist/core/Nestjs/types/decorators/apply-is-optional.decorator.js +131 -0
  73. package/dist/core/Nestjs/types/decorators/args-type.decorator.d.ts +1 -0
  74. package/dist/core/Nestjs/types/decorators/args-type.decorator.js +19 -0
  75. package/dist/core/Nestjs/types/decorators/create-property.decorator.d.ts +2 -0
  76. package/dist/core/Nestjs/types/decorators/create-property.decorator.js +50 -0
  77. package/dist/core/Nestjs/types/decorators/directive.decorator.d.ts +1 -0
  78. package/dist/core/Nestjs/types/decorators/directive.decorator.js +36 -0
  79. package/dist/core/Nestjs/types/decorators/extensions.decorator.d.ts +1 -0
  80. package/dist/core/Nestjs/types/decorators/extensions.decorator.js +25 -0
  81. package/dist/core/Nestjs/types/decorators/field.decorator.d.ts +15 -0
  82. package/dist/core/Nestjs/types/decorators/field.decorator.js +56 -0
  83. package/dist/core/Nestjs/types/decorators/input-type.decorator.d.ts +7 -0
  84. package/dist/core/Nestjs/types/decorators/input-type.decorator.js +23 -0
  85. package/dist/core/Nestjs/types/decorators/interface-type.decorator.d.ts +9 -0
  86. package/dist/core/Nestjs/types/decorators/interface-type.decorator.js +27 -0
  87. package/dist/core/Nestjs/types/decorators/partial-type.helper.d.ts +3 -0
  88. package/dist/core/Nestjs/types/decorators/partial-type.helper.js +42 -0
  89. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.d.ts +3 -0
  90. package/dist/core/Nestjs/types/errors/cannot-determine-host-type.error.js +9 -0
  91. package/dist/core/Nestjs/types/errors/directive-parsing.error.d.ts +3 -0
  92. package/dist/core/Nestjs/types/errors/directive-parsing.error.js +9 -0
  93. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.d.ts +3 -0
  94. package/dist/core/Nestjs/types/errors/unable-to-find-fields.error.js +9 -0
  95. package/dist/core/Nestjs/types/errors/undefined-type.error.d.ts +3 -0
  96. package/dist/core/Nestjs/types/errors/undefined-type.error.js +10 -0
  97. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.d.ts +3 -0
  98. package/dist/core/Nestjs/types/interfaces/add-class-type-metadata.util.js +10 -0
  99. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.d.ts +5 -0
  100. package/dist/core/Nestjs/types/interfaces/base-type-options.interface.js +2 -0
  101. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.d.ts +5 -0
  102. package/dist/core/Nestjs/types/interfaces/class-decorator-factory.interface.js +2 -0
  103. package/dist/core/Nestjs/types/interfaces/complexity.interface.d.ts +11 -0
  104. package/dist/core/Nestjs/types/interfaces/complexity.interface.js +2 -0
  105. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.d.ts +15 -0
  106. package/dist/core/Nestjs/types/interfaces/field-middleware.interface.js +2 -0
  107. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.d.ts +235 -0
  108. package/dist/core/Nestjs/types/interfaces/open-api-spec.interface.js +2 -0
  109. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.d.ts +2 -0
  110. package/dist/core/Nestjs/types/interfaces/resolve-type-fn.interface.js +2 -0
  111. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.d.ts +5 -0
  112. package/dist/core/Nestjs/types/interfaces/return-type-func.interface.js +2 -0
  113. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.d.ts +9 -0
  114. package/dist/core/Nestjs/types/interfaces/schema-object-metadata.interface.js +2 -0
  115. package/dist/core/Nestjs/types/interfaces/type-options.interface.d.ts +5 -0
  116. package/dist/core/Nestjs/types/interfaces/type-options.interface.js +2 -0
  117. package/dist/core/Nestjs/types/lazy-metadata.storage.d.ts +15 -0
  118. package/dist/core/Nestjs/types/lazy-metadata.storage.js +67 -0
  119. package/dist/core/Nestjs/types/metadata/class.metadata.d.ts +11 -0
  120. package/dist/core/Nestjs/types/metadata/class.metadata.js +2 -0
  121. package/dist/core/Nestjs/types/metadata/directive.metadata.d.ts +8 -0
  122. package/dist/core/Nestjs/types/metadata/directive.metadata.js +2 -0
  123. package/dist/core/Nestjs/types/metadata/enum.metadata.d.ts +11 -0
  124. package/dist/core/Nestjs/types/metadata/enum.metadata.js +2 -0
  125. package/dist/core/Nestjs/types/metadata/extensions.metadata.d.ts +8 -0
  126. package/dist/core/Nestjs/types/metadata/extensions.metadata.js +2 -0
  127. package/dist/core/Nestjs/types/metadata/index.d.ts +8 -0
  128. package/dist/core/Nestjs/types/metadata/index.js +11 -0
  129. package/dist/core/Nestjs/types/metadata/interface.metadata.d.ts +6 -0
  130. package/dist/core/Nestjs/types/metadata/interface.metadata.js +2 -0
  131. package/dist/core/Nestjs/types/metadata/object-type.metadata.d.ts +4 -0
  132. package/dist/core/Nestjs/types/metadata/object-type.metadata.js +2 -0
  133. package/dist/core/Nestjs/types/metadata/param.metadata.d.ts +18 -0
  134. package/dist/core/Nestjs/types/metadata/param.metadata.js +2 -0
  135. package/dist/core/Nestjs/types/metadata/property.metadata.d.ts +20 -0
  136. package/dist/core/Nestjs/types/metadata/property.metadata.js +2 -0
  137. package/dist/core/Nestjs/types/metadata/resolver.metadata.d.ts +34 -0
  138. package/dist/core/Nestjs/types/metadata/resolver.metadata.js +2 -0
  139. package/dist/core/Nestjs/types/metadata/union.metadata.d.ts +9 -0
  140. package/dist/core/Nestjs/types/metadata/union.metadata.js +2 -0
  141. package/dist/core/Nestjs/types/object-type.decorator.d.ts +8 -0
  142. package/dist/core/Nestjs/types/object-type.decorator.js +25 -0
  143. package/dist/core/Nestjs/types/omit-type.d.ts +2 -0
  144. package/dist/core/Nestjs/types/omit-type.js +30 -0
  145. package/dist/core/Nestjs/types/reflection.utils.d.ts +15 -0
  146. package/dist/core/Nestjs/types/reflection.utils.js +58 -0
  147. package/dist/core/Nestjs/types/set-metadata.decorator.d.ts +4 -0
  148. package/dist/core/Nestjs/types/set-metadata.decorator.js +16 -0
  149. package/dist/core/Nestjs/types/type-metadata.storage.d.ts +69 -0
  150. package/dist/core/Nestjs/types/type-metadata.storage.js +342 -0
  151. package/dist/core/Nestjs/types/utils/enum.utils.d.ts +3 -0
  152. package/dist/core/Nestjs/types/utils/enum.utils.js +29 -0
  153. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.d.ts +13 -0
  154. package/dist/core/Nestjs/types/utils/get-fields-and-decorator.util.js +72 -0
  155. package/dist/core/Nestjs/types/utils/mapped-types.utils.d.ts +2 -0
  156. package/dist/core/Nestjs/types/utils/mapped-types.utils.js +38 -0
  157. package/dist/core/Nestjs/types/utils/model-properties-accessor.d.ts +6 -0
  158. package/dist/core/Nestjs/types/utils/model-properties-accessor.js +36 -0
  159. package/dist/core/Nestjs/types/utils/type-helpers.utils.d.ts +2 -0
  160. package/dist/core/Nestjs/types/utils/type-helpers.utils.js +16 -0
  161. package/dist/core/database/createConnection.d.ts +30 -0
  162. package/dist/core/database/createConnection.js +43 -0
  163. package/dist/core/database/decorators.d.ts +43 -0
  164. package/dist/core/database/decorators.js +98 -0
  165. package/dist/core/dtos/access.dto.d.ts +4 -0
  166. package/dist/core/dtos/access.dto.js +21 -0
  167. package/dist/core/types.d.ts +23 -0
  168. package/dist/core/types.js +29 -0
  169. package/dist/generatorDatasource.d.ts +2 -0
  170. package/dist/generatorDatasource.js +12 -0
  171. package/dist/loadRelations.js +92 -0
  172. package/dist/outputKeys.d.ts +2 -0
  173. package/dist/outputKeys.js +17 -0
  174. package/dist/tsconfig.tsbuildinfo +1 -0
  175. package/dist/types.d.ts +85 -0
  176. package/dist/types.js +2 -0
  177. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { Type } from '../common';
2
+ import 'reflect-metadata';
3
+ export declare class ModelPropertiesAccessor {
4
+ getModelProperties(prototype: Type<unknown>): string[];
5
+ applyMetadataFactory(prototype: Type<unknown>): void;
6
+ }
@@ -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,2 @@
1
+ import { PropertyMetadata } from '../metadata';
2
+ export declare function applyFieldDecorators(targetClass: Function, item: PropertyMetadata): void;
@@ -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,4 @@
1
+ export declare class Access {
2
+ type?: string;
3
+ roles?: string[];
4
+ }
@@ -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,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,2 @@
1
+ import { DataSource } from 'typeorm';
2
+ export declare const modelGeneratorDataSource: DataSource;
@@ -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
+ });
@@ -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,2 @@
1
+ import { Repository } from 'typeorm';
2
+ export declare const getOutputKeys: (repository: Repository<any>) => string[];
@@ -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;