chore(): Upgrade mikro orm (#13390)

* chore(): Upgrade mikro orm

* handle 'null' value for big number props

* 6.5.2

* remove only

* fix pricing module rule value

* switch select in strategy for balances

* revert to select in strategy for order module

* fix defining DML ManyToOne

* fix define relationship

* test fix

* more fixes

* change order strategy to balanced

* change order strategy to balanced

* prevent unnecessary manager fork

* revert generated www changes

* remove unnecessary changes

* Create real-cobras-deny.md

* address feedback

---------

Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Adrien de Peretti
2025-09-08 21:10:44 +02:00
committed by GitHub
parent fc4d5f0ac9
commit a095245d71
60 changed files with 863 additions and 712 deletions

View File

@@ -0,0 +1,23 @@
---
"@medusajs/medusa": patch
"@medusajs/test-utils": patch
"@medusajs/api-key": patch
"@medusajs/auth": patch
"@medusajs/cart": patch
"@medusajs/currency": patch
"@medusajs/customer": patch
"@medusajs/file": patch
"@medusajs/fulfillment": patch
"@medusajs/index": patch
"@medusajs/core-flows": patch
"@medusajs/framework": patch
"@medusajs/modules-sdk": patch
"@medusajs/orchestration": patch
"@medusajs/types": patch
"@medusajs/utils": patch
"@medusajs/workflows-sdk": patch
"create-medusa-app": patch
"@medusajs/cli": patch
---
chore(): Upgrade mikro orm 6.5.2

View File

@@ -84,7 +84,7 @@
"resolutions": {
"@redocly/cli/react": "^17.0.1",
"@redocly/cli/react-dom": "^17.0.1",
"pg": "8.11.3",
"pg": "8.16.3",
"@changesets/assemble-release-plan@^6.0.0": "patch:@changesets/assemble-release-plan@npm:^6.0.0#.yarn/patches/changesets.patch"
}
}

View File

@@ -23,7 +23,7 @@
"node-fetch": "^3.3.1",
"open": "^9.1.0",
"ora": "^6.3.0",
"pg": "^8.11.3",
"pg": "^8.16.3",
"slugify": "^1.6.6",
"uuid": "^9.0.0",
"validator": "^13.9.0",

View File

@@ -32,16 +32,16 @@
"author": "Sebastian Rindom",
"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",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"@types/yargs": "^15.0.15",
"awilix": "^8.0.1",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"rimraf": "^5.0.1",
"typescript": "^5.6.2"
},
@@ -62,7 +62,7 @@
"is-valid-path": "^0.1.1",
"meant": "^1.0.3",
"ora": "^5.4.1",
"pg": "^8.11.3",
"pg": "^8.16.3",
"pg-god": "^1.0.12",
"prompts": "^2.4.2",
"resolve-cwd": "^3.0.0",
@@ -72,12 +72,12 @@
"yargs": "^15.3.1"
},
"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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"gitHead": "81a7ff73d012fda722f6e9ef0bd9ba0232d37808"
}

View File

@@ -27,16 +27,16 @@
"license": "MIT",
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@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"
},

View File

@@ -56,10 +56,10 @@
"devDependencies": {
"@aws-sdk/client-dynamodb": "^3.218.0",
"@medusajs/cli": "2.10.1",
"@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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@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.1",
"@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.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"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": {

View File

@@ -31,16 +31,16 @@
"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",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@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"
},
@@ -50,12 +50,12 @@
"@medusajs/utils": "2.10.1"
},
"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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
}
}

View File

@@ -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> {

View File

@@ -26,15 +26,15 @@
"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",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@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"
},
@@ -44,13 +44,13 @@
"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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",

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 & {})
}
/**

View File

@@ -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> = {

View File

@@ -26,10 +26,10 @@
"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",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"@types/express": "^4.17.21",
@@ -37,7 +37,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"
@@ -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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",

View File

@@ -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"
}
}

View File

@@ -64,11 +64,9 @@ export class MikroOrmBase {
transaction?: TManager
} = {}
): Promise<any> {
const freshManager = this.getFreshManager
? this.getFreshManager()
: this.manager_
this.manager_.global = true // this prevent mikro orm from synchronising the transaction manager entity map back to the manager. Also, it will save us from always forking the manager for each transaction while the transacation manager will fork it again for transaction purpose
return await transactionWrapper(freshManager, task, options).catch(
return await transactionWrapper(this.manager_, task, options).catch(
dbErrorMapper
)
}
@@ -467,11 +465,7 @@ export function mikroOrmBaseRepositoryFactory<const T extends object>(
if (!("strategy" in findOptions_.options)) {
if (findOptions_.options.limit != null || findOptions_.options.offset) {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.SELECT_IN,
})
} else {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.JOINED,
strategy: LoadStrategy.BALANCED,
})
}
}

View File

@@ -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: {
@@ -3916,6 +3916,7 @@ describe("Entity builder", () => {
type: "string",
},
group: {
defaultRaw: "",
entity: "Group",
fieldName: "group_id",
name: "group",
@@ -4536,6 +4537,7 @@ describe("Entity builder", () => {
setter: false,
},
user: {
defaultRaw: "",
entity: "User",
fieldName: "user_id",
name: "user",
@@ -5147,6 +5149,7 @@ describe("Entity builder", () => {
setter: false,
},
user: {
defaultRaw: "",
name: "user",
kind: "m:1",
entity: "User",
@@ -5336,6 +5339,7 @@ describe("Entity builder", () => {
setter: false,
},
user: {
defaultRaw: "",
name: "user",
kind: "m:1",
fieldName: "user_id",
@@ -5884,6 +5888,7 @@ describe("Entity builder", () => {
setter: false,
},
parent: {
defaultRaw: "",
name: "parent",
fieldName: "parent_id",
kind: "m:1",
@@ -6135,6 +6140,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -6204,6 +6210,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
inversedBy: "teams",
@@ -6316,6 +6323,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -6385,6 +6393,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -6611,6 +6620,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -6680,6 +6690,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -6792,6 +6803,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -6861,6 +6873,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -6991,6 +7004,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -6999,6 +7013,7 @@ describe("Entity builder", () => {
mappedBy: "users",
},
activeTeams: {
defaultRaw: "",
kind: "m:n",
name: "activeTeams",
entity: "Team",
@@ -7068,6 +7083,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -7076,6 +7092,7 @@ describe("Entity builder", () => {
inversedBy: "teams",
},
activeTeamsUsers: {
defaultRaw: "",
kind: "m:n",
name: "activeTeamsUsers",
entity: "User",
@@ -7191,6 +7208,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -7261,6 +7279,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -7349,6 +7368,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "TeamSquad",
@@ -7418,6 +7438,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "RandomUser",
@@ -7533,6 +7554,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",
@@ -7602,6 +7624,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
owner: false,
@@ -7811,6 +7834,7 @@ describe("Entity builder", () => {
setter: false,
},
users: {
defaultRaw: "",
kind: "m:n",
name: "users",
entity: "User",
@@ -7880,6 +7904,7 @@ describe("Entity builder", () => {
setter: false,
},
teams: {
defaultRaw: "",
kind: "m:n",
name: "teams",
entity: "Team",

View File

@@ -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>
}
/**

View File

@@ -294,6 +294,7 @@ export function defineHasManyRelationship(
}
OneToMany(options)(MikroORMEntity.prototype, relationship.name)
// MikroORMEntity.prototype[relationship.name] = new Collection(MikroORMEntity)
}
/**
@@ -466,6 +467,7 @@ export function defineBelongsToRelationship(
ManyToOne({
entity: relatedModelName,
defaultRaw: "", // This is a workaround since we are hacking mikro orm default behavior. The default value here is [Object object] which pass the check here and in turns is returned as a returning field -> @mikro-orm/knex/AbstractSqlDriver.js:462
fieldName: foreignKeyName,
persist: false,
nullable: relationship.nullable,
@@ -741,6 +743,7 @@ export function defineManyToManyRelationship(
const manytoManyOptions = {
owner: isOwner,
entity: relatedModelName,
defaultRaw: "", // This is a workaround since we are hacking mikro orm default behavior. The default value here is [Object object] which pass the check here and in turns is returned as a returning field -> @mikro-orm/knex/AbstractSqlDriver.js:462
...(pivotTableName
? {
pivotTable: pgSchema

View File

@@ -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(),

View File

@@ -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 = {

View File

@@ -52,7 +52,8 @@ export function InjectManager(managerProperty?: string): MethodDecorator {
}
copiedContext.manager =
originalContext.manager ?? resourceWithManager.getFreshManager()
originalContext.manager ??
resourceWithManager.getActiveManager(originalContext)
if (originalContext?.transactionManager) {
copiedContext.transactionManager = originalContext?.transactionManager

View File

@@ -27,16 +27,16 @@
"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",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@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"
@@ -49,13 +49,13 @@
"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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"express": "^4.21.0",
"pg": "^8.13.0"
"pg": "^8.16.3"
},
"scripts": {
"build": "rimraf dist && tsc --build",

View File

@@ -26,13 +26,13 @@
"license": "MIT",
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"jest": "^29.7.0",
"pg": "^8.13.0",
"pg": "^8.16.3",
"pg-god": "^1.0.12",
"rimraf": "^3.0.2",
"typescript": "^5.6.2"
@@ -47,7 +47,7 @@
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/medusa": "2.10.1",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
},
"peerDependenciesMeta": {

View File

@@ -136,10 +136,10 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@opentelemetry/instrumentation-pg": "^0.52.0",
"@opentelemetry/resources": "^2.0.0",
"@opentelemetry/sdk-node": "^0.200.0",

View File

@@ -38,7 +38,7 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -48,9 +48,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -39,10 +39,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -52,9 +52,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,11 +38,11 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@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.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -52,10 +52,10 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@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.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -25,10 +25,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -38,9 +38,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
},
"scripts": {

View File

@@ -35,9 +35,9 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"cross-env": "^5.2.1",
@@ -48,9 +48,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -34,10 +34,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -47,9 +47,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -29,7 +29,7 @@
"resolve:aliases": "tsc --showConfig -p tsconfig.json > tsconfig.resolved.json && tsc-alias -p tsconfig.resolved.json && rimraf tsconfig.resolved.json",
"build": "rimraf dist && tsc --build && npm run resolve:aliases",
"test": "jest --runInBand --bail --forceExit -- src/**/__tests__/**/*.ts",
"test:integration": "jest --forceExit -- integration-tests/**/__tests__/**/*.spec.ts",
"test:integration": "jest --forceExit -- integration-tests/__tests__/**/*.spec.ts",
"migration:initial": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts medusa-mikro-orm migration:create --initial",
"migration:create": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts medusa-mikro-orm migration:create",
"migration:up": "MIKRO_ORM_CLI_CONFIG=./mikro-orm.config.dev.ts medusa-mikro-orm migration:up",
@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -20,11 +20,7 @@ export function setFindMethods<T>(klass: Constructor<T>, entity: any) {
if (!("strategy" in findOptions_.options)) {
if (findOptions_.options.limit != null || findOptions_.options.offset) {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.SELECT_IN,
})
} else {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.JOINED,
strategy: LoadStrategy.BALANCED,
})
}
}
@@ -103,7 +99,7 @@ export function setFindMethods<T>(klass: Constructor<T>, entity: any) {
if (!("strategy" in findOptions_.options)) {
Object.assign(findOptions_.options, {
strategy: LoadStrategy.SELECT_IN,
strategy: LoadStrategy.BALANCED,
})
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -267,7 +267,7 @@ export default class PaymentModuleService
)
}
@InjectManager()
@InjectTransactionManager()
async updatePaymentCollections_(
data: UpdatePaymentCollectionDTO[],
@MedusaContext() sharedContext?: Context

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -885,7 +885,8 @@ export default class PricingModuleService
return {
attribute,
operator: customRule.operator,
value: customRule.value,
// TODO: we throw above if value is not a number, but the model expect the value to be a string
value: customRule.value.toString(),
}
})
}

View File

@@ -864,7 +864,12 @@ moduleIntegrationTestRunner<IProductModuleService>({
await service.upsertProducts([updateData])
const product = await service.retrieveProduct(productTwo.id, {
relations: ["*"],
relations: [
"options",
"options.values",
"variants",
"variants.options",
],
})
expect(product.options).toHaveLength(1)

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"faker": "^5.5.3",
@@ -52,9 +52,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -62,7 +62,7 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito
}
Object.assign(findOptions_.options, {
strategy: LoadStrategy.SELECT_IN,
strategy: LoadStrategy.BALANCED,
})
return findOptions_

View File

@@ -1822,6 +1822,21 @@ export default class ProductModuleService
productData.thumbnail = productData.images[0].url
}
// TODO: these props are typed as number, the model expect a string, the API expect number etc
// There is some inconsistency here, we should fix it
if ("weight" in productData) {
productData.weight = productData.weight?.toString() as any
}
if ("length" in productData) {
productData.length = productData.length?.toString() as any
}
if ("height" in productData) {
productData.height = productData.height?.toString() as any
}
if ("width" in productData) {
productData.width = productData.width?.toString() as any
}
if (productData.images?.length) {
productData.images = productData.images.map((image, index) =>
(image as { rank?: number }).rank != null

View File

@@ -12,7 +12,7 @@ export async function createCampaigns(
campaignsData?: CreateCampaignDTO[]
): Promise<Campaign[]> {
if (!campaignsData) {
const cp = JSON.parse(JSON.stringify(defaultCampaignsData))
const cp = structuredClone(defaultCampaignsData)
const starts_at = new Date(TODAY)
starts_at.setDate(starts_at.getDate() - 1)

View File

@@ -39,10 +39,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -52,9 +52,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -18,6 +18,7 @@ import {
CampaignBudgetType,
ComputedActions,
deduplicate,
EmitEvents,
InjectManager,
InjectTransactionManager,
isDefined,
@@ -139,11 +140,26 @@ export default class PromotionModuleService
}
@InjectManager()
listActivePromotions(
async listActivePromotions(
filters?: FilterablePromotionProps,
config?: FindConfig<PromotionDTO>,
sharedContext?: Context
): Promise<PromotionDTO[]> {
const activePromotions = await this.listActivePromotions_(
filters,
config,
sharedContext
)
return this.baseRepository_.serialize<PromotionDTO[]>(activePromotions)
}
@InjectManager()
protected async listActivePromotions_(
filters?: FilterablePromotionProps,
config?: FindConfig<PromotionDTO>,
@MedusaContext() sharedContext?: Context
): Promise<InferEntityType<typeof Promotion>[]> {
// Ensure we share the same now date across all filters
const now = new Date()
const activeFilters = {
@@ -170,7 +186,11 @@ export default class PromotionModuleService
],
}
return this.listPromotions(activeFilters, config, sharedContext)
return await this.promotionService_.list(
activeFilters,
config,
sharedContext
)
}
@InjectTransactionManager()
@@ -185,7 +205,7 @@ export default class PromotionModuleService
const campaignBudgetMap = new Map<string, UpdateCampaignBudgetDTO>()
const promotionCodeUsageMap = new Map<string, boolean>()
const existingPromotions = await this.listActivePromotions(
const existingPromotions = await this.listActivePromotions_(
{ code: promotionCodes },
{ relations: ["campaign", "campaign.budget"] },
sharedContext
@@ -200,9 +220,10 @@ export default class PromotionModuleService
}
}
const existingPromotionsMap = new Map<string, PromotionTypes.PromotionDTO>(
existingPromotions.map((promotion) => [promotion.code!, promotion])
)
const existingPromotionsMap = new Map<
string,
InferEntityType<typeof Promotion>
>(existingPromotions.map((promotion) => [promotion.code!, promotion]))
for (let computedAction of computedActions) {
const promotion = existingPromotionsMap.get(computedAction.code)
@@ -293,7 +314,7 @@ export default class PromotionModuleService
const promotionCodeUsageMap = new Map<string, boolean>()
const campaignBudgetMap = new Map<string, UpdateCampaignBudgetDTO>()
const existingPromotions = await this.listActivePromotions(
const existingPromotions = await this.listActivePromotions_(
{
code: computedActions
.map((computedAction) => computedAction.code)
@@ -312,9 +333,10 @@ export default class PromotionModuleService
}
}
const existingPromotionsMap = new Map<string, PromotionTypes.PromotionDTO>(
existingPromotions.map((promotion) => [promotion.code!, promotion])
)
const existingPromotionsMap = new Map<
string,
InferEntityType<typeof Promotion>
>(existingPromotions.map((promotion) => [promotion.code!, promotion]))
for (let computedAction of computedActions) {
const promotion = existingPromotionsMap.get(computedAction.code)
@@ -433,25 +455,18 @@ export default class PromotionModuleService
const methodIdPromoValueMap = new Map<string, number>()
const automaticPromotions = preventAutoPromotions
? []
: await this.listActivePromotions(
{ is_automatic: true },
{ select: ["code"] },
sharedContext
)
const automaticPromotionCodes = automaticPromotions.map((p) => p.code!)
const promotionCodesToApply = [
...promotionCodes,
...automaticPromotionCodes,
...appliedCodes,
]
const promotionCodesToApply = [...promotionCodes, ...appliedCodes]
const uniquePromotionCodes = Array.from(new Set(promotionCodesToApply))
const queryFilter = preventAutoPromotions
? { code: uniquePromotionCodes }
: {
$or: [{ code: uniquePromotionCodes }, { is_automatic: true }],
}
const promotions = await this.listActivePromotions(
{ code: uniquePromotionCodes },
queryFilter,
{
take: null,
order: { application_method: { value: "DESC" } },
@@ -474,6 +489,9 @@ export default class PromotionModuleService
promotions.map((promotion) => [promotion.code!, promotion])
)
const automaticPromotions = promotions.filter((p) => p.is_automatic)
const automaticPromotionCodes = automaticPromotions.map((p) => p.code!)
for (const [code, adjustments] of codeAdjustmentMap.entries()) {
for (const adjustment of adjustments.items) {
computedActions.push({
@@ -628,7 +646,9 @@ export default class PromotionModuleService
sharedContext
)
return Array.isArray(data) ? promotions : promotions[0]
return await this.baseRepository_.serialize<
PromotionTypes.PromotionDTO | PromotionTypes.PromotionDTO[]
>(Array.isArray(data) ? promotions : promotions[0])
}
@InjectTransactionManager()
@@ -887,6 +907,7 @@ export default class PromotionModuleService
): Promise<PromotionTypes.PromotionDTO[]>
@InjectManager()
@EmitEvents()
// @ts-expect-error
async updatePromotions(
data:
@@ -1040,7 +1061,7 @@ export default class PromotionModuleService
) {
const promotionRuleIds = data.map((d) => d.id)
const promotionRules = await this.listPromotionRules(
const promotionRules = await this.promotionRuleService_.list(
{ id: promotionRuleIds },
{ relations: ["values"] },
sharedContext
@@ -1097,6 +1118,7 @@ export default class PromotionModuleService
}
@InjectManager()
@EmitEvents()
async addPromotionRules(
promotionId: string,
rulesData: PromotionTypes.CreatePromotionRuleDTO[],
@@ -1218,6 +1240,8 @@ export default class PromotionModuleService
validatePromotionRuleAttributes(rulesData)
const promotionRuleValuesDataToCreate: CreatePromotionRuleValueDTO[] = []
for (const ruleData of rulesData) {
const { values, ...rest } = ruleData
const promotionRuleData: CreatePromotionRuleDTO = {
@@ -1238,12 +1262,14 @@ export default class PromotionModuleService
promotion_rule: createdPromotionRule,
}))
await this.promotionRuleValueService_.create(
promotionRuleValuesData,
sharedContext
)
promotionRuleValuesDataToCreate.push(...promotionRuleValuesData)
}
await this.promotionRuleValueService_.create(
promotionRuleValuesDataToCreate,
sharedContext
)
return createdPromotionRules
}
@@ -1489,15 +1515,16 @@ export default class PromotionModuleService
const updateBudgetData: UpdateCampaignBudgetDTO[] = []
const createBudgetData: CreateCampaignBudgetDTO[] = []
const existingCampaigns = await this.listCampaigns(
const existingCampaigns = await this.campaignService_.list(
{ id: campaignIds },
{ relations: ["budget"] },
sharedContext
)
const existingCampaignsMap = new Map<string, PromotionTypes.CampaignDTO>(
existingCampaigns.map((campaign) => [campaign.id, campaign])
)
const existingCampaignsMap = new Map<
string,
InferEntityType<typeof Campaign>
>(existingCampaigns.map((campaign) => [campaign.id, campaign]))
for (const updateCampaignData of data) {
const { budget: budgetData, ...campaignData } = updateCampaignData
@@ -1554,7 +1581,7 @@ export default class PromotionModuleService
@InjectManager()
async addPromotionsToCampaign(
data: PromotionTypes.AddPromotionsToCampaignDTO,
sharedContext?: Context
@MedusaContext() sharedContext: Context = {}
): Promise<{ ids: string[] }> {
const ids = await this.addPromotionsToCampaign_(data, sharedContext)
@@ -1621,7 +1648,7 @@ export default class PromotionModuleService
@InjectManager()
async removePromotionsFromCampaign(
data: PromotionTypes.AddPromotionsToCampaignDTO,
sharedContext?: Context
@MedusaContext() sharedContext: Context = {}
): Promise<{ ids: string[] }> {
const ids = await this.removePromotionsFromCampaign_(data, sharedContext)

View File

@@ -21,10 +21,10 @@
"license": "MIT",
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -25,10 +25,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -38,9 +38,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
},
"scripts": {

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -51,9 +51,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -54,9 +54,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -55,9 +55,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -38,10 +38,10 @@
"devDependencies": {
"@medusajs/framework": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@mikro-orm/cli": "6.4.3",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/cli": "6.5.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "^1.7.28",
"@swc/jest": "^0.2.36",
"jest": "^29.7.0",
@@ -56,9 +56,9 @@
},
"peerDependencies": {
"@medusajs/framework": "2.10.1",
"@mikro-orm/core": "6.4.3",
"@mikro-orm/migrations": "6.4.3",
"@mikro-orm/postgresql": "6.4.3",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1"
}
}

View File

@@ -53,11 +53,11 @@
"@medusajs/types": "2.10.1",
"@medusajs/ui": "4.0.21",
"@medusajs/ui-preset": "2.10.1",
"@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.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"@swc/core": "1.5.7",
"@types/lodash": "^4.17.15",
"@types/node": "^20.0.0",
@@ -65,7 +65,7 @@
"@types/react-dom": "^18.2.25",
"awilix": "^8.0.1",
"lodash": "^4.17.21",
"pg": "^8.13.0",
"pg": "^8.16.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "6.20.1",
@@ -82,14 +82,14 @@
"@medusajs/icons": "2.10.1",
"@medusajs/test-utils": "2.10.1",
"@medusajs/ui": "4.0.21",
"@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.2",
"@mikro-orm/core": "6.5.2",
"@mikro-orm/knex": "6.5.2",
"@mikro-orm/migrations": "6.5.2",
"@mikro-orm/postgresql": "6.5.2",
"awilix": "^8.0.1",
"lodash": "^4.17.21",
"pg": "^8.13.0",
"pg": "^8.16.3",
"react-router-dom": "6.20.1"
},
"engines": {

733
yarn.lock

File diff suppressed because it is too large Load Diff