Skip to content

Commit a939654

Browse files
authored
fix: remove dynamic require calls (#10196)
1 parent f6b87e3 commit a939654

File tree

4 files changed

+57
-30
lines changed

4 files changed

+57
-30
lines changed

src/data-source/DataSource.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ import { RelationIdLoader } from "../query-builder/RelationIdLoader"
4040
import { DriverUtils } from "../driver/DriverUtils"
4141
import { InstanceChecker } from "../util/InstanceChecker"
4242
import { ObjectLiteral } from "../common/ObjectLiteral"
43+
import { registerQueryBuilders } from "../query-builder"
44+
45+
registerQueryBuilders()
4346

4447
/**
4548
* DataSource is a pre-defined connection configuration to a specific database.

src/platform/BrowserPlatformTools.template

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Buffer } from "buffer";
2+
13
/**
24
* Browser's implementation of the platform-specific tools.
35
*
@@ -164,8 +166,8 @@ interface Window {
164166
}
165167

166168
declare var window: Window;
167-
if (typeof window !== "undefined" && typeof require !== "undefined") {
168-
window.Buffer = require("buffer/").Buffer;
169+
if (typeof window !== "undefined") {
170+
window.Buffer = Buffer;
169171
}
170172
// NativeScript uses global, not window
171173
if (typeof global !== "undefined" && typeof require !== "undefined") {

src/query-builder/QueryBuilder.ts

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
8080
*/
8181
private parameterIndex = 0
8282

83+
/**
84+
* Contains all registered query builder classes.
85+
*/
86+
private static queryBuilderRegistry: Record<string, any> = {}
87+
8388
// -------------------------------------------------------------------------
8489
// Constructor
8590
// -------------------------------------------------------------------------
@@ -179,12 +184,9 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
179184
]
180185
}
181186

182-
// loading it dynamically because of circular issue
183-
const SelectQueryBuilderCls =
184-
require("./SelectQueryBuilder").SelectQueryBuilder
185187
if (InstanceChecker.isSelectQueryBuilder(this)) return this as any
186188

187-
return new SelectQueryBuilderCls(this)
189+
return QueryBuilder.queryBuilderRegistry["SelectQueryBuilder"](this)
188190
}
189191

190192
/**
@@ -193,12 +195,9 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
193195
insert(): InsertQueryBuilder<Entity> {
194196
this.expressionMap.queryType = "insert"
195197

196-
// loading it dynamically because of circular issue
197-
const InsertQueryBuilderCls =
198-
require("./InsertQueryBuilder").InsertQueryBuilder
199198
if (InstanceChecker.isInsertQueryBuilder(this)) return this as any
200199

201-
return new InsertQueryBuilderCls(this)
200+
return QueryBuilder.queryBuilderRegistry["InsertQueryBuilder"](this)
202201
}
203202

204203
/**
@@ -256,12 +255,9 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
256255
this.expressionMap.queryType = "update"
257256
this.expressionMap.valuesSet = updateSet
258257

259-
// loading it dynamically because of circular issue
260-
const UpdateQueryBuilderCls =
261-
require("./UpdateQueryBuilder").UpdateQueryBuilder
262258
if (InstanceChecker.isUpdateQueryBuilder(this)) return this as any
263259

264-
return new UpdateQueryBuilderCls(this)
260+
return QueryBuilder.queryBuilderRegistry["UpdateQueryBuilder"](this)
265261
}
266262

267263
/**
@@ -270,34 +266,25 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
270266
delete(): DeleteQueryBuilder<Entity> {
271267
this.expressionMap.queryType = "delete"
272268

273-
// loading it dynamically because of circular issue
274-
const DeleteQueryBuilderCls =
275-
require("./DeleteQueryBuilder").DeleteQueryBuilder
276269
if (InstanceChecker.isDeleteQueryBuilder(this)) return this as any
277270

278-
return new DeleteQueryBuilderCls(this)
271+
return QueryBuilder.queryBuilderRegistry["DeleteQueryBuilder"](this)
279272
}
280273

281274
softDelete(): SoftDeleteQueryBuilder<any> {
282275
this.expressionMap.queryType = "soft-delete"
283276

284-
// loading it dynamically because of circular issue
285-
const SoftDeleteQueryBuilderCls =
286-
require("./SoftDeleteQueryBuilder").SoftDeleteQueryBuilder
287277
if (InstanceChecker.isSoftDeleteQueryBuilder(this)) return this as any
288278

289-
return new SoftDeleteQueryBuilderCls(this)
279+
return QueryBuilder.queryBuilderRegistry["SoftDeleteQueryBuilder"](this)
290280
}
291281

292282
restore(): SoftDeleteQueryBuilder<any> {
293283
this.expressionMap.queryType = "restore"
294284

295-
// loading it dynamically because of circular issue
296-
const SoftDeleteQueryBuilderCls =
297-
require("./SoftDeleteQueryBuilder").SoftDeleteQueryBuilder
298285
if (InstanceChecker.isSoftDeleteQueryBuilder(this)) return this as any
299286

300-
return new SoftDeleteQueryBuilderCls(this)
287+
return QueryBuilder.queryBuilderRegistry["SoftDeleteQueryBuilder"](this)
301288
}
302289

303290
/**
@@ -335,12 +322,9 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
335322
this.expressionMap.setMainAlias(mainAlias)
336323
}
337324

338-
// loading it dynamically because of circular issue
339-
const RelationQueryBuilderCls =
340-
require("./RelationQueryBuilder").RelationQueryBuilder
341325
if (InstanceChecker.isRelationQueryBuilder(this)) return this as any
342326

343-
return new RelationQueryBuilderCls(this)
327+
return QueryBuilder.queryBuilderRegistry["RelationQueryBuilder"](this)
344328
}
345329

346330
/**
@@ -1650,4 +1634,8 @@ export abstract class QueryBuilder<Entity extends ObjectLiteral> {
16501634
protected hasCommonTableExpressions(): boolean {
16511635
return this.expressionMap.commonTableExpressions.length > 0
16521636
}
1637+
1638+
static registerQueryBuilderClass(name: string, factory: any) {
1639+
QueryBuilder.queryBuilderRegistry[name] = factory
1640+
}
16531641
}

src/query-builder/index.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { DeleteQueryBuilder } from "./DeleteQueryBuilder"
2+
import { InsertQueryBuilder } from "./InsertQueryBuilder"
3+
import { QueryBuilder } from "./QueryBuilder"
4+
import { RelationQueryBuilder } from "./RelationQueryBuilder"
5+
import { SelectQueryBuilder } from "./SelectQueryBuilder"
6+
import { SoftDeleteQueryBuilder } from "./SoftDeleteQueryBuilder"
7+
import { UpdateQueryBuilder } from "./UpdateQueryBuilder"
8+
9+
export function registerQueryBuilders() {
10+
QueryBuilder.registerQueryBuilderClass(
11+
"DeleteQueryBuilder",
12+
(qb: QueryBuilder<any>) => new DeleteQueryBuilder(qb),
13+
)
14+
QueryBuilder.registerQueryBuilderClass(
15+
"InsertQueryBuilder",
16+
(qb: QueryBuilder<any>) => new InsertQueryBuilder(qb),
17+
)
18+
QueryBuilder.registerQueryBuilderClass(
19+
"RelationQueryBuilder",
20+
(qb: QueryBuilder<any>) => new RelationQueryBuilder(qb),
21+
)
22+
QueryBuilder.registerQueryBuilderClass(
23+
"SelectQueryBuilder",
24+
(qb: QueryBuilder<any>) => new SelectQueryBuilder(qb),
25+
)
26+
QueryBuilder.registerQueryBuilderClass(
27+
"SoftDeleteQueryBuilder",
28+
(qb: QueryBuilder<any>) => new SoftDeleteQueryBuilder(qb),
29+
)
30+
QueryBuilder.registerQueryBuilderClass(
31+
"UpdateQueryBuilder",
32+
(qb: QueryBuilder<any>) => new UpdateQueryBuilder(qb),
33+
)
34+
}

0 commit comments

Comments
 (0)