@stingerloom/orm 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +3 -3
  2. package/dist/core/AggregateQueryHandler.d.ts +17 -0
  3. package/dist/core/AggregateQueryHandler.d.ts.map +1 -0
  4. package/dist/core/AggregateQueryHandler.js +96 -0
  5. package/dist/core/AggregateQueryHandler.js.map +1 -0
  6. package/dist/core/CascadeHandler.d.ts +17 -0
  7. package/dist/core/CascadeHandler.d.ts.map +1 -0
  8. package/dist/core/CascadeHandler.js +106 -0
  9. package/dist/core/CascadeHandler.js.map +1 -0
  10. package/dist/core/Conditions.d.ts +2 -0
  11. package/dist/core/Conditions.d.ts.map +1 -1
  12. package/dist/core/Conditions.js +15 -1
  13. package/dist/core/Conditions.js.map +1 -1
  14. package/dist/core/EntityManager.d.ts +30 -45
  15. package/dist/core/EntityManager.d.ts.map +1 -1
  16. package/dist/core/EntityManager.js +483 -1501
  17. package/dist/core/EntityManager.js.map +1 -1
  18. package/dist/core/EntityManagerInternals.d.ts +28 -0
  19. package/dist/core/EntityManagerInternals.d.ts.map +1 -0
  20. package/dist/core/EntityManagerInternals.js +3 -0
  21. package/dist/core/EntityManagerInternals.js.map +1 -0
  22. package/dist/core/ExplainQueryHandler.d.ts +16 -0
  23. package/dist/core/ExplainQueryHandler.d.ts.map +1 -0
  24. package/dist/core/ExplainQueryHandler.js +236 -0
  25. package/dist/core/ExplainQueryHandler.js.map +1 -0
  26. package/dist/core/QueryTracker.d.ts +5 -1
  27. package/dist/core/QueryTracker.d.ts.map +1 -1
  28. package/dist/core/QueryTracker.js +75 -21
  29. package/dist/core/QueryTracker.js.map +1 -1
  30. package/dist/core/RelationLoader.d.ts +13 -0
  31. package/dist/core/RelationLoader.d.ts.map +1 -0
  32. package/dist/core/RelationLoader.js +206 -0
  33. package/dist/core/RelationLoader.js.map +1 -0
  34. package/dist/core/RelationMetadataResolver.d.ts +24 -0
  35. package/dist/core/RelationMetadataResolver.d.ts.map +1 -0
  36. package/dist/core/RelationMetadataResolver.js +182 -0
  37. package/dist/core/RelationMetadataResolver.js.map +1 -0
  38. package/dist/core/ReplicationManager.d.ts +11 -0
  39. package/dist/core/ReplicationManager.d.ts.map +1 -0
  40. package/dist/core/ReplicationManager.js +38 -0
  41. package/dist/core/ReplicationManager.js.map +1 -0
  42. package/dist/core/SchemaRegistrar.d.ts +15 -0
  43. package/dist/core/SchemaRegistrar.d.ts.map +1 -0
  44. package/dist/core/SchemaRegistrar.js +238 -0
  45. package/dist/core/SchemaRegistrar.js.map +1 -0
  46. package/dist/core/index.d.ts +8 -0
  47. package/dist/core/index.d.ts.map +1 -1
  48. package/dist/core/index.js +8 -0
  49. package/dist/core/index.js.map +1 -1
  50. package/dist/decorators/Entity.d.ts.map +1 -1
  51. package/dist/decorators/Entity.js +9 -3
  52. package/dist/decorators/Entity.js.map +1 -1
  53. package/dist/decorators/Version.d.ts.map +1 -1
  54. package/dist/decorators/Version.js +3 -3
  55. package/dist/decorators/Version.js.map +1 -1
  56. package/dist/dialects/FindOption.d.ts +2 -2
  57. package/dist/dialects/FindOption.d.ts.map +1 -1
  58. package/dist/dialects/TransactionSessionManager.d.ts.map +1 -1
  59. package/dist/dialects/TransactionSessionManager.js +5 -2
  60. package/dist/dialects/TransactionSessionManager.js.map +1 -1
  61. package/dist/dialects/mysql/MySqlDataSource.d.ts.map +1 -1
  62. package/dist/dialects/mysql/MySqlDataSource.js +3 -0
  63. package/dist/dialects/mysql/MySqlDataSource.js.map +1 -1
  64. package/dist/dialects/mysql/MySqlDriver.d.ts.map +1 -1
  65. package/dist/dialects/mysql/MySqlDriver.js +9 -3
  66. package/dist/dialects/mysql/MySqlDriver.js.map +1 -1
  67. package/dist/dialects/postgres/PostgresDataSource.d.ts.map +1 -1
  68. package/dist/dialects/postgres/PostgresDataSource.js +3 -0
  69. package/dist/dialects/postgres/PostgresDataSource.js.map +1 -1
  70. package/dist/dialects/postgres/PostgresDriver.d.ts.map +1 -1
  71. package/dist/dialects/postgres/PostgresDriver.js +4 -0
  72. package/dist/dialects/postgres/PostgresDriver.js.map +1 -1
  73. package/dist/dialects/sqlite/SqliteDataSource.d.ts.map +1 -1
  74. package/dist/dialects/sqlite/SqliteDataSource.js +3 -0
  75. package/dist/dialects/sqlite/SqliteDataSource.js.map +1 -1
  76. package/dist/dialects/sqlite/SqliteDriver.d.ts.map +1 -1
  77. package/dist/dialects/sqlite/SqliteDriver.js +4 -0
  78. package/dist/dialects/sqlite/SqliteDriver.js.map +1 -1
  79. package/dist/errors/DatabaseConnectionFailedError.d.ts +2 -1
  80. package/dist/errors/DatabaseConnectionFailedError.d.ts.map +1 -1
  81. package/dist/errors/DatabaseConnectionFailedError.js +12 -2
  82. package/dist/errors/DatabaseConnectionFailedError.js.map +1 -1
  83. package/dist/errors/OptimisticLockError.d.ts +5 -0
  84. package/dist/errors/OptimisticLockError.d.ts.map +1 -0
  85. package/dist/errors/OptimisticLockError.js +14 -0
  86. package/dist/errors/OptimisticLockError.js.map +1 -0
  87. package/dist/errors/OrmErrorCode.d.ts +3 -1
  88. package/dist/errors/OrmErrorCode.d.ts.map +1 -1
  89. package/dist/errors/OrmErrorCode.js +2 -0
  90. package/dist/errors/OrmErrorCode.js.map +1 -1
  91. package/dist/errors/index.d.ts +1 -0
  92. package/dist/errors/index.d.ts.map +1 -1
  93. package/dist/errors/index.js +1 -0
  94. package/dist/errors/index.js.map +1 -1
  95. package/dist/utils/index.d.ts +1 -0
  96. package/dist/utils/index.d.ts.map +1 -1
  97. package/dist/utils/index.js +1 -0
  98. package/dist/utils/index.js.map +1 -1
  99. package/dist/utils/validateSavepointName.d.ts +2 -0
  100. package/dist/utils/validateSavepointName.d.ts.map +1 -0
  101. package/dist/utils/validateSavepointName.js +12 -0
  102. package/dist/utils/validateSavepointName.js.map +1 -0
  103. package/package.json +7 -3
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.RelationLoader = void 0;
37
+ const sql_template_tag_1 = __importStar(require("sql-template-tag"));
38
+ const RawQueryBuilderFactory_1 = require("./RawQueryBuilderFactory");
39
+ const ResultTransformerFactory_1 = require("./ResultTransformerFactory");
40
+ class RelationLoader {
41
+ constructor(resolver, ctx) {
42
+ this.resolver = resolver;
43
+ this.ctx = ctx;
44
+ }
45
+ async loadOneToManyRelations(entity, parentResults, relations, existingSession) {
46
+ const oneToManyMeta = this.resolver.resolveOneToManyMetadata(entity);
47
+ if (oneToManyMeta.length === 0)
48
+ return;
49
+ const parentMetadata = this.resolver.resolveEntityMetadata(entity);
50
+ if (!parentMetadata)
51
+ return;
52
+ const pk = parentMetadata.columns.find((column) => column.options?.primary);
53
+ if (!pk)
54
+ return;
55
+ const parents = Array.isArray(parentResults)
56
+ ? parentResults
57
+ : [parentResults];
58
+ for (const rel of oneToManyMeta) {
59
+ if (!relations.includes(rel.propertyKey))
60
+ continue;
61
+ const RelatedEntity = rel.getRelatedEntity();
62
+ const relatedMetadata = this.resolver.resolveEntityMetadata(RelatedEntity);
63
+ if (!relatedMetadata)
64
+ continue;
65
+ const manyToOneItems = this.resolver.resolveManyToOneMetadata(RelatedEntity);
66
+ const matchingRelation = manyToOneItems.find((m) => m.columnName === rel.mappedBy);
67
+ const fkColumn = matchingRelation?.joinColumn ?? rel.mappedBy;
68
+ for (const parent of parents) {
69
+ const parentId = parent[pk.name];
70
+ if (parentId === undefined || parentId === null)
71
+ continue;
72
+ const children = await this.ctx.findInternal(RelatedEntity, {
73
+ where: { [fkColumn]: parentId },
74
+ }, existingSession);
75
+ if (children === undefined) {
76
+ parent[rel.propertyKey] = [];
77
+ }
78
+ else if (Array.isArray(children)) {
79
+ parent[rel.propertyKey] = children;
80
+ }
81
+ else {
82
+ parent[rel.propertyKey] = [children];
83
+ }
84
+ }
85
+ }
86
+ }
87
+ async loadManyToManyRelations(entity, parentResults, relations, existingSession) {
88
+ const manyToManyMeta = this.resolver.resolveManyToManyMetadata(entity);
89
+ if (manyToManyMeta.length === 0)
90
+ return;
91
+ const parentMetadata = this.resolver.resolveEntityMetadata(entity);
92
+ if (!parentMetadata)
93
+ return;
94
+ const pk = parentMetadata.columns.find((column) => column.options?.primary);
95
+ if (!pk)
96
+ return;
97
+ const parents = Array.isArray(parentResults)
98
+ ? parentResults
99
+ : [parentResults];
100
+ for (const rel of manyToManyMeta) {
101
+ if (!relations.includes(rel.propertyKey))
102
+ continue;
103
+ const joinInfo = this.resolver.resolveManyToManyJoinTable(rel);
104
+ if (!joinInfo)
105
+ continue;
106
+ const RelatedEntity = rel.getRelatedEntity();
107
+ const relatedMetadata = this.resolver.resolveEntityMetadata(RelatedEntity);
108
+ if (!relatedMetadata)
109
+ continue;
110
+ const relatedPk = relatedMetadata.columns.find((col) => col.options?.primary);
111
+ if (!relatedPk)
112
+ continue;
113
+ const relatedTableName = relatedMetadata.name ?? RelatedEntity.name;
114
+ for (const parent of parents) {
115
+ const parentId = parent[pk.name];
116
+ if (parentId === undefined || parentId === null)
117
+ continue;
118
+ const qb = RawQueryBuilderFactory_1.RawQueryBuilderFactory.create();
119
+ const selectCols = relatedMetadata.columns.map((col) => `${this.ctx.wrap(relatedTableName)}.${this.ctx.wrap(col.name)}`);
120
+ const joinCondition = (0, sql_template_tag_1.default) `${(0, sql_template_tag_1.raw)(this.ctx.wrap(relatedTableName))}.${(0, sql_template_tag_1.raw)(this.ctx.wrap(relatedPk.name))} = ${(0, sql_template_tag_1.raw)(this.ctx.wrap(joinInfo.joinTableName))}.${(0, sql_template_tag_1.raw)(this.ctx.wrap(joinInfo.inverseJoinColumn))}`;
121
+ const whereCondition = (0, sql_template_tag_1.default) `${(0, sql_template_tag_1.raw)(this.ctx.wrap(joinInfo.joinTableName))}.${(0, sql_template_tag_1.raw)(this.ctx.wrap(joinInfo.joinColumn))} = ${parentId}`;
122
+ qb.select(selectCols)
123
+ .from(this.ctx.wrap(relatedTableName))
124
+ .innerJoin(this.ctx.wrap(joinInfo.joinTableName), this.ctx.wrap(joinInfo.joinTableName), joinCondition)
125
+ .where([whereCondition]);
126
+ const executeQuery = async (session) => {
127
+ const resultQuery = qb.build();
128
+ const subQueryStart = Date.now();
129
+ this.ctx.beginTrackQuery();
130
+ const queryResult = (await session.query(resultQuery));
131
+ this.ctx.trackQuery(relatedTableName, resultQuery.text ?? String(resultQuery), Date.now() - subQueryStart);
132
+ const resultTransformer = ResultTransformerFactory_1.ResultTransformerFactory.create();
133
+ const { results } = queryResult;
134
+ if (!results || results.length === 0) {
135
+ parent[rel.propertyKey] = [];
136
+ }
137
+ else {
138
+ parent[rel.propertyKey] = resultTransformer.toEntities(RelatedEntity, queryResult);
139
+ }
140
+ };
141
+ await this.ctx.executeInTransaction(executeQuery, existingSession);
142
+ }
143
+ }
144
+ }
145
+ async loadOneToOneRelations(entity, parentResults, relations, existingSession) {
146
+ const oneToOneMeta = this.resolver.resolveOneToOneMetadata(entity);
147
+ if (oneToOneMeta.length === 0)
148
+ return;
149
+ const parentMetadata = this.resolver.resolveEntityMetadata(entity);
150
+ if (!parentMetadata)
151
+ return;
152
+ const pk = parentMetadata.columns.find((column) => column.options?.primary);
153
+ if (!pk)
154
+ return;
155
+ const parents = Array.isArray(parentResults)
156
+ ? parentResults
157
+ : [parentResults];
158
+ for (const rel of oneToOneMeta) {
159
+ if (!relations.includes(rel.propertyKey))
160
+ continue;
161
+ if (rel.joinColumn) {
162
+ continue;
163
+ }
164
+ const RelatedEntity = rel.getRelatedEntity();
165
+ const relatedMetadata = this.resolver.resolveEntityMetadata(RelatedEntity);
166
+ if (!relatedMetadata)
167
+ continue;
168
+ const relatedPk = relatedMetadata.columns.find((col) => col.options?.primary);
169
+ if (!relatedPk)
170
+ continue;
171
+ for (const parent of parents) {
172
+ if (rel.joinColumn) {
173
+ const fkValue = parent[rel.joinColumn];
174
+ if (fkValue === undefined || fkValue === null) {
175
+ parent[rel.propertyKey] = null;
176
+ continue;
177
+ }
178
+ const related = await this.ctx.findOneInternal(RelatedEntity, {
179
+ where: { [relatedPk.name]: fkValue },
180
+ }, existingSession);
181
+ parent[rel.propertyKey] = related ?? null;
182
+ }
183
+ else if (rel.inverseSide) {
184
+ const parentId = parent[pk.name];
185
+ if (parentId === undefined || parentId === null) {
186
+ parent[rel.propertyKey] = null;
187
+ continue;
188
+ }
189
+ const relatedOneToOne = this.resolver.resolveOneToOneMetadata(RelatedEntity);
190
+ const ownerRel = relatedOneToOne.find((r) => r.propertyKey === rel.inverseSide && r.joinColumn);
191
+ if (ownerRel?.joinColumn) {
192
+ const related = await this.ctx.findOneInternal(RelatedEntity, {
193
+ where: { [ownerRel.joinColumn]: parentId },
194
+ }, existingSession);
195
+ parent[rel.propertyKey] = related ?? null;
196
+ }
197
+ else {
198
+ parent[rel.propertyKey] = null;
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ }
205
+ exports.RelationLoader = RelationLoader;
206
+ //# sourceMappingURL=RelationLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationLoader.js","sourceRoot":"","sources":["../../src/core/RelationLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import "reflect-metadata";
2
+ import { ClazzType } from "../utils";
3
+ import { EntityScannerMetadata } from "../scanner";
4
+ import { ManyToOneMetadata, OneToManyMetadata, ManyToManyMetadata, OneToOneMetadata } from "../decorators";
5
+ export declare class RelationMetadataResolver {
6
+ private readonly logger;
7
+ resolveEntityMetadata<T>(entity: ClazzType<T>): EntityScannerMetadata | null;
8
+ getDeletedAtColumn<T>(entity: ClazzType<T>): string | null;
9
+ getCreateTimestampColumn<T>(entity: ClazzType<T>): string | null;
10
+ getUpdateTimestampColumn<T>(entity: ClazzType<T>): string | null;
11
+ getVersionColumn<T>(entity: ClazzType<T>): string | null;
12
+ resolveManyToOneMetadata<T>(entity: ClazzType<T>): ManyToOneMetadata<any>[];
13
+ resolveJoinColumnsFromColumnMeta(entity: ClazzType<any>, relations: ManyToOneMetadata<any>[]): ManyToOneMetadata<any>[];
14
+ resolveOneToManyMetadata<T>(entity: ClazzType<T>): OneToManyMetadata<any>[];
15
+ resolveManyToManyMetadata<T>(entity: ClazzType<T>): ManyToManyMetadata<any>[];
16
+ resolveOneToOneMetadata<T>(entity: ClazzType<T>): OneToOneMetadata<any>[];
17
+ resolveJoinColumnsFromColumnMetaForOneToOne(entity: ClazzType<any>, relations: OneToOneMetadata<any>[]): OneToOneMetadata<any>[];
18
+ resolveManyToManyJoinTable<T>(rel: ManyToManyMetadata<any>): {
19
+ joinTableName: string;
20
+ joinColumn: string;
21
+ inverseJoinColumn: string;
22
+ } | null;
23
+ }
24
+ //# sourceMappingURL=RelationMetadataResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationMetadataResolver.d.ts","sourceRoot":"","sources":["../../src/core/RelationMetadataResolver.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAU,MAAM,UAAU,CAAC;AAC7C,OAAO,EAEL,qBAAqB,EAMtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAGL,iBAAiB,EAEjB,iBAAiB,EAEjB,kBAAkB,EAKlB,gBAAgB,EAGjB,MAAM,eAAe,CAAC;AAOvB,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;IASpE,qBAAqB,CAAC,CAAC,EACrB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACnB,qBAAqB,GAAG,IAAI;IAmC/B,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;IAU1D,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;IAUhE,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;IAWhE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI;IAcxD,wBAAwB,CAAC,CAAC,EACxB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACnB,iBAAiB,CAAC,GAAG,CAAC,EAAE;IAuC3B,gCAAgC,CAC9B,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAClC,iBAAiB,CAAC,GAAG,CAAC,EAAE;IAwC3B,wBAAwB,CAAC,CAAC,EACxB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACnB,iBAAiB,CAAC,GAAG,CAAC,EAAE;IAqC3B,yBAAyB,CAAC,CAAC,EACzB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACnB,kBAAkB,CAAC,GAAG,CAAC,EAAE;IAqC5B,uBAAuB,CAAC,CAAC,EACvB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GACnB,gBAAgB,CAAC,GAAG,CAAC,EAAE;IAwC1B,2CAA2C,CACzC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EACtB,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,GACjC,gBAAgB,CAAC,GAAG,CAAC,EAAE;IAiC1B,0BAA0B,CAAC,CAAC,EAAE,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG;QAC3D,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,IAAI;CA4BT"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RelationMetadataResolver = void 0;
7
+ require("reflect-metadata");
8
+ const utils_1 = require("../utils");
9
+ const scanner_1 = require("../scanner");
10
+ const typedi_1 = __importDefault(require("typedi"));
11
+ const decorators_1 = require("../decorators");
12
+ const MetadataContext_1 = require("../metadata/MetadataContext");
13
+ class RelationMetadataResolver {
14
+ constructor() {
15
+ this.logger = new utils_1.Logger(RelationMetadataResolver.name);
16
+ }
17
+ resolveEntityMetadata(entity) {
18
+ const context = MetadataContext_1.MetadataContext.isActive()
19
+ ? MetadataContext_1.MetadataContext.getCurrentTenant()
20
+ : "public";
21
+ const entityScanner = typedi_1.default.get(scanner_1.EntityScanner);
22
+ const layeredMetadata = entityScanner.scan(entity);
23
+ if (layeredMetadata) {
24
+ return layeredMetadata;
25
+ }
26
+ const reflectMetadata = Reflect.getMetadata(decorators_1.ENTITY_TOKEN, entity);
27
+ if (reflectMetadata) {
28
+ this.logger.warn(`[resolveEntityMetadata] "${entity.name}" resolved via Reflect.getMetadata fallback (context: "${context}"). ` +
29
+ `This entity was not found in the layered store.`);
30
+ }
31
+ else {
32
+ this.logger.error(`[resolveEntityMetadata] "${entity.name}" not found in any metadata source (context: "${context}")`);
33
+ }
34
+ return reflectMetadata ?? null;
35
+ }
36
+ getDeletedAtColumn(entity) {
37
+ const column = Reflect.getMetadata(decorators_1.DELETED_AT_TOKEN, entity);
38
+ return column ?? null;
39
+ }
40
+ getCreateTimestampColumn(entity) {
41
+ const column = Reflect.getMetadata(decorators_1.CREATE_TIMESTAMP_TOKEN, entity);
42
+ return column ?? null;
43
+ }
44
+ getUpdateTimestampColumn(entity) {
45
+ const column = Reflect.getMetadata(decorators_1.UPDATE_TIMESTAMP_TOKEN, entity);
46
+ return column ?? null;
47
+ }
48
+ getVersionColumn(entity) {
49
+ const column = Reflect.getMetadata(decorators_1.VERSION_TOKEN, entity);
50
+ return column ?? null;
51
+ }
52
+ resolveManyToOneMetadata(entity) {
53
+ const manyToOneScanner = typedi_1.default.get(scanner_1.ManyToOneScanner);
54
+ const allRelations = manyToOneScanner
55
+ .allMetadata()
56
+ .filter((rel) => rel.target === entity);
57
+ if (allRelations.length > 0) {
58
+ return this.resolveJoinColumnsFromColumnMeta(entity, allRelations);
59
+ }
60
+ const reflectMetadata = Reflect.getMetadata(decorators_1.MANY_TO_ONE_TOKEN, entity) ??
61
+ Reflect.getMetadata(decorators_1.MANY_TO_ONE_TOKEN, entity.prototype);
62
+ if (reflectMetadata && reflectMetadata.length > 0) {
63
+ this.logger.warn(`[resolveManyToOneMetadata] "${entity.name}" ManyToOne resolved via Reflect.getMetadata fallback.`);
64
+ return this.resolveJoinColumnsFromColumnMeta(entity, reflectMetadata);
65
+ }
66
+ return [];
67
+ }
68
+ resolveJoinColumnsFromColumnMeta(entity, relations) {
69
+ const columnsMeta = Reflect.getMetadata(decorators_1.COLUMN_TOKEN, entity) ??
70
+ Reflect.getMetadata(decorators_1.COLUMN_TOKEN, entity.prototype) ??
71
+ [];
72
+ if (columnsMeta.length === 0) {
73
+ return relations;
74
+ }
75
+ return relations.map((rel) => {
76
+ if (rel.joinColumn)
77
+ return rel;
78
+ const fkPropertyName = `${rel.columnName}Id`;
79
+ const matchingColumn = columnsMeta.find((col) => col.propertyKey === fkPropertyName);
80
+ if (!matchingColumn)
81
+ return rel;
82
+ const resolvedJoinColumn = matchingColumn.name ?? fkPropertyName;
83
+ return {
84
+ ...rel,
85
+ joinColumn: resolvedJoinColumn,
86
+ };
87
+ });
88
+ }
89
+ resolveOneToManyMetadata(entity) {
90
+ const oneToManyScanner = typedi_1.default.get(scanner_1.OneToManyScanner);
91
+ const allRelations = oneToManyScanner
92
+ .allMetadata()
93
+ .filter((rel) => rel.target === entity);
94
+ if (allRelations.length > 0) {
95
+ return allRelations;
96
+ }
97
+ const reflectMetadata = Reflect.getMetadata(decorators_1.ONE_TO_MANY_TOKEN, entity) ??
98
+ Reflect.getMetadata(decorators_1.ONE_TO_MANY_TOKEN, entity.prototype);
99
+ if (reflectMetadata && reflectMetadata.length > 0) {
100
+ this.logger.warn(`[resolveOneToManyMetadata] "${entity.name}" OneToMany resolved via Reflect.getMetadata fallback.`);
101
+ return reflectMetadata;
102
+ }
103
+ return [];
104
+ }
105
+ resolveManyToManyMetadata(entity) {
106
+ const manyToManyScanner = typedi_1.default.get(scanner_1.ManyToManyScanner);
107
+ const allRelations = manyToManyScanner
108
+ .allMetadata()
109
+ .filter((rel) => rel.target === entity);
110
+ if (allRelations.length > 0) {
111
+ return allRelations;
112
+ }
113
+ const reflectMetadata = Reflect.getMetadata(decorators_1.MANY_TO_MANY_TOKEN, entity) ??
114
+ Reflect.getMetadata(decorators_1.MANY_TO_MANY_TOKEN, entity.prototype);
115
+ if (reflectMetadata && reflectMetadata.length > 0) {
116
+ this.logger.warn(`[resolveManyToManyMetadata] "${entity.name}" ManyToMany resolved via Reflect.getMetadata fallback.`);
117
+ return reflectMetadata;
118
+ }
119
+ return [];
120
+ }
121
+ resolveOneToOneMetadata(entity) {
122
+ const oneToOneScanner = typedi_1.default.get(scanner_1.OneToOneScanner);
123
+ const allRelations = oneToOneScanner
124
+ .allMetadata()
125
+ .filter((rel) => rel.target === entity);
126
+ if (allRelations.length > 0) {
127
+ return this.resolveJoinColumnsFromColumnMetaForOneToOne(entity, allRelations);
128
+ }
129
+ const reflectMetadata = Reflect.getMetadata(decorators_1.ONE_TO_ONE_TOKEN, entity) ??
130
+ Reflect.getMetadata(decorators_1.ONE_TO_ONE_TOKEN, entity.prototype);
131
+ if (reflectMetadata && reflectMetadata.length > 0) {
132
+ this.logger.warn(`[resolveOneToOneMetadata] "${entity.name}" OneToOne resolved via Reflect.getMetadata fallback.`);
133
+ return this.resolveJoinColumnsFromColumnMetaForOneToOne(entity, reflectMetadata);
134
+ }
135
+ return [];
136
+ }
137
+ resolveJoinColumnsFromColumnMetaForOneToOne(entity, relations) {
138
+ const columnsMeta = Reflect.getMetadata(decorators_1.COLUMN_TOKEN, entity) ??
139
+ Reflect.getMetadata(decorators_1.COLUMN_TOKEN, entity.prototype) ??
140
+ [];
141
+ if (columnsMeta.length === 0) {
142
+ return relations;
143
+ }
144
+ return relations.map((rel) => {
145
+ if (rel.joinColumn)
146
+ return rel;
147
+ const fkPropertyName = `${rel.propertyKey}Id`;
148
+ const matchingColumn = columnsMeta.find((col) => col.propertyKey === fkPropertyName);
149
+ if (!matchingColumn)
150
+ return rel;
151
+ const resolvedJoinColumn = matchingColumn.name ?? fkPropertyName;
152
+ return {
153
+ ...rel,
154
+ joinColumn: resolvedJoinColumn,
155
+ };
156
+ });
157
+ }
158
+ resolveManyToManyJoinTable(rel) {
159
+ if (rel.joinTable) {
160
+ return {
161
+ joinTableName: rel.joinTable.name,
162
+ joinColumn: rel.joinTable.joinColumn,
163
+ inverseJoinColumn: rel.joinTable.inverseJoinColumn,
164
+ };
165
+ }
166
+ if (rel.mappedBy) {
167
+ const RelatedEntity = rel.getRelatedEntity();
168
+ const relatedManyToMany = this.resolveManyToManyMetadata(RelatedEntity);
169
+ const ownerRel = relatedManyToMany.find((r) => r.propertyKey === rel.mappedBy && r.joinTable);
170
+ if (ownerRel?.joinTable) {
171
+ return {
172
+ joinTableName: ownerRel.joinTable.name,
173
+ joinColumn: ownerRel.joinTable.inverseJoinColumn,
174
+ inverseJoinColumn: ownerRel.joinTable.joinColumn,
175
+ };
176
+ }
177
+ }
178
+ return null;
179
+ }
180
+ }
181
+ exports.RelationMetadataResolver = RelationMetadataResolver;
182
+ //# sourceMappingURL=RelationMetadataResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RelationMetadataResolver.js","sourceRoot":"","sources":["../../src/core/RelationMetadataResolver.ts"],"names":[],"mappings":";;;;;;AACA,4BAA0B;AAC1B,oCAA6C;AAC7C,wCAQoB;AACpB,oDAA+B;AAC/B,8CAeuB;AACvB,iEAA8D;AAM9D,MAAa,wBAAwB;IAArC;QACmB,WAAM,GAAG,IAAI,cAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IA2WtE,CAAC;IAlWC,qBAAqB,CACnB,MAAoB;QAEpB,MAAM,OAAO,GAAG,iCAAe,CAAC,QAAQ,EAAE;YACxC,CAAC,CAAC,iCAAe,CAAC,gBAAgB,EAAE;YACpC,CAAC,CAAC,QAAQ,CAAC;QAGb,MAAM,aAAa,GAAG,gBAAS,CAAC,GAAG,CAAC,uBAAa,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,eAAe,CAAC;QACzB,CAAC;QAGD,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,yBAAY,EAAE,MAAM,CAEnD,CAAC;QAEd,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,4BAA4B,MAAM,CAAC,IAAI,0DAA0D,OAAO,MAAM;gBAC5G,iDAAiD,CACpD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,4BAA4B,MAAM,CAAC,IAAI,iDAAiD,OAAO,IAAI,CACpG,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,IAAI,IAAI,CAAC;IACjC,CAAC;IAMD,kBAAkB,CAAI,MAAoB;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,6BAAgB,EAAE,MAAM,CAE9C,CAAC;QACd,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAKD,wBAAwB,CAAI,MAAoB;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,mCAAsB,EAAE,MAAM,CAEpD,CAAC;QACd,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAKD,wBAAwB,CAAI,MAAoB;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,mCAAsB,EAAE,MAAM,CAEpD,CAAC;QACd,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAMD,gBAAgB,CAAI,MAAoB;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,0BAAa,EAAE,MAAM,CAE3C,CAAC;QACd,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IASD,wBAAwB,CACtB,MAAoB;QAGpB,MAAM,gBAAgB,GAAG,gBAAS,CAAC,GAAG,CAAC,0BAAgB,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,gBAAgB;aAClC,WAAW,EAA0B;aACrC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE1C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC;QAGD,MAAM,eAAe,GAClB,OAAO,CAAC,WAAW,CAAC,8BAAiB,EAAE,MAAM,CAEhC;YACb,OAAO,CAAC,WAAW,CAAC,8BAAiB,EAAE,MAAM,CAAC,SAAS,CAE1C,CAAC;QAEjB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,+BAA+B,MAAM,CAAC,IAAI,wDAAwD,CACnG,CAAC;YACF,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAWD,gCAAgC,CAC9B,MAAsB,EACtB,SAAmC;QAGnC,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,CAAC,yBAAY,EAAE,MAAM,CAAC;YACzC,OAAO,CAAC,WAAW,CAAC,yBAAY,EAAE,MAAM,CAAC,SAAS,CAAC;YACnD,EAAE,CAAC;QAEL,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAE3B,IAAI,GAAG,CAAC,UAAU;gBAAE,OAAO,GAAG,CAAC;YAG/B,MAAM,cAAc,GAAG,GAAG,GAAG,CAAC,UAAU,IAAI,CAAC;YAC7C,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CACrC,CAAC,GAAmB,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,cAAc,CAC5D,CAAC;YAEF,IAAI,CAAC,cAAc;gBAAE,OAAO,GAAG,CAAC;YAGhC,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAC;YAEjE,OAAO;gBACL,GAAG,GAAG;gBACN,UAAU,EAAE,kBAAkB;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IASD,wBAAwB,CACtB,MAAoB;QAGpB,MAAM,gBAAgB,GAAG,gBAAS,CAAC,GAAG,CAAC,0BAAgB,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,gBAAgB;aAClC,WAAW,EAA0B;aACrC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE1C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,YAAY,CAAC;QACtB,CAAC;QAGD,MAAM,eAAe,GAClB,OAAO,CAAC,WAAW,CAAC,8BAAiB,EAAE,MAAM,CAEhC;YACb,OAAO,CAAC,WAAW,CAAC,8BAAiB,EAAE,MAAM,CAAC,SAAS,CAE1C,CAAC;QAEjB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,+BAA+B,MAAM,CAAC,IAAI,wDAAwD,CACnG,CAAC;YACF,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IASD,yBAAyB,CACvB,MAAoB;QAGpB,MAAM,iBAAiB,GAAG,gBAAS,CAAC,GAAG,CAAC,2BAAiB,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,iBAAiB;aACnC,WAAW,EAA2B;aACtC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE1C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,YAAY,CAAC;QACtB,CAAC;QAGD,MAAM,eAAe,GAClB,OAAO,CAAC,WAAW,CAAC,+BAAkB,EAAE,MAAM,CAEjC;YACb,OAAO,CAAC,WAAW,CAAC,+BAAkB,EAAE,MAAM,CAAC,SAAS,CAE3C,CAAC;QAEjB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,gCAAgC,MAAM,CAAC,IAAI,yDAAyD,CACrG,CAAC;YACF,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IASD,uBAAuB,CACrB,MAAoB;QAGpB,MAAM,eAAe,GAAG,gBAAS,CAAC,GAAG,CAAC,yBAAe,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,eAAe;aACjC,WAAW,EAAyB;aACpC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE1C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,2CAA2C,CACrD,MAAM,EACN,YAAY,CACb,CAAC;QACJ,CAAC;QAGD,MAAM,eAAe,GAClB,OAAO,CAAC,WAAW,CAAC,6BAAgB,EAAE,MAAM,CAE/B;YACb,OAAO,CAAC,WAAW,CAAC,6BAAgB,EAAE,MAAM,CAAC,SAAS,CAEzC,CAAC;QAEjB,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,8BAA8B,MAAM,CAAC,IAAI,uDAAuD,CACjG,CAAC;YACF,OAAO,IAAI,CAAC,2CAA2C,CACrD,MAAM,EACN,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAMD,2CAA2C,CACzC,MAAsB,EACtB,SAAkC;QAElC,MAAM,WAAW,GACf,OAAO,CAAC,WAAW,CAAC,yBAAY,EAAE,MAAM,CAAC;YACzC,OAAO,CAAC,WAAW,CAAC,yBAAY,EAAE,MAAM,CAAC,SAAS,CAAC;YACnD,EAAE,CAAC;QAEL,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,UAAU;gBAAE,OAAO,GAAG,CAAC;YAE/B,MAAM,cAAc,GAAG,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC;YAC9C,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CACrC,CAAC,GAAmB,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,cAAc,CAC5D,CAAC;YAEF,IAAI,CAAC,cAAc;gBAAE,OAAO,GAAG,CAAC;YAEhC,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAC;YAEjE,OAAO;gBACL,GAAG,GAAG;gBACN,UAAU,EAAE,kBAAkB;aAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAMD,0BAA0B,CAAI,GAA4B;QAKxD,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,OAAO;gBACL,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI;gBACjC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU;gBACpC,iBAAiB,EAAE,GAAG,CAAC,SAAS,CAAC,iBAAiB;aACnD,CAAC;QACJ,CAAC;QAGD,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YACjB,MAAM,aAAa,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;YAC7C,MAAM,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,CACrD,CAAC;YACF,IAAI,QAAQ,EAAE,SAAS,EAAE,CAAC;gBAExB,OAAO;oBACL,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI;oBACtC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,iBAAiB;oBAChD,iBAAiB,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU;iBACjD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA5WD,4DA4WC"}
@@ -0,0 +1,11 @@
1
+ import { ReplicationRouter, ReplicationNodeConfig, ReplicationConfig } from "../dialects/ReplicationRouter";
2
+ export declare class ReplicationManager {
3
+ private router;
4
+ initialize(config: ReplicationConfig): void;
5
+ getReadNode(useMaster?: boolean): ReplicationNodeConfig | null;
6
+ getWriteNode(): ReplicationNodeConfig | null;
7
+ get isEnabled(): boolean;
8
+ getRouter(): ReplicationRouter | null;
9
+ shutdown(): void;
10
+ }
11
+ //# sourceMappingURL=ReplicationManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplicationManager.d.ts","sourceRoot":"","sources":["../../src/core/ReplicationManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,+BAA+B,CAAC;AAMvC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAEhD,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAI3C,WAAW,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,qBAAqB,GAAG,IAAI;IAM9D,YAAY,IAAI,qBAAqB,GAAG,IAAI;IAK5C,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,SAAS,IAAI,iBAAiB,GAAG,IAAI;IAIrC,QAAQ,IAAI,IAAI;CAMjB"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReplicationManager = void 0;
4
+ const ReplicationRouter_1 = require("../dialects/ReplicationRouter");
5
+ class ReplicationManager {
6
+ constructor() {
7
+ this.router = null;
8
+ }
9
+ initialize(config) {
10
+ this.router = new ReplicationRouter_1.ReplicationRouter(config);
11
+ }
12
+ getReadNode(useMaster) {
13
+ if (!this.router)
14
+ return null;
15
+ if (useMaster)
16
+ return this.router.getWriteNode();
17
+ return this.router.getReadNode();
18
+ }
19
+ getWriteNode() {
20
+ if (!this.router)
21
+ return null;
22
+ return this.router.getWriteNode();
23
+ }
24
+ get isEnabled() {
25
+ return this.router !== null;
26
+ }
27
+ getRouter() {
28
+ return this.router;
29
+ }
30
+ shutdown() {
31
+ if (this.router) {
32
+ this.router.resetFailedSlaves();
33
+ this.router = null;
34
+ }
35
+ }
36
+ }
37
+ exports.ReplicationManager = ReplicationManager;
38
+ //# sourceMappingURL=ReplicationManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReplicationManager.js","sourceRoot":"","sources":["../../src/core/ReplicationManager.ts"],"names":[],"mappings":";;;AAAA,qEAIuC;AAMvC,MAAa,kBAAkB;IAA/B;QACU,WAAM,GAA6B,IAAI,CAAC;IA+BlD,CAAC;IA7BC,UAAU,CAAC,MAAyB;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,qCAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW,CAAC,SAAmB;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;CACF;AAhCD,gDAgCC"}
@@ -0,0 +1,15 @@
1
+ import "reflect-metadata";
2
+ import { ClazzType } from "../utils";
3
+ import { RelationMetadataResolver } from "./RelationMetadataResolver";
4
+ import { EntityManagerInternals } from "./EntityManagerInternals";
5
+ export declare class SchemaRegistrar {
6
+ private readonly resolver;
7
+ private readonly ctx;
8
+ constructor(resolver: RelationMetadataResolver, ctx: EntityManagerInternals);
9
+ registerEntities(): Promise<void>;
10
+ registerUniqueIndexes(TargetEntity: ClazzType<any>, tableName: string): Promise<void>;
11
+ registerManyToManyJoinTables(entities: ClazzType<any>[]): Promise<void>;
12
+ registerForeignKeys(TargetEntity: ClazzType<any>, tableName: string): Promise<void>;
13
+ registerIndex(TargetEntity: ClazzType<any>, tableName: string): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=SchemaRegistrar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaRegistrar.d.ts","sourceRoot":"","sources":["../../src/core/SchemaRegistrar.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAC;AAwBrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAMlE,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,QAAQ,EAAE,wBAAwB,EAClC,GAAG,EAAE,sBAAsB;IAGxC,gBAAgB;IA2EhB,qBAAqB,CACzB,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,EAC5B,SAAS,EAAE,MAAM;IAuCb,4BAA4B,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE;IAyFvD,mBAAmB,CACvB,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,EAC5B,SAAS,EAAE,MAAM;IA4Ib,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM;CA4BpE"}