chore(): upgrade mikro orm (#13450)

This commit is contained in:
Adrien de Peretti
2025-09-19 21:39:18 +02:00
committed by GitHub
parent 4c1c1dd4c0
commit 8ece06d8ed
64 changed files with 836 additions and 700 deletions
+5 -5
View File
@@ -27,16 +27,16 @@
"license": "MIT",
"devDependencies": {
"@medusajs/framework": "2.10.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"awilix": "^8.0.1",
"expect-type": "^0.20.0",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
},
+11 -11
View File
@@ -56,10 +56,10 @@
"devDependencies": {
"@aws-sdk/client-dynamodb": "^3.218.0",
"@medusajs/cli": "2.10.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"@types/cors": "^2.8.17",
@@ -68,7 +68,7 @@
"connect-dynamodb": "^3.0.5",
"ioredis": "^5.4.1",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^3.0.2",
"supertest": "^4.0.2",
"typescript": "^5.6.2",
@@ -103,15 +103,15 @@
"peerDependencies": {
"@aws-sdk/client-dynamodb": "^3.218.0",
"@medusajs/cli": "2.10.3",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.4",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"awilix": "^8.0.1",
"connect-dynamodb": "^3.0.5",
"ioredis": "^5.4.1",
"pg": "^8.13.0",
"pg": "^8.16.3",
"vite": "^5.4.14"
},
"peerDependenciesMeta": {
+1 -1
View File
@@ -29,13 +29,13 @@
"author": "Medusa",
"license": "MIT",
"devDependencies": {
"@medusajs/types": "2.10.3",
"jest": "^29.7.0",
"msw": "^2.3.0",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
},
"dependencies": {
"@medusajs/types": "2.10.3",
"fetch-event-stream": "^0.1.5",
"qs": "^6.12.1"
},
+11 -11
View File
@@ -31,31 +31,31 @@
"watch": "tsc --build --watch"
},
"devDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@medusajs/types": "2.10.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"awilix": "^8.0.1",
"cross-env": "^5.2.1",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
},
"dependencies": {
"@medusajs/orchestration": "2.10.3",
"@medusajs/types": "2.10.3",
"@medusajs/utils": "2.10.3"
},
"peerDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
}
}
@@ -36,7 +36,7 @@ export function toRemoteQuery<const TEntity extends string>(
pagination?: Partial<RemoteQueryInput<TEntity>["pagination"]>
context?: Record<string, any>
withDeleted?: boolean
strategy?: "joined" | "select-in"
strategy?: "joined" | "select-in" | "balanced"
},
entitiesMap: Map<string, any>
): RemoteQueryGraph<TEntity> {
+11 -11
View File
@@ -26,31 +26,31 @@
"author": "Medusa",
"license": "MIT",
"devDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@medusajs/types": "2.10.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"awilix": "^8.0.1",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
},
"dependencies": {
"@medusajs/types": "2.10.3",
"@medusajs/utils": "2.10.3",
"ulid": "^2.3.0"
},
"peerDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",
@@ -479,7 +479,7 @@ export class RemoteJoiner {
if (Object.keys(service_.fieldAlias!).length) {
const conflictAliases = Array.from(
service_.relationships!.keys()
).filter((alias) => fieldAlias[alias])
).filter((alias) => fieldAlias[alias as string])
if (conflictAliases.length) {
throw new Error(
+1 -1
View File
@@ -55,7 +55,7 @@ export interface OptionsQuery<T> {
/**
* Load strategy (e.g for mikro orm it accept select-in or joined)
*/
strategy?: "select-in" | "joined" | (string & {})
strategy?: "select-in" | "joined" | "balanced" | (string & {})
}
/**
@@ -74,7 +74,7 @@ export type RemoteQueryInput<TEntry extends string> =
/**
* Strategy will be send to the entry module called method
*/
strategy?: "joined" | "select-in"
strategy?: "joined" | "select-in" | "balanced"
}
: {
/**
@@ -119,7 +119,7 @@ export type RemoteQueryInput<TEntry extends string> =
/**
* Strategy will be send to the entry module called method
*/
strategy?: "joined" | "select-in"
strategy?: "joined" | "select-in" | "balanced"
}
export type RemoteQueryGraph<TEntry extends string> = {
+11 -11
View File
@@ -26,10 +26,11 @@
"author": "Medusa",
"license": "MIT",
"devDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@medusajs/types": "2.10.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"@types/express": "^4.17.21",
@@ -37,7 +38,7 @@
"expect-type": "^0.20.0",
"express": "^4.21.0",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"pg-god": "^1.0.12",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
@@ -47,7 +48,6 @@
"@graphql-codegen/typescript": "^4.0.9",
"@graphql-tools/merge": "^9.0.7",
"@graphql-tools/schema": "^10.0.6",
"@medusajs/types": "2.10.3",
"@types/pluralize": "^0.0.33",
"bignumber.js": "^9.1.2",
"dotenv": "^16.4.5",
@@ -60,13 +60,13 @@
"zod": "3.25.76"
},
"peerDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",
@@ -1,6 +1,6 @@
import { BigNumberInput } from "@medusajs/types"
import { Property } from "@mikro-orm/core"
import { isDefined, isPresent, trimZeros } from "../../common"
import { EntityProperty, Platform, Property, Type } from "@mikro-orm/core"
import { isDefined, isObject, isPresent, trimZeros } from "../../common"
import { BigNumber } from "../../totals/big-number"
export function MikroOrmBigNumberProperty(
@@ -24,6 +24,11 @@ export function MikroOrmBigNumberProperty(
return value
},
set(value: BigNumberInput) {
// convert 'null' to null
if (value === "null") {
value = null as unknown as BigNumberInput
}
if (options?.nullable && !isPresent(value)) {
this.__helper.__data[columnName] = null
this.__helper.__data[rawColumnName] = null
@@ -89,7 +94,7 @@ export function MikroOrmBigNumberProperty(
})
Property({
type: "any",
type: BigNumberNumeric,
columnType: "numeric",
trackChanges: false,
runtimeType: "any",
@@ -97,3 +102,43 @@ export function MikroOrmBigNumberProperty(
})(target, columnName)
}
}
class BigNumberNumeric extends Type<string | number, string> {
constructor(public mode?: "number" | "string") {
super()
}
override convertToJSValue(value: string): number | string {
if ((this.mode ?? this.prop?.runtimeType) === "number") {
return +value
}
if (isObject(value)) {
return value // Special case for BigNumberRawValue because the setter will manage the dispatch automatically at a later stage
}
return String(value)
}
override compareValues(a: string, b: string): boolean {
return this.format(a) === this.format(b)
}
private format(val: string | number) {
/* istanbul ignore next */
if (this.prop?.scale == null) {
return +val
}
const base = Math.pow(10, this.prop.scale)
return Math.round((+val + Number.EPSILON) * base) / base
}
override getColumnType(prop: EntityProperty, platform: Platform) {
return platform.getDecimalTypeDeclarationSQL(prop)
}
override compareAsType(): string {
return this.mode ?? this.prop?.runtimeType ?? "string"
}
}
@@ -59,15 +59,15 @@ export class MikroOrmBase {
async transaction<TManager = unknown>(
task: (transactionManager: TManager) => Promise<any>,
options: {
manager?: TManager
isolationLevel?: string
enableNestedTransactions?: boolean
transaction?: TManager
} = {}
): Promise<any> {
this.manager_.global = true
return await transactionWrapper(this.manager_, task, options).catch(
dbErrorMapper
)
const manager = this.getFreshManager()
return await transactionWrapper(manager, task, options).catch(dbErrorMapper)
}
async serialize<TOutput extends object | object[]>(
@@ -463,12 +463,9 @@ export function mikroOrmBaseRepositoryFactory<const T extends object>(
if (!("strategy" in findOptions_.options)) {
if (findOptions_.options.limit != null || findOptions_.options.offset) {
// TODO: from 7+ it will be the default strategy
Object.assign(findOptions_.options, {
strategy: LoadStrategy.SELECT_IN,
})
} else {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.JOINED,
strategy: LoadStrategy.BALANCED,
})
}
}
@@ -162,7 +162,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
raw_spend_limit: {
@@ -306,7 +306,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
raw_spend_limit: {
@@ -441,7 +441,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
raw_spend_limit: {
@@ -555,7 +555,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
raw_spend_limit: {
@@ -701,7 +701,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
raw_spend_limit: {
@@ -858,7 +858,7 @@ describe("Entity builder", () => {
kind: "scalar",
setter: true,
trackChanges: false,
type: "any",
type: expect.any(Function),
runtimeType: "any",
},
created_at: {
@@ -6,7 +6,7 @@ import type {
Infer,
PropertyType,
} from "@medusajs/types"
import { Entity, Filter } from "@mikro-orm/core"
import { Entity, Filter, MetadataStorage } from "@mikro-orm/core"
import {
mikroOrmFreeTextSearchFilterOptionsFactory,
@@ -116,12 +116,16 @@ function createMikrORMEntity() {
Filter(mikroOrmFreeTextSearchFilterOptionsFactory(modelName))(
MikroORMEntity
)
const RegisteredEntity = Entity({ tableName })(
Filter(mikroOrmSoftDeletableFilterOptions)(MikroORMEntity)
) as Infer<T>
ENTITIES[modelName] = RegisteredEntity
return RegisteredEntity
Entity({ tableName })(
Filter(mikroOrmSoftDeletableFilterOptions)(MikroORMEntity)
) as any
const entityMetadata =
MetadataStorage.getMetadataFromDecorator(MikroORMEntity)
ENTITIES[modelName] = entityMetadata.class as Constructor<any>
return entityMetadata.class as Infer<T>
}
/**
@@ -16,6 +16,7 @@ describe("Internal Module Service Factory", () => {
[modelRepositoryName]: {
transaction: (task) => task(),
getFreshManager: jest.fn().mockReturnThis(),
getActiveManager: jest.fn().mockReturnThis(),
find: jest.fn(),
findAndCount: jest.fn(),
create: jest.fn(),
@@ -28,6 +29,7 @@ describe("Internal Module Service Factory", () => {
[`composite${Model.name}Repository`]: {
transaction: (task) => task(),
getFreshManager: jest.fn().mockReturnThis(),
getActiveManager: jest.fn().mockReturnThis(),
find: jest.fn(),
findAndCount: jest.fn(),
create: jest.fn(),
@@ -7,6 +7,7 @@ const baseRepoMock = {
serialize: jest.fn().mockImplementation((item) => item),
transaction: (task) => task("transactionManager"),
getFreshManager: jest.fn().mockReturnThis(),
getActiveManager: jest.fn().mockReturnThis(),
}
const defaultContext = {
@@ -23,7 +23,7 @@ export function InjectManager(managerProperty?: string): MethodDecorator {
const originalContext = args[argIndex] ?? {}
const copiedContext = {} as Context
for (const key in originalContext) {
if (key === "manager" || key === "transactionManager") {
if (key === "transactionManager") {
continue
}
@@ -51,8 +51,8 @@ export function InjectManager(managerProperty?: string): MethodDecorator {
)
}
copiedContext.manager =
originalContext.manager ?? resourceWithManager.getFreshManager()
copiedContext.manager ??=
resourceWithManager.getFreshManager(originalContext)
if (originalContext?.transactionManager) {
copiedContext.transactionManager = originalContext?.transactionManager
@@ -35,7 +35,7 @@ export function InjectTransactionManager(
async (transactionManager) => {
const copiedContext = {} as Context
for (const key in originalContext) {
if (key === "manager" || key === "transactionManager") {
if (key === "transactionManager") {
continue
}
@@ -52,10 +52,6 @@ export function InjectTransactionManager(
copiedContext.transactionManager = transactionManager
if (originalContext?.manager) {
copiedContext.manager = originalContext?.manager
}
copiedContext.__type = MedusaContextType
args[argIndex] = copiedContext
@@ -63,6 +59,7 @@ export function InjectTransactionManager(
return await originalMethod.apply(this, args)
},
{
manager: originalContext?.manager,
transaction: originalContext?.transactionManager,
isolationLevel: (originalContext as Context)?.isolationLevel,
enableNestedTransactions:
+11 -11
View File
@@ -27,16 +27,17 @@
"author": "Medusa",
"license": "MIT",
"devDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@medusajs/types": "2.10.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"awilix": "^8.0.1",
"expect-type": "^0.20.0",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^5.0.1",
"typescript": "^5.6.2",
"zod": "3.25.76"
@@ -44,18 +45,17 @@
"dependencies": {
"@medusajs/modules-sdk": "2.10.3",
"@medusajs/orchestration": "2.10.3",
"@medusajs/types": "2.10.3",
"@medusajs/utils": "2.10.3",
"ulid": "^2.3.0"
},
"peerDependencies": {
"@mikro-orm/core": "6.4.3",
"@mikro-orm/knex": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.4",
"@mikro-orm/knex": "6.5.4",
"@mikro-orm/migrations": "6.5.4",
"@mikro-orm/postgresql": "6.5.4",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",