From fc02edcfbff51ac4c3b622d0ffe0d01567886f63 Mon Sep 17 00:00:00 2001 From: Hieuzest Date: Wed, 9 Oct 2024 23:30:38 +0800 Subject: [PATCH] perf(minato): fix perf degradation accessing `database.types` --- packages/core/src/driver.ts | 2 ++ packages/mongo/src/builder.ts | 4 ++-- packages/sql-utils/src/index.ts | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/core/src/driver.ts b/packages/core/src/driver.ts index 3e420d52..afcb9239 100644 --- a/packages/core/src/driver.ts +++ b/packages/core/src/driver.ts @@ -78,10 +78,12 @@ export abstract class Driver { public database: Database public logger: Logger public types: Dict = Object.create(null) + public newtypes: Dict constructor(public ctx: C, public config: T) { this.database = ctx.model this.logger = ctx.logger(this.constructor.name) + this.newtypes = this.database.types ctx.on('ready', async () => { await Promise.resolve() diff --git a/packages/mongo/src/builder.ts b/packages/mongo/src/builder.ts index b3a1b725..778cf468 100644 --- a/packages/mongo/src/builder.ts +++ b/packages/mongo/src/builder.ts @@ -601,7 +601,7 @@ export class Builder { let res = value res = Type.transform(res, type, (value, type) => this.dump(value, type)) res = converter?.dump ? converter.dump(res) : res - const ancestor = this.driver.database.types[type.type]?.type + const ancestor = this.driver.newtypes[type.type]?.type res = this.dump(res, ancestor ? Type.fromField(ancestor) : undefined) return res } @@ -612,7 +612,7 @@ export class Builder { if (Type.isType(type) || isEvalExpr(type)) { type = Type.isType(type) ? type : Type.fromTerm(type) const converter = this.driver.types[type.type] - const ancestor = this.driver.database.types[type.type]?.type + const ancestor = this.driver.newtypes[type.type]?.type let res = this.load(value, ancestor ? Type.fromField(ancestor) : undefined) res = converter?.load ? converter.load(res) : res res = Type.transform(res, type, (value, type) => this.load(value, type)) diff --git a/packages/sql-utils/src/index.ts b/packages/sql-utils/src/index.ts index f4a208c5..ba87a643 100644 --- a/packages/sql-utils/src/index.ts +++ b/packages/sql-utils/src/index.ts @@ -333,7 +333,7 @@ export class Builder { */ protected transform(value: string, type: Type | Eval.Expr | undefined, method: 'encode' | 'decode' | 'load' | 'dump', miss?: any) { type = Type.isType(type) ? type : Type.fromTerm(type) - const transformer = this.transformers[type.type] ?? this.transformers[this.driver.database.types[type.type]?.type!] + const transformer = this.transformers[type.type] ?? this.transformers[this.driver.newtypes[type.type]?.type!] return transformer?.[method] ? transformer[method]!(value) : (miss ?? value) } @@ -584,7 +584,7 @@ export class Builder { let res = value res = Type.transform(res, type, (value, type) => this.dump(value, type, root)) res = converter?.dump ? converter.dump(res) : res - const ancestor = this.driver.database.types[type.type]?.type + const ancestor = this.driver.newtypes[type.type]?.type if (!root && !ancestor) res = this.transform(res, type, 'dump') res = this.dump(res, ancestor ? Type.fromField(ancestor) : undefined, root) return res @@ -608,7 +608,7 @@ export class Builder { if (Type.isType(type) || isEvalExpr(type)) { type = Type.isType(type) ? type : Type.fromTerm(type) const converter = this.driver.types[(root && value && type.type === 'json') ? 'json' : type.type] - const ancestor = this.driver.database.types[type.type]?.type + const ancestor = this.driver.newtypes[type.type]?.type let res = this.load(value, ancestor ? Type.fromField(ancestor) : undefined, root) res = this.transform(res, type, 'load') res = converter?.load ? converter.load(res) : res