diff --git a/README.md b/README.md
index 22ed1f58..4ac7d800 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,7 @@
| パッケージ名 | 内容 |
| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| [`@d-zero/eslint-plugin`](./packages/%40d-zero/eslint-plugin/) | [`@d-zero/eslint-config`](./packages/%40d-zero/eslint-config/)に設定されているディーゼロ独自のESLintルール |
| [`@d-zero/stylelint-rules`](./packages/%40d-zero/stylelint-rules/) | [`@d-zero/stylelint-config`](./packages/%40d-zero/stylelint-config/)に設定されているディーゼロ独自のStylelintルール |
| [`@d-zero/csstree-scss-syntax`](./packages/%40d-zero/csstree-scss-syntax/) | [`@d-zero/stylelint-rules`](./packages/%40d-zero/stylelint-rules/)内で使用されている[CSSTree](https://github.com/csstree/csstree)用の[SCSS](https://sass-lang.com/documentation/syntax/#scss)パーサープラグイン |
diff --git a/cspell.json b/cspell.json
index b676494b..b97166dc 100644
--- a/cspell.json
+++ b/cspell.json
@@ -6,7 +6,11 @@
"unspaced",
//
- "splide"
+ "splide",
+
+ // ESLint plugin
+ "dzero",
+ "TSES"
],
"overrides": [
{
diff --git a/packages/@d-zero/eslint-config/base.js b/packages/@d-zero/eslint-config/base.js
index 7ce7c1f8..8b27f8f5 100644
--- a/packages/@d-zero/eslint-config/base.js
+++ b/packages/@d-zero/eslint-config/base.js
@@ -1,3 +1,4 @@
+import dzeroPlugin from '@d-zero/eslint-plugin';
import js from '@eslint/js';
import comments from 'eslint-plugin-eslint-comments';
import { flatConfigs as importX } from 'eslint-plugin-import-x';
@@ -249,4 +250,12 @@ export const base = [
},
},
},
+ {
+ plugins: {
+ '@d-zero': dzeroPlugin,
+ },
+ rules: {
+ '@d-zero/no-click-event': 'warn',
+ },
+ },
];
diff --git a/packages/@d-zero/eslint-config/package.json b/packages/@d-zero/eslint-config/package.json
index b81c3b72..ce205c15 100644
--- a/packages/@d-zero/eslint-config/package.json
+++ b/packages/@d-zero/eslint-config/package.json
@@ -19,6 +19,7 @@
".": "./index.js"
},
"dependencies": {
+ "@d-zero/eslint-plugin": "5.0.0",
"@eslint/js": "9.39.2",
"eslint": "9.39.2",
"eslint-plugin-eslint-comments": "3.2.0",
diff --git a/packages/@d-zero/eslint-plugin/CHANGELOG.md b/packages/@d-zero/eslint-plugin/CHANGELOG.md
new file mode 100644
index 00000000..9bbcece0
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/CHANGELOG.md
@@ -0,0 +1,15 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+## [5.0.0] - TBD
+
+### Added
+
+- Initial release of @d-zero/eslint-plugin
+- Added `no-click-event` rule to discourage click event handlers in favor of Invoker Commands API
+ - Detects `addEventListener('click')`
+ - Detects `onclick` IDL property assignment
+ - Detects jQuery `.on('click')` and `.click()`
+ - Detects React `onClick` JSX attribute
+ - Detects Vue `@click` and `v-on:click`
diff --git a/packages/@d-zero/eslint-plugin/LICENSE b/packages/@d-zero/eslint-plugin/LICENSE
new file mode 100644
index 00000000..195de67a
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 D-ZERO Co., Ltd.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/@d-zero/eslint-plugin/README.md b/packages/@d-zero/eslint-plugin/README.md
new file mode 100644
index 00000000..5a34333a
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/README.md
@@ -0,0 +1,42 @@
+# `@d-zero/eslint-plugin`
+
+Custom ESLint rules for D-ZERO.
+
+## Installation
+
+```sh
+npm install @d-zero/eslint-plugin --save-dev
+```
+
+## Configuration
+
+Add the following to your `eslint.config.js`:
+
+```js
+import dzeroPlugin from '@d-zero/eslint-plugin';
+
+export default [
+ {
+ plugins: {
+ '@d-zero': dzeroPlugin,
+ },
+ rules: {
+ '@d-zero/no-click-event': 'warn',
+ },
+ },
+];
+```
+
+## Rules
+
+### `@d-zero/no-click-event`
+
+Disallows click event handlers in favor of the [Invoker Commands API](https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API).
+
+**Detected patterns:**
+
+- `addEventListener('click', ...)`
+- `element.onclick = ...`
+- jQuery `.on('click', ...)` and `.click()`
+- React `onClick={...}`
+- Vue `@click` and `v-on:click`
diff --git a/packages/@d-zero/eslint-plugin/package.json b/packages/@d-zero/eslint-plugin/package.json
new file mode 100644
index 00000000..3bb1542b
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@d-zero/eslint-plugin",
+ "version": "5.0.0",
+ "description": "Custom ESLint rules for D-ZERO",
+ "repository": "https://github.com/d-zero-dev/linters.git",
+ "author": "D-ZERO Co., Ltd.",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "engines": {
+ "node": ">=22.0.0"
+ },
+ "type": "module",
+ "exports": {
+ ".": "./dist/index.js"
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "tsc"
+ },
+ "peerDependencies": {
+ "eslint": ">=9.0.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": "8.53.1"
+ },
+ "devDependencies": {
+ "@typescript-eslint/parser": "8.53.1",
+ "@typescript-eslint/rule-tester": "8.53.1",
+ "eslint": "9.39.2",
+ "vue-eslint-parser": "9.4.3"
+ }
+}
diff --git a/packages/@d-zero/eslint-plugin/src/const.ts b/packages/@d-zero/eslint-plugin/src/const.ts
new file mode 100644
index 00000000..94c90cc8
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/src/const.ts
@@ -0,0 +1,3 @@
+export const NAMESPACE = '@d-zero';
+export const REPOSITORY_URL =
+ 'https://github.com/d-zero-dev/linters/tree/main/packages/%40d-zero/eslint-plugin/src/rules';
diff --git a/packages/@d-zero/eslint-plugin/src/index.ts b/packages/@d-zero/eslint-plugin/src/index.ts
new file mode 100644
index 00000000..e1cd5f17
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/src/index.ts
@@ -0,0 +1,13 @@
+import noClickEvent from './rules/no-click-event/index.js';
+
+const plugin = {
+ meta: {
+ name: '@d-zero/eslint-plugin',
+ version: '5.0.0',
+ },
+ rules: {
+ 'no-click-event': noClickEvent,
+ },
+};
+
+export default plugin;
diff --git a/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.spec.ts b/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.spec.ts
new file mode 100644
index 00000000..ea7cea1a
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.spec.ts
@@ -0,0 +1,87 @@
+import { RuleTester } from '@typescript-eslint/rule-tester';
+import { afterAll, describe, it } from 'vitest';
+
+import rule from './index.js';
+
+RuleTester.afterAll = afterAll;
+RuleTester.describe = describe;
+RuleTester.it = it;
+
+const ruleTester = new RuleTester({
+ languageOptions: {
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ ecmaVersion: 2023,
+ sourceType: 'module',
+ },
+ },
+});
+
+ruleTester.run('no-click-event', rule, {
+ valid: [
+ // Valid: not using click events
+ 'element.addEventListener("focus", handler)',
+ 'element.onfocus = handler',
+ '$element.on("hover", handler)',
+ '$element.focus()',
+ '',
+ '',
+
+ // Valid: using Invoker Commands API (future-proof examples)
+ 'button.commandfor = "target-id"',
+ 'button.command = "show-modal"',
+ ],
+ invalid: [
+ // Pattern 1: addEventListener('click')
+ {
+ code: 'element.addEventListener("click", handler)',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ {
+ code: "element.addEventListener('click', () => {})",
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+
+ // Pattern 2: onclick IDL property
+ {
+ code: 'element.onclick = handler',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ {
+ code: 'document.getElementById("btn").onclick = () => {}',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+
+ // Pattern 3: jQuery .on('click')
+ {
+ code: '$element.on("click", handler)',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ {
+ code: "jQuery('#btn').on('click', function() {})",
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+
+ // Pattern 4: jQuery .click()
+ {
+ code: '$element.click(handler)',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ {
+ code: '$(".button").click()',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+
+ // Pattern 5: React onClick
+ {
+ code: '',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ {
+ code: '
console.log("clicked")}>Click
',
+ errors: [{ messageId: 'noClickEvent' }],
+ },
+ ],
+});
diff --git a/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.ts b/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.ts
new file mode 100644
index 00000000..14d79ac7
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/src/rules/no-click-event/index.ts
@@ -0,0 +1,100 @@
+import type { TSESTree } from '@typescript-eslint/utils';
+
+import { createRule } from '../../utils/create-rule.js';
+
+export default createRule({
+ name: 'no-click-event',
+ meta: {
+ type: 'suggestion',
+ docs: {
+ description: 'Disallow click event handlers in favor of Invoker Commands API',
+ },
+ messages: {
+ noClickEvent:
+ 'Avoid using click events. Consider using the Invoker Commands API instead. See: https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API',
+ },
+ schema: [], // No options
+ },
+ defaultOptions: [],
+ create(context) {
+ return {
+ // Pattern 1: addEventListener('click', ...)
+ 'CallExpression[callee.property.name="addEventListener"]'(
+ node: TSESTree.CallExpression,
+ ) {
+ const args = node.arguments;
+ const firstArg = args[0];
+ if (firstArg && firstArg.type === 'Literal' && firstArg.value === 'click') {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ }
+ },
+
+ // Pattern 2: element.onclick = ...
+ 'AssignmentExpression[left.type="MemberExpression"][left.property.name="onclick"]'(
+ node: TSESTree.AssignmentExpression,
+ ) {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ },
+
+ // Pattern 3: jQuery .on('click', ...) and .click()
+ 'CallExpression[callee.type="MemberExpression"]'(node: TSESTree.CallExpression) {
+ const callee = node.callee as TSESTree.MemberExpression;
+
+ // .click()
+ if (callee.property.type === 'Identifier' && callee.property.name === 'click') {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ }
+
+ // .on('click', ...)
+ const firstArg = node.arguments[0];
+ if (
+ callee.property.type === 'Identifier' &&
+ callee.property.name === 'on' &&
+ firstArg &&
+ firstArg.type === 'Literal' &&
+ firstArg.value === 'click'
+ ) {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ }
+ },
+
+ // Pattern 4: React onClick={...}
+ 'JSXAttribute[name.name="onClick"]'(node: TSESTree.JSXAttribute) {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ },
+
+ // Pattern 5: Vue @click or v-on:click
+ // Note: This requires vue-eslint-parser
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ 'VAttribute[key.name.name="click"]'(node: any) {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ },
+
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ 'VAttribute[key.name="on"][key.argument.name="click"]'(node: any) {
+ context.report({
+ node,
+ messageId: 'noClickEvent',
+ });
+ },
+ };
+ },
+});
diff --git a/packages/@d-zero/eslint-plugin/src/utils/create-rule.ts b/packages/@d-zero/eslint-plugin/src/utils/create-rule.ts
new file mode 100644
index 00000000..f0a633a7
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/src/utils/create-rule.ts
@@ -0,0 +1,8 @@
+import { ESLintUtils } from '@typescript-eslint/utils';
+
+import { REPOSITORY_URL } from '../const.js';
+
+/**
+ * Creates a rule with the D-ZERO namespace and documentation URL
+ */
+export const createRule = ESLintUtils.RuleCreator((name) => `${REPOSITORY_URL}/${name}`);
diff --git a/packages/@d-zero/eslint-plugin/tsconfig.json b/packages/@d-zero/eslint-plugin/tsconfig.json
new file mode 100644
index 00000000..aa6afc7e
--- /dev/null
+++ b/packages/@d-zero/eslint-plugin/tsconfig.json
@@ -0,0 +1,10 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "noEmit": false,
+ "outDir": "dist",
+ "rootDir": "src"
+ },
+ "include": ["src"],
+ "exclude": ["dist", "**/*.spec.ts"]
+}
diff --git a/test/cli.spec.mjs b/test/cli.spec.mjs
index 522e4837..14c3bafa 100644
--- a/test/cli.spec.mjs
+++ b/test/cli.spec.mjs
@@ -87,6 +87,19 @@ describe('ESLint', () => {
"1:1 error Avoid using 'DOMContentLoaded'. Use 'defer' or 'type=module' attribute instead no-restricted-syntax",
]);
});
+
+ test('no-click-event', async () => {
+ const result = await eslint(
+ 'test/fixtures/eslint/no-click-event.ts',
+ '@d-zero/no-click-event',
+ );
+ expect(result).toStrictEqual([
+ '2:1 warning Avoid using click events. Consider using the Invoker Commands API instead. See: https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API @d-zero/no-click-event',
+ '7:2 warning Avoid using click events. Consider using the Invoker Commands API instead. See: https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API @d-zero/no-click-event',
+ '12:1 warning Avoid using click events. Consider using the Invoker Commands API instead. See: https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API @d-zero/no-click-event',
+ '15:1 warning Avoid using click events. Consider using the Invoker Commands API instead. See: https://developer.mozilla.org/docs/Web/API/Invoker_Commands_API @d-zero/no-click-event',
+ ]);
+ });
});
describe('markuplint', () => {
diff --git a/test/fixtures/eslint/no-click-event.ts b/test/fixtures/eslint/no-click-event.ts
new file mode 100644
index 00000000..0dbb04bc
--- /dev/null
+++ b/test/fixtures/eslint/no-click-event.ts
@@ -0,0 +1,18 @@
+// Pattern 1: addEventListener('click')
+document.addEventListener('click', () => {});
+
+// Pattern 2: onclick IDL property
+const button = document.querySelector('button');
+if (button) {
+ button.onclick = () => {};
+}
+
+// Pattern 3: jQuery .on('click')
+declare const $: any;
+$('#element').on('click', () => {});
+
+// Pattern 4: jQuery .click()
+$('.button').click();
+
+// Valid: not click events
+document.addEventListener('focus', () => {});
diff --git a/yarn.lock b/yarn.lock
index d192c3c2..f0600a61 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1017,6 +1017,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@d-zero/eslint-config@workspace:packages/@d-zero/eslint-config"
dependencies:
+ "@d-zero/eslint-plugin": "npm:5.0.0"
"@eslint/js": "npm:9.39.2"
eslint: "npm:9.39.2"
eslint-plugin-eslint-comments: "npm:3.2.0"
@@ -1030,6 +1031,20 @@ __metadata:
languageName: unknown
linkType: soft
+"@d-zero/eslint-plugin@npm:5.0.0, @d-zero/eslint-plugin@workspace:packages/@d-zero/eslint-plugin":
+ version: 0.0.0-use.local
+ resolution: "@d-zero/eslint-plugin@workspace:packages/@d-zero/eslint-plugin"
+ dependencies:
+ "@typescript-eslint/parser": "npm:8.53.1"
+ "@typescript-eslint/rule-tester": "npm:8.53.1"
+ "@typescript-eslint/utils": "npm:8.53.1"
+ eslint: "npm:9.39.2"
+ vue-eslint-parser: "npm:9.4.3"
+ peerDependencies:
+ eslint: ">=9.0.0"
+ languageName: unknown
+ linkType: soft
+
"@d-zero/lint-staged-config@workspace:packages/@d-zero/lint-staged-config":
version: 0.0.0-use.local
resolution: "@d-zero/lint-staged-config@workspace:packages/@d-zero/lint-staged-config"
@@ -3697,6 +3712,23 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/rule-tester@npm:8.53.1":
+ version: 8.53.1
+ resolution: "@typescript-eslint/rule-tester@npm:8.53.1"
+ dependencies:
+ "@typescript-eslint/parser": "npm:8.53.1"
+ "@typescript-eslint/typescript-estree": "npm:8.53.1"
+ "@typescript-eslint/utils": "npm:8.53.1"
+ ajv: "npm:^6.12.6"
+ json-stable-stringify-without-jsonify: "npm:^1.0.1"
+ lodash.merge: "npm:4.6.2"
+ semver: "npm:^7.7.3"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ checksum: 10c0/418c5d9c646c9879050a4a4e9f297955fca8862f76363c05bedd0cd48e7f3e2ca3608dffc873658dbc96e485f1cdd97fdbf64289ab10e8cd91940c11323a39b5
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/scope-manager@npm:8.53.1":
version: 8.53.1
resolution: "@typescript-eslint/scope-manager@npm:8.53.1"
@@ -4103,7 +4135,7 @@ __metadata:
languageName: node
linkType: hard
-"acorn@npm:^8.15.0":
+"acorn@npm:^8.15.0, acorn@npm:^8.9.0":
version: 8.15.0
resolution: "acorn@npm:8.15.0"
bin:
@@ -4150,7 +4182,7 @@ __metadata:
languageName: node
linkType: hard
-"ajv@npm:^6.12.4":
+"ajv@npm:^6.12.4, ajv@npm:^6.12.6":
version: 6.12.6
resolution: "ajv@npm:6.12.6"
dependencies:
@@ -6490,6 +6522,16 @@ __metadata:
languageName: node
linkType: hard
+"eslint-scope@npm:^7.1.1":
+ version: 7.2.2
+ resolution: "eslint-scope@npm:7.2.2"
+ dependencies:
+ esrecurse: "npm:^4.3.0"
+ estraverse: "npm:^5.2.0"
+ checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116
+ languageName: node
+ linkType: hard
+
"eslint-scope@npm:^8.4.0":
version: 8.4.0
resolution: "eslint-scope@npm:8.4.0"
@@ -6500,7 +6542,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-visitor-keys@npm:^3.4.3":
+"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820
@@ -6592,6 +6634,17 @@ __metadata:
languageName: node
linkType: hard
+"espree@npm:^9.3.1":
+ version: 9.6.1
+ resolution: "espree@npm:9.6.1"
+ dependencies:
+ acorn: "npm:^8.9.0"
+ acorn-jsx: "npm:^5.3.2"
+ eslint-visitor-keys: "npm:^3.4.1"
+ checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460
+ languageName: node
+ linkType: hard
+
"esprima@npm:^4.0.0, esprima@npm:^4.0.1":
version: 4.0.1
resolution: "esprima@npm:4.0.1"
@@ -6602,21 +6655,21 @@ __metadata:
languageName: node
linkType: hard
-"esquery@npm:^1.5.0, esquery@npm:^1.6.0":
- version: 1.6.0
- resolution: "esquery@npm:1.6.0"
+"esquery@npm:^1.4.0, esquery@npm:^1.7.0":
+ version: 1.7.0
+ resolution: "esquery@npm:1.7.0"
dependencies:
estraverse: "npm:^5.1.0"
- checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2
+ checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793
languageName: node
linkType: hard
-"esquery@npm:^1.7.0":
- version: 1.7.0
- resolution: "esquery@npm:1.7.0"
+"esquery@npm:^1.5.0, esquery@npm:^1.6.0":
+ version: 1.6.0
+ resolution: "esquery@npm:1.6.0"
dependencies:
estraverse: "npm:^5.1.0"
- checksum: 10c0/77d5173db450b66f3bc685d11af4c90cffeedb340f34a39af96d43509a335ce39c894fd79233df32d38f5e4e219fa0f7076f6ec90bae8320170ba082c0db4793
+ checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2
languageName: node
linkType: hard
@@ -9310,7 +9363,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash.merge@npm:^4.6.2":
+"lodash.merge@npm:4.6.2, lodash.merge@npm:^4.6.2":
version: 4.6.2
resolution: "lodash.merge@npm:4.6.2"
checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506
@@ -12528,7 +12581,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.6.3, semver@npm:^7.7.3":
+"semver@npm:^7.3.6, semver@npm:^7.6.3, semver@npm:^7.7.3":
version: 7.7.3
resolution: "semver@npm:7.7.3"
bin:
@@ -14616,6 +14669,23 @@ __metadata:
languageName: node
linkType: hard
+"vue-eslint-parser@npm:9.4.3":
+ version: 9.4.3
+ resolution: "vue-eslint-parser@npm:9.4.3"
+ dependencies:
+ debug: "npm:^4.3.4"
+ eslint-scope: "npm:^7.1.1"
+ eslint-visitor-keys: "npm:^3.3.0"
+ espree: "npm:^9.3.1"
+ esquery: "npm:^1.4.0"
+ lodash: "npm:^4.17.21"
+ semver: "npm:^7.3.6"
+ peerDependencies:
+ eslint: ">=6.0.0"
+ checksum: 10c0/128be5988de025b5abd676a91c3e92af68288a5da1c20b2ff848fe90e040c04b2222a03b5d8048cf4a5e0b667a8addfb6f6e6565860d4afb5190c4cc42d05578
+ languageName: node
+ linkType: hard
+
"walk-up-path@npm:^4.0.0":
version: 4.0.0
resolution: "walk-up-path@npm:4.0.0"