diff --git a/lib/rules/no-package-imports.js b/lib/rules/no-package-imports.js index c04709f..f845a5d 100644 --- a/lib/rules/no-package-imports.js +++ b/lib/rules/no-package-imports.js @@ -27,6 +27,9 @@ module.exports = { { type: "object", properties: { + regexString: { + type: "string", + }, invalidPrefix: { type: "string", }, @@ -57,9 +60,11 @@ module.exports = { // create a replacer regex and a target string const replacers = context.options[0].options.map((option) => [ // match all string [../]*$invalidPrefix/anything/$invalidSuffix[/anything] - new RegExp( - `(?:(?:..\\/)*${option.invalidPrefix})+\\/([^\\/]+)\\/${option.invalidSuffix}(\\/(.+))?` - ), + option.regexString ? + new RegExp(option.regexString) : + new RegExp( + `(?:(?:..\\/)*${option.invalidPrefix})+\\/([^\\/]+)${option.invalidSuffix !== "" ? `\\/${option.invalidSuffix}` : ''}(\\/(.+))?` + ), option.template ?? `${option.monorepoRoot}/$1$2`, ]); diff --git a/tests/lib/rules/no-package-imports.js b/tests/lib/rules/no-package-imports.js index 2bdeb1e..7f9732c 100644 --- a/tests/lib/rules/no-package-imports.js +++ b/tests/lib/rules/no-package-imports.js @@ -40,7 +40,7 @@ ruleTester.run("no-package-imports", rule, { invalid: [ { - code: 'import { Button } from "../../packages/components/src/Button"', + code: 'import { Button } from "../../../packages/components/src/Button"', output: 'import { Button } from "@monorepo/components/Button"', parserOptions: { ecmaVersion: 6, sourceType: "module" }, options, @@ -71,6 +71,21 @@ ruleTester.run("no-package-imports", rule, { ], errors: [incorrectImport], }, + { + code: 'import Button from "../../../packages/components/Button"', + output: 'import Button from "@monorepo/components/Button"', + parserOptions: { ecmaVersion: 6, sourceType: "module" }, + options: [{ + options: [ + { + invalidPrefix: "packages", + invalidSuffix: "", + monorepoRoot: "@monorepo", + }, + ], + }], + errors: [incorrectImport], + }, { code: 'import Button from "../../../packages/components/src/Button"', output: 'import Button from "@monorepo/components/Button"',