www/apps/resources/app/lint/rules/prefer-modules-enum/page.mdx
export const metadata = {
title: prefer-modules-enum - ESLint plugin rules,
}
This rule prefers Modules.* enum members over magic module-name strings in resolve(...) calls.
warn. This rule is enabled in the recommended preset.
This rule targets all files in your project. It reports calls to resolve(...) that pass a known module-name string, such as "product" or "sales_channel", instead of the matching Modules member.
The following code is reported by the rule:
// non-compliant
const productModule = req.scope.resolve("product")
Instead, use the Modules enum:
// compliant
import { Modules } from "@medusajs/framework/utils"
const productModule = req.scope.resolve(
Modules.PRODUCT
)
The Modules enum gives you a single, type-safe source for module names. Using it avoids typos in magic strings and makes module dependencies easier to find and refactor.
This rule is auto-fixable. Run the linter with the --fix option to apply the fix automatically.
To turn off this rule, set it to off in your ESLint configuration:
import { defineConfig } from "eslint/config"
import medusa from "@medusajs/eslint-plugin"
export default defineConfig([
...medusa.configs.recommended,
{
rules: {
"@medusajs/prefer-modules-enum": "off",
},
},
])
Or disable it for a single line using an inline comment:
// eslint-disable-next-line @medusajs/prefer-modules-enum
const productModule = req.scope.resolve("product")