Repository: amilajack/eslint-plugin-compat

Issue:
Lookbehind in regular expressions not reported even though it is not supported on Safari browser
`lookbehind` in regular expresions should report an error because it is not supported on Safari browser.
![image](https://user-images.githubusercontent.com/24250131/227114423-99a5b0b3-f0bc-4b5f-9091-626637f2ea91.png)


here is my browserslist config: 
```json
{
	"browserslist": [
	    "last 2 years",
	    "not dead"
	  ]
}
```
and here is my eslint config:
```js
module.exports = {
	root: true,
	env: {
	  browser: true,
	},
	plugins: ['compat'],
	settings: {
	  lintAllEsApis: true,
	},
	extends: ['plugin:compat/recommended'],
	parserOptions: {
	  ecmaVersion: 2018,
	  parser: 'babel-eslint',
	  sourceType: 'module',
	},
	rules: {
	  'compat/compat': 'error',
	}
}
```

I do get an error for OffscreenCanvas not being supported on Safari 14, so it looks like I have set up the plugin correctly.
![image](https://user-images.githubusercontent.com/24250131/227113208-0563faf8-ce2b-4915-a759-56519e6688a5.png)


Discussion:
@TKDev7: I was literally about to install this plugin to lint for this use case. This is a bummer@RobinBlomberg: For a basic workaround (that unfortunately doesn't take Browserslist settings into account):
```js
rules: {
  "no-restricted-syntax": [
    "error",
    {
      selector: "Literal[regex][raw=/\\(\\?<[=!]/]",
      message:
        "Lookbehind assertions are not supported in some browsers (e.g. Safari 16.3).",
    },
  ],
},
```

Solution patch:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index bb57549..47ea62a 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,6 +1,9 @@
 name: Release
 
 on:
+  push:
+    branches:
+      - main
   workflow_dispatch:
     inputs:
       dryRun:
@@ -11,7 +14,8 @@ on:
 jobs:
   authorize:
     name: Authorize
-    runs-on: ubuntu-18.04
+    runs-on: ubuntu-latest
+    if: github.event_name == 'workflow_dispatch'
     steps:
       - name: ${{ github.actor }} permission check to do a release
         uses: octokit/request-action@v2.x
@@ -23,15 +27,19 @@ jobs:
 
   release:
     name: Release
-    runs-on: ubuntu-18.04
+    runs-on: ubuntu-latest
     needs: [authorize]
+    if: always() && (needs.authorize.result == 'success' || needs.authorize.result == 'skipped')
     env:
-      stable-node-version: "16.x"
+      stable-node-version: "20.x"
       e2e-eslint-version: "eslint@8" # Used because e2e and benchmark tests use ESLint's Node.js API class introduced in eslint@7
 
     steps:
       - name: Checkout
         uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+          persist-credentials: false
 
       - name: Setup Node.js
         uses: actions/setup-node@v4
@@ -46,15 +54,15 @@ jobs:
         run: npm test && npm run spec:e2e
 
       - name: Release --dry-run # Uses release.config.js
-        if: ${{ github.event.inputs.dryRun == 'true'}}
+        if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.dryRun == 'true'}}
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
           NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
         run: npx semantic-release --dry-run
 
       - name: Release # Uses release.config.js
-        if: ${{ github.event.inputs.dryRun == 'false'}}
+        if: ${{ github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && github.event.inputs.dryRun == 'false')}}
         env:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
           NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
-        run: npx semantic-release
+        run: npx semantic-release
\ No newline at end of file
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100755
index 0000000..990bd0b
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1 @@
+npx --no -- commitlint --edit "$1"
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000..72c4429
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1 @@
+npm test
diff --git a/commitlint.config.js b/commitlint.config.js
new file mode 100644
index 0000000..11b9ca5
--- /dev/null
+++ b/commitlint.config.js
@@ -0,0 +1,23 @@
+module.exports = {
+  extends: ["@commitlint/config-conventional"],
+  rules: {
+    "type-enum": [
+      2,
+      "always",
+      [
+        "feat",
+        "fix",
+        "docs",
+        "style",
+        "refactor",
+        "perf",
+        "test",
+        "build",
+        "ci",
+        "chore",
+        "revert",
+      ],
+    ],
+    "subject-case": [2, "never", ["sentence-case", "start-case", "pascal-case", "upper-case"]],
+  },
+};
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index bc7dc25..0bdcca3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,9 +9,9 @@
       "version": "6.0.2",
       "license": "MIT",
       "dependencies": {
-        "@mdn/browser-compat-data": "^5.5.35",
+        "@mdn/browser-compat-data": "^6.1.1",
         "ast-metadata-inferer": "^0.8.1",
-        "browserslist": "^4.24.2",
+        "browserslist": "^4.25.2",
         "caniuse-lite": "^1.0.30001687",
         "find-up": "^5.0.0",
         "globals": "^15.7.0",
@@ -21,6 +21,8 @@
       "devDependencies": {
         "@babel/core": "^7.24.7",
         "@babel/eslint-parser": "^7.24.7",
+        "@commitlint/cli": "^20.0.0",
+        "@commitlint/config-conventional": "^20.0.0",
         "@eslint/compat": "^1.1.0",
         "@eslint/js": "^9.6.0",
         "@semantic-release/changelog": "^6.0.3",
@@ -40,6 +42,7 @@
         "eslint-plugin-eslint-plugin": "^6.2.0",
         "eslint-plugin-prettier": "^5.1.3",
         "expect-type": "^0.19.0",
+        "husky": "^9.1.7",
         "jest": "^29.7.0",
         "prettier": "^3.3.2",
         "semantic-release": "^22.0.12",
@@ -698,6 +701,470 @@
         "node": ">=0.1.90"
       }
     },
+    "node_modules/@commitlint/cli": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.0.0.tgz",
+      "integrity": "sha512-I3D7Yldq8ZhOB3qEaTvXWIgib6tSZhbCpRObfFQ/aYI0J9AH8NMwT07Ak+bpE3n6Yn7EtbqEhQUkJZ/jZ5kCeQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/format": "^20.0.0",
+        "@commitlint/lint": "^20.0.0",
+        "@commitlint/load": "^20.0.0",
+        "@commitlint/read": "^20.0.0",
+        "@commitlint/types": "^20.0.0",
+        "tinyexec": "^1.0.0",
+        "yargs": "^17.0.0"
+      },
+      "bin": {
+        "commitlint": "cli.js"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/config-conventional": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.0.0.tgz",
+      "integrity": "sha512-q7JroPIkDBtyOkVe9Bca0p7kAUYxZMxkrBArCfuD3yN4KjRAenP9PmYwnn7rsw8Q+hHq1QB2BRmBh0/Z19ZoJw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "conventional-changelog-conventionalcommits": "^7.0.2"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/config-validator": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.0.0.tgz",
+      "integrity": "sha512-BeyLMaRIJDdroJuYM2EGhDMGwVBMZna9UiIqV9hxj+J551Ctc6yoGuGSmghOy/qPhBSuhA6oMtbEiTmxECafsg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "ajv": "^8.11.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/config-validator/node_modules/ajv": {
+      "version": "8.17.1",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3",
+        "fast-uri": "^3.0.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@commitlint/ensure": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.0.0.tgz",
+      "integrity": "sha512-WBV47Fffvabe68n+13HJNFBqiMH5U1Ryls4W3ieGwPC0C7kJqp3OVQQzG2GXqOALmzrgAB+7GXmyy8N9ct8/Fg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "lodash.camelcase": "^4.3.0",
+        "lodash.kebabcase": "^4.1.1",
+        "lodash.snakecase": "^4.1.1",
+        "lodash.startcase": "^4.4.0",
+        "lodash.upperfirst": "^4.3.1"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/execute-rule": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz",
+      "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/format": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.0.0.tgz",
+      "integrity": "sha512-zrZQXUcSDmQ4eGGrd+gFESiX0Rw+WFJk7nW4VFOmxub4mAATNKBQ4vNw5FgMCVehLUKG2OT2LjOqD0Hk8HvcRg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "chalk": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/format/node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/@commitlint/is-ignored": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.0.0.tgz",
+      "integrity": "sha512-ayPLicsqqGAphYIQwh9LdAYOVAQ9Oe5QCgTNTj+BfxZb9b/JW222V5taPoIBzYnAP0z9EfUtljgBk+0BN4T4Cw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "semver": "^7.6.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/lint": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.0.0.tgz",
+      "integrity": "sha512-kWrX8SfWk4+4nCexfLaQT3f3EcNjJwJBsSZ5rMBw6JCd6OzXufFHgel2Curos4LKIxwec9WSvs2YUD87rXlxNQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/is-ignored": "^20.0.0",
+        "@commitlint/parse": "^20.0.0",
+        "@commitlint/rules": "^20.0.0",
+        "@commitlint/types": "^20.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/load": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.0.0.tgz",
+      "integrity": "sha512-WiNKO9fDPlLY90Rruw2HqHKcghrmj5+kMDJ4GcTlX1weL8K07Q6b27C179DxnsrjGCRAKVwFKyzxV4x+xDY28Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/config-validator": "^20.0.0",
+        "@commitlint/execute-rule": "^20.0.0",
+        "@commitlint/resolve-extends": "^20.0.0",
+        "@commitlint/types": "^20.0.0",
+        "chalk": "^5.3.0",
+        "cosmiconfig": "^9.0.0",
+        "cosmiconfig-typescript-loader": "^6.1.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "lodash.uniq": "^4.5.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/load/node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/@commitlint/load/node_modules/cosmiconfig": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
+      "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "env-paths": "^2.2.1",
+        "import-fresh": "^3.3.0",
+        "js-yaml": "^4.1.0",
+        "parse-json": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/d-fischer"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.9.5"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@commitlint/load/node_modules/cosmiconfig-typescript-loader": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz",
+      "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jiti": "^2.4.1"
+      },
+      "engines": {
+        "node": ">=v18"
+      },
+      "peerDependencies": {
+        "@types/node": "*",
+        "cosmiconfig": ">=9",
+        "typescript": ">=5"
+      }
+    },
+    "node_modules/@commitlint/message": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.0.0.tgz",
+      "integrity": "sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/parse": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.0.0.tgz",
+      "integrity": "sha512-j/PHCDX2bGM5xGcWObOvpOc54cXjn9g6xScXzAeOLwTsScaL4Y+qd0pFC6HBwTtrH92NvJQc+2Lx9HFkVi48cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/types": "^20.0.0",
+        "conventional-changelog-angular": "^7.0.0",
+        "conventional-commits-parser": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/read": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.0.0.tgz",
+      "integrity": "sha512-Ti7Y7aEgxsM1nkwA4ZIJczkTFRX/+USMjNrL9NXwWQHqNqrBX2iMi+zfuzZXqfZ327WXBjdkRaytJ+z5vNqTOA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/top-level": "^20.0.0",
+        "@commitlint/types": "^20.0.0",
+        "git-raw-commits": "^4.0.0",
+        "minimist": "^1.2.8",
+        "tinyexec": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/resolve-extends": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.0.0.tgz",
+      "integrity": "sha512-BA4vva1hY8y0/Hl80YDhe9TJZpRFMsUYzVxvwTLPTEBotbGx/gS49JlVvtF1tOCKODQp7pS7CbxCpiceBgp3Dg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/config-validator": "^20.0.0",
+        "@commitlint/types": "^20.0.0",
+        "global-directory": "^4.0.1",
+        "import-meta-resolve": "^4.0.0",
+        "lodash.mergewith": "^4.6.2",
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/resolve-extends/node_modules/resolve-from": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@commitlint/rules": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.0.0.tgz",
+      "integrity": "sha512-gvg2k10I/RfvHn5I5sxvVZKM1fl72Sqrv2YY/BnM7lMHcYqO0E2jnRWoYguvBfEcZ39t+rbATlciggVe77E4zA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@commitlint/ensure": "^20.0.0",
+        "@commitlint/message": "^20.0.0",
+        "@commitlint/to-lines": "^20.0.0",
+        "@commitlint/types": "^20.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/to-lines": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz",
+      "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/top-level": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.0.0.tgz",
+      "integrity": "sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/find-up": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^7.2.0",
+        "path-exists": "^5.0.0",
+        "unicorn-magic": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/locate-path": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^6.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/p-locate": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/@commitlint/top-level/node_modules/yocto-queue": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
+      "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@commitlint/types": {
+      "version": "20.0.0",
+      "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.0.0.tgz",
+      "integrity": "sha512-bVUNBqG6aznYcYjTjnc3+Cat/iBgbgpflxbIBTnsHTX0YVpnmINPEkSRWymT2Q8aSH3Y7aKnEbunilkYe8TybA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/conventional-commits-parser": "^5.0.0",
+        "chalk": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=v18"
+      }
+    },
+    "node_modules/@commitlint/types/node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
+      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
     "node_modules/@cspotcode/source-map-support": {
       "version": "0.8.1",
       "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
@@ -1364,9 +1831,9 @@
       "dev": true
     },
     "node_modules/@mdn/browser-compat-data": {
-      "version": "5.6.23",
-      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.6.23.tgz",
-      "integrity": "sha512-6h/L/id7JiuCcLKNZSliMfl9S159/ditQ/wc4TPlHJ/gcqoo4PNGggVaY6VcvVef9VFGuhh+UW27iAnEzQn+Kw==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-6.1.1.tgz",
+      "integrity": "sha512-9/Uu3ROTiOR4kzvWclJz2wsx65bLUZzsQOxCcIFmy0JBQ2soH8tw6aSmkxOjDS1QM11InjY9/lcWcnKZL8zUNA==",
       "license": "CC0-1.0"
     },
     "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
@@ -2243,6 +2710,16 @@
       "integrity": "sha512-ff4yGviVi4PrDKkCZJixHjYrgQG3kv/peiSCBabyZR+fXezFTYuS4uVOiRRzRqVxCEZT3ityfuAPuYa0usobKw==",
       "dev": true
     },
+    "node_modules/@types/conventional-commits-parser": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz",
+      "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
     "node_modules/@types/eslint": {
       "version": "8.56.10",
       "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
@@ -2799,6 +3276,12 @@
         "@mdn/browser-compat-data": "^5.6.19"
       }
     },
+    "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": {
+      "version": "5.7.6",
+      "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.7.6.tgz",
+      "integrity": "sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==",
+      "license": "CC0-1.0"
+    },
     "node_modules/babel-jest": {
       "version": "29.7.0",
       "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
@@ -2973,9 +3456,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.24.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
-      "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+      "version": "4.25.2",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz",
+      "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==",
       "funding": [
         {
           "type": "opencollective",
@@ -2992,10 +3475,10 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001669",
-        "electron-to-chromium": "^1.5.41",
-        "node-releases": "^2.0.18",
-        "update-browserslist-db": "^1.1.1"
+        "caniuse-lite": "^1.0.30001733",
+        "electron-to-chromium": "^1.5.199",
+        "node-releases": "^2.0.19",
+        "update-browserslist-db": "^1.1.3"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -3110,9 +3593,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001687",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz",
-      "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==",
+      "version": "1.0.30001734",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001734.tgz",
+      "integrity": "sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==",
       "funding": [
         {
           "type": "opencollective",
@@ -3310,6 +3793,19 @@
         "node": ">=16"
       }
     },
+    "node_modules/conventional-changelog-conventionalcommits": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz",
+      "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "compare-func": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
     "node_modules/conventional-changelog-writer": {
       "version": "7.0.1",
       "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz",
@@ -3463,6 +3959,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/dargs": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz",
+      "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/debug": {
       "version": "4.3.5",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
@@ -3682,9 +4191,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.72",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz",
-      "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==",
+      "version": "1.5.200",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz",
+      "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==",
       "license": "ISC"
     },
     "node_modules/emittery": {
@@ -4335,6 +4844,23 @@
       "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
+    "node_modules/fast-uri": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+      "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fastify"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fastify"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
     "node_modules/fastq": {
       "version": "1.17.1",
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -4597,6 +5123,24 @@
         "through2": "~2.0.0"
       }
     },
+    "node_modules/git-raw-commits": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
+      "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "dargs": "^8.0.0",
+        "meow": "^12.0.1",
+        "split2": "^4.0.0"
+      },
+      "bin": {
+        "git-raw-commits": "cli.mjs"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
     "node_modules/glob": {
       "version": "7.2.3",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -4648,6 +5192,32 @@
         "node": ">=10.0"
       }
     },
+    "node_modules/global-directory": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
+      "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ini": "4.1.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/global-directory/node_modules/ini": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
+      "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
     "node_modules/globals": {
       "version": "15.7.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-15.7.0.tgz",
@@ -4944,6 +5514,22 @@
         "node": ">=10.17.0"
       }
     },
+    "node_modules/husky": {
+      "version": "9.1.7",
+      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+      "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "husky": "bin.js"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/typicode"
+      }
+    },
     "node_modules/ignore": {
       "version": "5.3.1",
       "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
@@ -5311,6 +5897,7 @@
       "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
       "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@jest/core": "^29.7.0",
         "@jest/types": "^29.6.3",
@@ -5861,6 +6448,16 @@
         "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
+    "node_modules/jiti": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.0.tgz",
+      "integrity": "sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jiti": "lib/jiti-cli.mjs"
+      }
+    },
     "node_modules/js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -6085,6 +6682,13 @@
       "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
       "dev": true
     },
+    "node_modules/lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lodash.capitalize": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz",
@@ -6109,6 +6713,13 @@
       "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
       "dev": true
     },
+    "node_modules/lodash.kebabcase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
+      "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lodash.memoize": {
       "version": "4.1.2",
       "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -6120,12 +6731,47 @@
       "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
       "dev": true
     },
+    "node_modules/lodash.mergewith": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+      "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.snakecase": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+      "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.startcase": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+      "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lodash.uniqby": {
       "version": "4.7.0",
       "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
       "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==",
       "dev": true
     },
+    "node_modules/lodash.upperfirst": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+      "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/lowercase-keys": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@@ -9775,6 +10421,16 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/resolve": {
       "version": "1.22.8",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -10754,6 +11410,13 @@
         "xtend": "~4.0.1"
       }
     },
+    "node_modules/tinyexec": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
+      "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -11047,9 +11710,9 @@
       }
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
-      "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+      "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
       "funding": [
         {
           "type": "opencollective",
@@ -11067,7 +11730,7 @@
       "license": "MIT",
       "dependencies": {
         "escalade": "^3.2.0",
-        "picocolors": "^1.1.0"
+        "picocolors": "^1.1.1"
       },
       "bin": {
         "update-browserslist-db": "cli.js"
diff --git a/package.json b/package.json
index 4399c1a..f8ec051 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
   "exports": {
     ".": {
       "import": {
-        "types": "./lib/esm//src/index.d.mts",
+        "types": "./lib/esm/src/index.d.ts",
         "default": "./lib/esm/src/index.js"
       },
       "require": {
@@ -48,11 +48,14 @@
     "lint": "eslint .",
     "prettier": "prettier --check .",
     "prettier:write": "prettier --write .",
+    "release": "semantic-release",
+    "release:dry-run": "semantic-release --dry-run",
     "spec": "jest --testPathIgnorePatterns test/e2e-repo.spec.ts /benchmarks-tmp",
     "spec:e2e": "jest --detectOpenHandles test/e2e-repo.spec.ts",
     "test": "npm run build && npm run lint && npm run spec",
     "tsc": "tsc",
-    "version": "npm run build"
+    "version": "npm run build",
+    "prepare": "husky"
   },
   "prettier": {
     "semi": true,
@@ -67,9 +70,9 @@
     ]
   },
   "dependencies": {
-    "@mdn/browser-compat-data": "^5.5.35",
+    "@mdn/browser-compat-data": "^6.1.1",
     "ast-metadata-inferer": "^0.8.1",
-    "browserslist": "^4.24.2",
+    "browserslist": "^4.25.2",
     "caniuse-lite": "^1.0.30001687",
     "find-up": "^5.0.0",
     "globals": "^15.7.0",
@@ -79,6 +82,8 @@
   "devDependencies": {
     "@babel/core": "^7.24.7",
     "@babel/eslint-parser": "^7.24.7",
+    "@commitlint/cli": "^20.0.0",
+    "@commitlint/config-conventional": "^20.0.0",
     "@eslint/compat": "^1.1.0",
     "@eslint/js": "^9.6.0",
     "@semantic-release/changelog": "^6.0.3",
@@ -98,6 +103,7 @@
     "eslint-plugin-eslint-plugin": "^6.2.0",
     "eslint-plugin-prettier": "^5.1.3",
     "expect-type": "^0.19.0",
+    "husky": "^9.1.7",
     "jest": "^29.7.0",
     "prettier": "^3.3.2",
     "semantic-release": "^22.0.12",
diff --git a/release.config.js b/release.config.js
index 7b00f7f..10b2e98 100644
--- a/release.config.js
+++ b/release.config.js
@@ -1,36 +1,18 @@
 module.exports = {
-  branches: ["master"],
+  branches: [
+    "main",
+    {
+      name: "(feat|fix|chore)-*",
+      prerelease: true,
+    },
+  ],
   plugins: [
-    [
-      "@semantic-release/commit-analyzer",
-      {
-        preset: "angular",
-        parserOpts: {
-          noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"],
-        },
-      },
-    ],
-    [
-      "@semantic-release/release-notes-generator",
-      {
-        preset: "angular",
-      },
-    ],
-    [
-      "@semantic-release/changelog",
-      {
-        changelogFile: "CHANGELOG.md",
-      },
-    ],
+    "@semantic-release/commit-analyzer",
+    "@semantic-release/release-notes-generator",
+    "@semantic-release/changelog",
     "@semantic-release/npm",
+    // Only commit the pkg.json changes on main branch
+    ...(process.env.GITHUB_REF_NAME === "main" ? ["@semantic-release/git"] : []),
     "@semantic-release/github",
-    [
-      "@semantic-release/git",
-      {
-        assets: ["package.json", "CHANGELOG.md"],
-        message:
-          "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}", // eslint-disable-line no-template-curly-in-string
-      },
-    ],
   ],
-};
+};
\ No newline at end of file
diff --git a/src/constants.ts b/src/constants.ts
index ff13313..6ed7a19 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -54,4 +54,5 @@ export enum AstNodeTypes {
   MemberExpression = "MemberExpression",
   CallExpression = "CallExpression",
   NewExpression = "NewExpression",
+  Literal = "Literal",
 }
diff --git a/src/helpers.ts b/src/helpers.ts
index a5bebb7..69aa42f 100644
--- a/src/helpers.ts
+++ b/src/helpers.ts
@@ -1,16 +1,16 @@
 /* eslint no-nested-ternary: off */
 import browserslist from "browserslist";
+import { AstNodeTypes, TargetNameMappings } from "./constants";
 import {
   AstMetadataApiWithTargetsResolver,
+  BrowserListConfig,
+  BrowsersListOpts,
+  Context,
   ESLintNode,
+  HandleFailingRule,
   SourceCode,
-  BrowserListConfig,
   Target,
-  HandleFailingRule,
-  Context,
-  BrowsersListOpts,
 } from "./types";
-import { TargetNameMappings } from "./constants";
 
 /*
 3) Figures out which browsers user is targeting
@@ -109,8 +109,31 @@ export function lintExpressionStatement(
     );
 }
 
+function checkRegexpLiteral(node: ESLintNode): boolean {
+  return (
+    node.type === AstNodeTypes.Literal &&
+    (!!node.regex || node.parent?.callee?.name === "RegExp")
+  );
+}
+
+export function lintLiteral(
+  context: Context,
+  handleFailingRule: HandleFailingRule,
+  rules: AstMetadataApiWithTargetsResolver[],
+  sourceCode: SourceCode,
+  node: ESLintNode
+) {
+  const isRegexpLiteral = checkRegexpLiteral(node);
+  const failingRule = rules.find((rule) =>
+    rule.syntaxes?.some(
+      (syntax) => (isRegexpLiteral ? node.raw.includes(syntax) : false) // non-regexp literals are not supported yet
+    )
+  );
+  if (failingRule) handleFailingRule(failingRule, node);
+}
+
 function isStringLiteral(node: ESLintNode): boolean {
-  return node.type === "Literal" && typeof node.value === "string";
+  return node.type === AstNodeTypes.Literal && typeof node.value === "string";
 }
 
 function protoChainFromMemberExpression(node: ESLintNode): string[] {
diff --git a/src/index.ts b/src/index.ts
index db10021..bbe1b6b 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -6,9 +6,9 @@
 //------------------------------------------------------------------------------
 // Requirements
 //------------------------------------------------------------------------------
-import recommended from "./config/recommended";
-import pkg from "../package.json";
 import type { Linter } from "eslint";
+import pkg from "../package.json";
+import recommended from "./config/recommended";
 
 //------------------------------------------------------------------------------
 // Plugin Definition
@@ -32,7 +32,7 @@ const plugin = {
 
 const configs = {
   "flat/recommended": {
-    name: 'compat/flat/recommended',
+    name: "compat/flat/recommended",
     plugins: { compat: plugin },
     ...recommended.flat,
   } as Linter.FlatConfig,
diff --git a/src/providers/caniuse-provider.ts b/src/providers/caniuse-provider.ts
index bc4360a..07dcd82 100644
--- a/src/providers/caniuse-provider.ts
+++ b/src/providers/caniuse-provider.ts
@@ -1,5 +1,5 @@
 import * as lite from "caniuse-lite";
-import { STANDARD_TARGET_NAME_MAPPING, AstNodeTypes } from "../constants";
+import { AstNodeTypes, STANDARD_TARGET_NAME_MAPPING } from "../constants";
 import { AstMetadataApiWithTargetsResolver, Target } from "../types";
 
 /**
@@ -241,6 +241,13 @@ const CanIUseProvider: Array<AstMetadataApiWithTargetsResolver> = [
     astNodeType: AstNodeTypes.NewExpression,
     object: "Float64Array",
   },
+  {
+    caniuseId: "js-regexp-lookbehind",
+    astNodeType: AstNodeTypes.Literal,
+    name: "Lookbehind",
+    object: "RegExp",
+    syntaxes: ["?<=", "?<!"],
+  },
 ].map((rule) => ({
   ...rule,
   getUnsupportedTargets,
diff --git a/src/providers/mdn-provider.ts b/src/providers/mdn-provider.ts
index c0a5f55..a0f48ce 100644
--- a/src/providers/mdn-provider.ts
+++ b/src/providers/mdn-provider.ts
@@ -80,7 +80,7 @@ export function isSupportedByMDN(
   if (!mdnRecords.has(node.protoChainId)) return true;
   const record = mdnRecords.get(node.protoChainId);
   if (!record || !record.compat.support) return true;
-  const compatRecord = record.compat.support[target];
+  const compatRecord = record.compat.support[target as keyof typeof record.compat.support];
   if (!compatRecord) return true;
   if (!Array.isArray(compatRecord) && !("version_added" in compatRecord))
     return true;
diff --git a/src/rules/compat.ts b/src/rules/compat.ts
index f4a0fda..07a9bc7 100644
--- a/src/rules/compat.ts
+++ b/src/rules/compat.ts
@@ -5,27 +5,28 @@
  *   Tells eslint to lint certain nodes  (lintCallExpression, lintMemberExpression, lintNewExpression)
  *   Gets protochain for the ESLint nodes the plugin is interested in
  */
-import fs from "fs";
+import { Rule } from "eslint";
 import findUp from "find-up";
+import fs from "fs";
 import memoize from "lodash.memoize";
-import { Rule } from "eslint";
 import {
+  determineTargetsFromConfig,
   lintCallExpression,
+  lintExpressionStatement,
+  lintLiteral,
   lintMemberExpression,
   lintNewExpression,
-  lintExpressionStatement,
   parseBrowsersListVersion,
-  determineTargetsFromConfig,
 } from "../helpers"; // will be deprecated and introduced to this file
+import { nodes } from "../providers";
 import {
-  ESLintNode,
   AstMetadataApiWithTargetsResolver,
   BrowserListConfig,
-  HandleFailingRule,
-  Context,
   BrowsersListOpts,
+  Context,
+  ESLintNode,
+  HandleFailingRule,
 } from "../types";
-import { nodes } from "../providers";
 
 type ESLint = {
   [astNodeTypeName: string]: (node: ESLintNode) => void;
@@ -45,6 +46,9 @@ function getName(node: ESLintNode): string {
     case "CallExpression": {
       return node.callee!.name;
     }
+    case "Literal": {
+      return node.type;
+    }
     default:
       throw new Error("not found");
   }
@@ -110,6 +114,7 @@ type RulesFilteredByTargets = {
   NewExpression: AstMetadataApiWithTargetsResolver[];
   MemberExpression: AstMetadataApiWithTargetsResolver[];
   ExpressionStatement: AstMetadataApiWithTargetsResolver[];
+  Literal: AstMetadataApiWithTargetsResolver[];
 };
 
 /**
@@ -124,6 +129,7 @@ const getRulesForTargets = memoize(
       NewExpression: [] as AstMetadataApiWithTargetsResolver[],
       MemberExpression: [] as AstMetadataApiWithTargetsResolver[],
       ExpressionStatement: [] as AstMetadataApiWithTargetsResolver[],
+      Literal: [] as AstMetadataApiWithTargetsResolver[],
     };
     const targets = JSON.parse(targetsJSON);
 
@@ -248,6 +254,13 @@ export default {
         ],
         sourceCode
       ),
+      Literal: lintLiteral.bind(
+        null,
+        context,
+        handleFailingRule,
+        targetedRules.Literal,
+        sourceCode
+      ),
       // Keep track of all the defined variables. Do not report errors for nodes that are not defined
       Identifier(node: ESLintNode) {
         if (node.parent) {
diff --git a/src/types.ts b/src/types.ts
index ad1f341..08a16fe 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -1,7 +1,7 @@
 import { APIKind } from "ast-metadata-inferer/lib/types";
+import type { Options as DefaultBrowsersListOpts } from "browserslist";
 import { Rule } from "eslint";
 import { TargetNameMappings } from "./constants";
-import type { Options as DefaultBrowsersListOpts } from "browserslist";
 
 export type BrowserListConfig =
   | string
@@ -18,8 +18,13 @@ type AstMetadataApi = {
   type?: string;
   name?: string;
   object: string;
-  astNodeType: "MemberExpression" | "CallExpression" | "NewExpression";
+  astNodeType:
+    | "MemberExpression"
+    | "CallExpression"
+    | "NewExpression"
+    | "Literal";
   property?: string;
+  syntaxes?: string[];
   protoChainId: string;
   protoChain: Array<string>;
 };
@@ -49,6 +54,11 @@ export type ESLintNode = {
     name: string;
     type?: string;
   };
+  regex?: {
+    flags: string;
+    pattern: string;
+  };
+  raw: string;
 };
 
 export type SourceCode = import("eslint").SourceCode;



Test patch:
diff --git a/test/__snapshots__/helpers.spec.ts.snap b/test/__snapshots__/helpers.spec.ts.snap
index a750b6b..c68e293 100644
--- a/test/__snapshots__/helpers.spec.ts.snap
+++ b/test/__snapshots__/helpers.spec.ts.snap
@@ -1,4 +1,4 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
 
 exports[`Versioning should get lowest target versions 1`] = `
 [
@@ -23,19 +23,19 @@ exports[`Versioning should get lowest target versions 1`] = `
 exports[`Versioning should support multi env config in browserslist package.json 1`] = `
 [
   {
-    "parsedVersion": 24,
+    "parsedVersion": 25,
     "target": "samsung",
-    "version": "24",
+    "version": "25",
   },
   {
-    "parsedVersion": 17.5,
+    "parsedVersion": 18.2,
     "target": "safari",
-    "version": "17.5",
+    "version": "18.2",
   },
   {
-    "parsedVersion": 111,
+    "parsedVersion": 114,
     "target": "opera",
-    "version": "111",
+    "version": "114",
   },
   {
     "parsedVersion": 80,
@@ -53,9 +53,9 @@ exports[`Versioning should support multi env config in browserslist package.json
     "version": "2.5",
   },
   {
-    "parsedVersion": 17.5,
+    "parsedVersion": 18.2,
     "target": "ios_saf",
-    "version": "17.5",
+    "version": "18.2",
   },
   {
     "parsedVersion": 10,
@@ -68,19 +68,19 @@ exports[`Versioning should support multi env config in browserslist package.json
     "version": "9",
   },
   {
-    "parsedVersion": 115,
+    "parsedVersion": 128,
     "target": "firefox",
-    "version": "115",
+    "version": "128",
   },
   {
-    "parsedVersion": 128,
+    "parsedVersion": 135,
     "target": "edge",
-    "version": "128",
+    "version": "135",
   },
   {
-    "parsedVersion": 109,
+    "parsedVersion": 112,
     "target": "chrome",
-    "version": "109",
+    "version": "112",
   },
   {
     "parsedVersion": 7,
@@ -93,9 +93,9 @@ exports[`Versioning should support multi env config in browserslist package.json
     "version": "13.52",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "android",
-    "version": "131",
+    "version": "138",
   },
   {
     "parsedVersion": 15.5,
@@ -108,14 +108,14 @@ exports[`Versioning should support multi env config in browserslist package.json
     "version": "14.9",
   },
   {
-    "parsedVersion": 132,
+    "parsedVersion": 140,
     "target": "and_ff",
-    "version": "132",
+    "version": "140",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "and_chr",
-    "version": "131",
+    "version": "138",
   },
 ]
 `;
@@ -133,19 +133,19 @@ exports[`Versioning should support resolving browserslist config in subdirectory
 exports[`Versioning should support resolving browserslist config in subdirectory 2`] = `
 [
   {
-    "parsedVersion": 26,
+    "parsedVersion": 27,
     "target": "samsung",
-    "version": "26",
+    "version": "27",
   },
   {
-    "parsedVersion": 17.6,
+    "parsedVersion": 18.4,
     "target": "safari",
-    "version": "17.6",
+    "version": "18.4",
   },
   {
-    "parsedVersion": 113,
+    "parsedVersion": 116,
     "target": "opera",
-    "version": "113",
+    "version": "116",
   },
   {
     "parsedVersion": 80,
@@ -163,19 +163,19 @@ exports[`Versioning should support resolving browserslist config in subdirectory
     "version": "2.5",
   },
   {
-    "parsedVersion": 15.6,
+    "parsedVersion": 18.4,
     "target": "ios_saf",
-    "version": "15.6-15.8",
+    "version": "18.4",
   },
   {
-    "parsedVersion": 115,
+    "parsedVersion": 128,
     "target": "firefox",
-    "version": "115",
+    "version": "128",
   },
   {
-    "parsedVersion": 130,
+    "parsedVersion": 137,
     "target": "edge",
-    "version": "130",
+    "version": "137",
   },
   {
     "parsedVersion": 109,
@@ -183,9 +183,9 @@ exports[`Versioning should support resolving browserslist config in subdirectory
     "version": "109",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "android",
-    "version": "131",
+    "version": "138",
   },
   {
     "parsedVersion": 15.5,
@@ -198,14 +198,14 @@ exports[`Versioning should support resolving browserslist config in subdirectory
     "version": "14.9",
   },
   {
-    "parsedVersion": 132,
+    "parsedVersion": 140,
     "target": "and_ff",
-    "version": "132",
+    "version": "140",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "and_chr",
-    "version": "131",
+    "version": "138",
   },
 ]
 `;
@@ -213,19 +213,19 @@ exports[`Versioning should support resolving browserslist config in subdirectory
 exports[`Versioning should support single array config in browserslist package.json 1`] = `
 [
   {
-    "parsedVersion": 24,
+    "parsedVersion": 25,
     "target": "samsung",
-    "version": "24",
+    "version": "25",
   },
   {
-    "parsedVersion": 17.5,
+    "parsedVersion": 18.2,
     "target": "safari",
-    "version": "17.5",
+    "version": "18.2",
   },
   {
-    "parsedVersion": 111,
+    "parsedVersion": 114,
     "target": "opera",
-    "version": "111",
+    "version": "114",
   },
   {
     "parsedVersion": 80,
@@ -243,9 +243,9 @@ exports[`Versioning should support single array config in browserslist package.j
     "version": "2.5",
   },
   {
-    "parsedVersion": 17.5,
+    "parsedVersion": 18.2,
     "target": "ios_saf",
-    "version": "17.5",
+    "version": "18.2",
   },
   {
     "parsedVersion": 10,
@@ -258,19 +258,19 @@ exports[`Versioning should support single array config in browserslist package.j
     "version": "9",
   },
   {
-    "parsedVersion": 115,
+    "parsedVersion": 128,
     "target": "firefox",
-    "version": "115",
+    "version": "128",
   },
   {
-    "parsedVersion": 128,
+    "parsedVersion": 135,
     "target": "edge",
-    "version": "128",
+    "version": "135",
   },
   {
-    "parsedVersion": 109,
+    "parsedVersion": 112,
     "target": "chrome",
-    "version": "109",
+    "version": "112",
   },
   {
     "parsedVersion": 7,
@@ -283,9 +283,9 @@ exports[`Versioning should support single array config in browserslist package.j
     "version": "13.52",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "android",
-    "version": "131",
+    "version": "138",
   },
   {
     "parsedVersion": 15.5,
@@ -298,14 +298,14 @@ exports[`Versioning should support single array config in browserslist package.j
     "version": "14.9",
   },
   {
-    "parsedVersion": 132,
+    "parsedVersion": 140,
     "target": "and_ff",
-    "version": "132",
+    "version": "140",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "and_chr",
-    "version": "131",
+    "version": "138",
   },
 ]
 `;
@@ -313,19 +313,19 @@ exports[`Versioning should support single array config in browserslist package.j
 exports[`Versioning should support string config in rule option 1`] = `
 [
   {
-    "parsedVersion": 26,
+    "parsedVersion": 27,
     "target": "samsung",
-    "version": "26",
+    "version": "27",
   },
   {
-    "parsedVersion": 17.6,
+    "parsedVersion": 18.4,
     "target": "safari",
-    "version": "17.6",
+    "version": "18.4",
   },
   {
-    "parsedVersion": 113,
+    "parsedVersion": 116,
     "target": "opera",
-    "version": "113",
+    "version": "116",
   },
   {
     "parsedVersion": 80,
@@ -343,19 +343,19 @@ exports[`Versioning should support string config in rule option 1`] = `
     "version": "2.5",
   },
   {
-    "parsedVersion": 15.6,
+    "parsedVersion": 18.4,
     "target": "ios_saf",
-    "version": "15.6-15.8",
+    "version": "18.4",
   },
   {
-    "parsedVersion": 115,
+    "parsedVersion": 128,
     "target": "firefox",
-    "version": "115",
+    "version": "128",
   },
   {
-    "parsedVersion": 130,
+    "parsedVersion": 137,
     "target": "edge",
-    "version": "130",
+    "version": "137",
   },
   {
     "parsedVersion": 109,
@@ -363,9 +363,9 @@ exports[`Versioning should support string config in rule option 1`] = `
     "version": "109",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "android",
-    "version": "131",
+    "version": "138",
   },
   {
     "parsedVersion": 15.5,
@@ -378,14 +378,14 @@ exports[`Versioning should support string config in rule option 1`] = `
     "version": "14.9",
   },
   {
-    "parsedVersion": 132,
+    "parsedVersion": 140,
     "target": "and_ff",
-    "version": "132",
+    "version": "140",
   },
   {
-    "parsedVersion": 131,
+    "parsedVersion": 138,
     "target": "and_chr",
-    "version": "131",
+    "version": "138",
   },
 ]
 `;
diff --git a/test/e2e.spec.ts b/test/e2e.spec.ts
index 7e779f4..daba097 100644
--- a/test/e2e.spec.ts
+++ b/test/e2e.spec.ts
@@ -1,6 +1,6 @@
 import { RuleTester } from "eslint";
-import rule from "../src/rules/compat";
 import { parser } from "typescript-eslint";
+import rule from "../src/rules/compat";
 
 const ruleTester = new RuleTester({
   languageOptions: {
@@ -691,5 +691,21 @@ ruleTester.run("compat", rule, {
         },
       ],
     },
+    {
+      code: "/(?<=y)x/, new RegExp('(?<!y)x'), 'x', true, false, null, 1, 0n",
+      settings: {
+        browsers: ["Safari >= 16.3", "iOS >= 16.3"],
+      },
+      errors: [
+        {
+          message:
+            "Lookbehind is not supported in Safari 16.3, iOS Safari 16.3",
+        },
+        {
+          message:
+            "Lookbehind is not supported in Safari 16.3, iOS Safari 16.3",
+        },
+      ],
+    },
   ],
 });