- create register-extended-validator.ts in utils, with following code.
import { ValidatorOptions } from 'class-validator'
import { ClassConstructor } from '@medusajs/medusa'
const extendedValidators: any = []
let isInitialized = false
export async function registerExtendedValidator<
T extends ClassConstructor<any>,
>(classValidator: T): Promise<void> {
extendedValidators.push(classValidator)
if (isInitialized) {
return
}
isInitialized = true
const module = await import('@medusajs/medusa/dist/utils/validator')
const originalValidator = module.validator
module.validator = <T extends ClassConstructor<any> = any, V = any>(
typedClass: T,
plain: V,
config?: ValidatorOptions,
): Promise<any> => {
for (const extendedValidator of extendedValidators) {
if (extendedValidator.name === typedClass.name) {
typedClass = extendedValidator
break
}
}
return originalValidator(typedClass, plain, config)
}
}
2 create cart.dto.ts in loaders with this code
import {
StorePostCartsCartReq as MedusaStorePostCartsCartReq,
} from '@medusajs/medusa/dist/api/routes/store/carts/update-cart'
export class StorePostCartsCartReq extends MedusaStorePostCartsCartReq {
@IsOptional()
@IsString()
metadata: string
}
- create index.ts in loaders and import dto
import { registerExtendedValidator } from '../utils/register-extended-validator'
import { StorePostCartsCartReq } from './cart.dto'
export default async function() {
await registerExtendedValidator(StorePostCartsCartReq)
}