From 49fbf056b4b4a40f8ea38c552c2477b398fc41d8 Mon Sep 17 00:00:00 2001 From: azu Date: Sun, 6 Jul 2025 14:54:37 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Biome.js=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=83=E3=83=88=E3=81=A8=E3=83=AA=E3=83=B3=E3=83=88=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Biome.jsの設定ファイル(biome.json)を追加 - lint-stagedとhuskyによるpre-commitフックを設定 - 既存のコードをBiomeでフォーマット - package.jsonにlintとformatスクリプトを追加 Biome.jsを採用した理由: - ESLintとPrettierの機能を統合した高速なツール - 設定がシンプルで保守しやすい - Rustで実装されており処理が高速 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .githooks/pre-commit | 2 + biome.json | 44 + ...xtlint-rule-preset-ja-technical-writing.js | 251 +++--- package-lock.json | 764 +++++++++++++++++- package.json | 13 +- renovate.json | 4 +- ...t-rule-preset-ja-technical-writing-test.js | 16 +- 7 files changed, 952 insertions(+), 142 deletions(-) create mode 100755 .githooks/pre-commit create mode 100644 biome.json diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000..0840424 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,2 @@ +#!/bin/sh +npx --no-install lint-staged \ No newline at end of file diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..4765100 --- /dev/null +++ b/biome.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.0.6/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 120, + "attributePosition": "auto" + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "suspicious": { + "noDebugger": "error", + "noConsole": "warn" + }, + "correctness": { + "noUnusedVariables": "error" + }, + "style": { + "noNonNullAssertion": "warn", + "useConst": "error" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double", + "semicolons": "always", + "trailingCommas": "es5", + "arrowParentheses": "always" + } + } +} diff --git a/lib/textlint-rule-preset-ja-technical-writing.js b/lib/textlint-rule-preset-ja-technical-writing.js index 6f597ef..c7983e0 100644 --- a/lib/textlint-rule-preset-ja-technical-writing.js +++ b/lib/textlint-rule-preset-ja-technical-writing.js @@ -1,131 +1,130 @@ -"use strict"; const { moduleInterop } = require("@textlint/module-interop"); const jtfRules = moduleInterop(require("textlint-rule-preset-jtf-style")).rules; module.exports = { - rules: { - "sentence-length": moduleInterop(require("textlint-rule-sentence-length")), - "max-comma": moduleInterop(require("textlint-rule-max-comma")), - "max-ten": moduleInterop(require("textlint-rule-max-ten")), - "max-kanji-continuous-len": moduleInterop(require("textlint-rule-max-kanji-continuous-len")), - "no-mix-dearu-desumasu": moduleInterop(require("textlint-rule-no-mix-dearu-desumasu")), - "ja-no-mixed-period": moduleInterop(require("textlint-rule-ja-no-mixed-period")), - "arabic-kanji-numbers": jtfRules["2.2.2.算用数字と漢数字の使い分け"], - "no-doubled-conjunction": moduleInterop(require("textlint-rule-no-doubled-conjunction")), - "no-doubled-conjunctive-particle-ga": moduleInterop(require("textlint-rule-no-doubled-conjunctive-particle-ga")), - "no-double-negative-ja": moduleInterop(require("textlint-rule-no-double-negative-ja")), - "no-doubled-joshi": moduleInterop(require("textlint-rule-no-doubled-joshi")), - "no-dropping-the-ra": moduleInterop(require("textlint-rule-no-dropping-the-ra")), - "no-nfd": moduleInterop(require("textlint-rule-no-nfd")), - "no-exclamation-question-mark": moduleInterop(require("textlint-rule-no-exclamation-question-mark")), - "no-hankaku-kana": moduleInterop(require("textlint-rule-no-hankaku-kana")), - "no-invalid-control-character": moduleInterop(require("@textlint-rule/textlint-rule-no-invalid-control-character")), - "ja-no-weak-phrase": moduleInterop(require("textlint-rule-ja-no-weak-phrase")), - "ja-no-successive-word": moduleInterop(require("textlint-rule-ja-no-successive-word")), - "ja-no-abusage": moduleInterop(require("textlint-rule-ja-no-abusage")), - "ja-no-redundant-expression": moduleInterop(require("textlint-rule-ja-no-redundant-expression")), - "ja-unnatural-alphabet": moduleInterop(require("textlint-rule-ja-unnatural-alphabet")), - "no-unmatched-pair": moduleInterop(require("@textlint-rule/textlint-rule-no-unmatched-pair")), - "no-zero-width-spaces": moduleInterop(require("textlint-rule-no-zero-width-spaces")) + rules: { + "sentence-length": moduleInterop(require("textlint-rule-sentence-length")), + "max-comma": moduleInterop(require("textlint-rule-max-comma")), + "max-ten": moduleInterop(require("textlint-rule-max-ten")), + "max-kanji-continuous-len": moduleInterop(require("textlint-rule-max-kanji-continuous-len")), + "no-mix-dearu-desumasu": moduleInterop(require("textlint-rule-no-mix-dearu-desumasu")), + "ja-no-mixed-period": moduleInterop(require("textlint-rule-ja-no-mixed-period")), + "arabic-kanji-numbers": jtfRules["2.2.2.算用数字と漢数字の使い分け"], + "no-doubled-conjunction": moduleInterop(require("textlint-rule-no-doubled-conjunction")), + "no-doubled-conjunctive-particle-ga": moduleInterop(require("textlint-rule-no-doubled-conjunctive-particle-ga")), + "no-double-negative-ja": moduleInterop(require("textlint-rule-no-double-negative-ja")), + "no-doubled-joshi": moduleInterop(require("textlint-rule-no-doubled-joshi")), + "no-dropping-the-ra": moduleInterop(require("textlint-rule-no-dropping-the-ra")), + "no-nfd": moduleInterop(require("textlint-rule-no-nfd")), + "no-exclamation-question-mark": moduleInterop(require("textlint-rule-no-exclamation-question-mark")), + "no-hankaku-kana": moduleInterop(require("textlint-rule-no-hankaku-kana")), + "no-invalid-control-character": moduleInterop(require("@textlint-rule/textlint-rule-no-invalid-control-character")), + "ja-no-weak-phrase": moduleInterop(require("textlint-rule-ja-no-weak-phrase")), + "ja-no-successive-word": moduleInterop(require("textlint-rule-ja-no-successive-word")), + "ja-no-abusage": moduleInterop(require("textlint-rule-ja-no-abusage")), + "ja-no-redundant-expression": moduleInterop(require("textlint-rule-ja-no-redundant-expression")), + "ja-unnatural-alphabet": moduleInterop(require("textlint-rule-ja-unnatural-alphabet")), + "no-unmatched-pair": moduleInterop(require("@textlint-rule/textlint-rule-no-unmatched-pair")), + "no-zero-width-spaces": moduleInterop(require("textlint-rule-no-zero-width-spaces")), + }, + rulesConfig: { + // # 1文の長さは100文字以下とする + // https://github.com/textlint-rule/textlint-rule-sentence-length + "sentence-length": { + max: 100, }, - rulesConfig: { - // # 1文の長さは100文字以下とする - // https://github.com/textlint-rule/textlint-rule-sentence-length - "sentence-length": { - max: 100 - }, - // # コンマは1文中に3つまで - // https://github.com/textlint-rule/textlint-rule-max-comma - "max-comma": { - max: 3 - }, - // # 読点は1文中に3つまで - // https://github.com/textlint-ja/textlint-rule-max-ten - "max-ten": { - max: 3 - }, - // # 連続できる最大の漢字長は6文字まで - // 漢字が連続していると読みにくさにつながります。 - // https://github.com/textlint-ja/textlint-rule-max-kanji-continuous-len - "max-kanji-continuous-len": { - max: 6 - }, - // # 漢数字と算用数字を使い分けます - // 数量を表現し、数を数えられるものは算用数字を使用します。 - // 任意の数に置き換えても通用する語句がこれに該当します。 - // 序数詞(「第~回」「~番目」「~回目」)も算用数字を使います。 - // 慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。 - // https://github.com/textlint-ja/textlint-rule-preset-JTF-style - // https://www.jtf.jp/jp/style_guide/styleguide_top.html - "arabic-kanji-numbers": true, - // # 「ですます調」、「である調」を統一します - // 見出しは自動 - // 本文はですます調 - // 箇条書きはである調 - // https://github.com/textlint-ja/textlint-rule-no-mix-dearu-desumasu - "no-mix-dearu-desumasu": { - "preferInHeader": "", - "preferInBody": "ですます", - "preferInList": "である", - "strict": false - }, - // # 文末の句点記号として「。」を使います - // https://github.com/textlint-ja/textlint-rule-ja-no-mixed-period - "ja-no-mixed-period": { - "periodMark": "。" - }, - // # 二重否定は使用しない - // https://github.com/textlint-ja/textlint-rule-no-double-negative-ja - "no-double-negative-ja": true, - // # ら抜き言葉を使用しない - // https://github.com/textlint-ja/textlint-rule-no-dropping-the-ra - "no-dropping-the-ra": true, - // # 逆接の接続助詞「が」を連続して使用しない - // 逆接の接続助詞「が」は、特に否定の意味ではなくても安易に使われてしまいがちです。 - // 同一文中に複数回出現していないかどうかをチェックします。 - // https://github.com/textlint-ja/textlint-rule-no-doubled-conjunctive-particle-ga - "no-doubled-conjunctive-particle-ga": true, - // # 同じ接続詞を連続して使用しない - // https://github.com/textlint-ja/textlint-rule-no-doubled-conjunction - "no-doubled-conjunction": true, - // # 同じ助詞を連続して使用しない - "no-doubled-joshi": { - "min_interval": 1 - }, - // # UTF8-MAC 濁点を使用しない - // 文章中にUTF8-MAC 濁点は不要です。 - // https://github.com/textlint-ja/textlint-rule-no-nfd - "no-nfd": true, - // # 不必要な制御文字を使用しない - // 改行やタブ以外の一般的な文章にはでてこない不自然な制御文字が入るのを防止します。 - // https://github.com/textlint-rule/textlint-rule-no-invalid-control-character - "no-invalid-control-character": true, - // # ゼロ幅スペースの検出 - // https://github.com/textlint-rule/textlint-rule-no-zero-width-spaces - "no-zero-width-spaces": true, - // # 感嘆符!!、疑問符??を使用しない - // https://github.com/textlint-rule/textlint-rule-no-exclamation-question-mark - "no-exclamation-question-mark": true, - // # 半角カナを使用しない - // https://github.com/textlint-ja/textlint-rule-no-hankaku-kana - "no-hankaku-kana": true, - // # 弱い日本語表現の利用を使用しない - // 〜かもしれない 等の弱い表現を使用しない - // https://github.com/textlint-ja/textlint-rule-ja-no-weak-phrase - "ja-no-weak-phrase": true, - // # 同一の単語を間違えて連続しているのをチェックする - // https://github.com/textlint-ja/textlint-rule-ja-no-successive-word - "ja-no-successive-word": true, - // # よくある日本語の誤用をチェックする - // https://github.com/textlint-ja/textlint-rule-ja-no-abusage - "ja-no-abusage": true, - // # 冗長な表現をチェックする - // https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression - "ja-no-redundant-expression": true, - // # 入力ミスで発生する不自然なアルファベットをチェックする - // https://github.com/textlint-ja/textlint-rule-ja-unnatural-alphabet - "ja-unnatural-alphabet": true, - // # 対になっていない括弧をチェックする - // https://github.com/textlint-rule/textlint-rule-no-unmatched-pair - "no-unmatched-pair": true - } + // # コンマは1文中に3つまで + // https://github.com/textlint-rule/textlint-rule-max-comma + "max-comma": { + max: 3, + }, + // # 読点は1文中に3つまで + // https://github.com/textlint-ja/textlint-rule-max-ten + "max-ten": { + max: 3, + }, + // # 連続できる最大の漢字長は6文字まで + // 漢字が連続していると読みにくさにつながります。 + // https://github.com/textlint-ja/textlint-rule-max-kanji-continuous-len + "max-kanji-continuous-len": { + max: 6, + }, + // # 漢数字と算用数字を使い分けます + // 数量を表現し、数を数えられるものは算用数字を使用します。 + // 任意の数に置き換えても通用する語句がこれに該当します。 + // 序数詞(「第~回」「~番目」「~回目」)も算用数字を使います。 + // 慣用的表現、熟語、概数、固有名詞、副詞など、漢数字を使用することが一般的な語句では漢数字を使います。 + // https://github.com/textlint-ja/textlint-rule-preset-JTF-style + // https://www.jtf.jp/jp/style_guide/styleguide_top.html + "arabic-kanji-numbers": true, + // # 「ですます調」、「である調」を統一します + // 見出しは自動 + // 本文はですます調 + // 箇条書きはである調 + // https://github.com/textlint-ja/textlint-rule-no-mix-dearu-desumasu + "no-mix-dearu-desumasu": { + preferInHeader: "", + preferInBody: "ですます", + preferInList: "である", + strict: false, + }, + // # 文末の句点記号として「。」を使います + // https://github.com/textlint-ja/textlint-rule-ja-no-mixed-period + "ja-no-mixed-period": { + periodMark: "。", + }, + // # 二重否定は使用しない + // https://github.com/textlint-ja/textlint-rule-no-double-negative-ja + "no-double-negative-ja": true, + // # ら抜き言葉を使用しない + // https://github.com/textlint-ja/textlint-rule-no-dropping-the-ra + "no-dropping-the-ra": true, + // # 逆接の接続助詞「が」を連続して使用しない + // 逆接の接続助詞「が」は、特に否定の意味ではなくても安易に使われてしまいがちです。 + // 同一文中に複数回出現していないかどうかをチェックします。 + // https://github.com/textlint-ja/textlint-rule-no-doubled-conjunctive-particle-ga + "no-doubled-conjunctive-particle-ga": true, + // # 同じ接続詞を連続して使用しない + // https://github.com/textlint-ja/textlint-rule-no-doubled-conjunction + "no-doubled-conjunction": true, + // # 同じ助詞を連続して使用しない + "no-doubled-joshi": { + min_interval: 1, + }, + // # UTF8-MAC 濁点を使用しない + // 文章中にUTF8-MAC 濁点は不要です。 + // https://github.com/textlint-ja/textlint-rule-no-nfd + "no-nfd": true, + // # 不必要な制御文字を使用しない + // 改行やタブ以外の一般的な文章にはでてこない不自然な制御文字が入るのを防止します。 + // https://github.com/textlint-rule/textlint-rule-no-invalid-control-character + "no-invalid-control-character": true, + // # ゼロ幅スペースの検出 + // https://github.com/textlint-rule/textlint-rule-no-zero-width-spaces + "no-zero-width-spaces": true, + // # 感嘆符!!、疑問符??を使用しない + // https://github.com/textlint-rule/textlint-rule-no-exclamation-question-mark + "no-exclamation-question-mark": true, + // # 半角カナを使用しない + // https://github.com/textlint-ja/textlint-rule-no-hankaku-kana + "no-hankaku-kana": true, + // # 弱い日本語表現の利用を使用しない + // 〜かもしれない 等の弱い表現を使用しない + // https://github.com/textlint-ja/textlint-rule-ja-no-weak-phrase + "ja-no-weak-phrase": true, + // # 同一の単語を間違えて連続しているのをチェックする + // https://github.com/textlint-ja/textlint-rule-ja-no-successive-word + "ja-no-successive-word": true, + // # よくある日本語の誤用をチェックする + // https://github.com/textlint-ja/textlint-rule-ja-no-abusage + "ja-no-abusage": true, + // # 冗長な表現をチェックする + // https://github.com/textlint-ja/textlint-rule-ja-no-redundant-expression + "ja-no-redundant-expression": true, + // # 入力ミスで発生する不自然なアルファベットをチェックする + // https://github.com/textlint-ja/textlint-rule-ja-unnatural-alphabet + "ja-unnatural-alphabet": true, + // # 対になっていない括弧をチェックする + // https://github.com/textlint-rule/textlint-rule-no-unmatched-pair + "no-unmatched-pair": true, + }, }; diff --git a/package-lock.json b/package-lock.json index ccefc7f..e9bd806 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,7 +35,9 @@ "textlint-rule-sentence-length": "^5.2.0" }, "devDependencies": { + "@biomejs/biome": "^2.0.6", "@changesets/cli": "^2.29.5", + "lint-staged": "^16.1.2", "markdown-toc": "^1.2.0", "mocha": "^11.7.1", "semver": "^7.7.2" @@ -100,6 +102,169 @@ "node": ">=6.9.0" } }, + "node_modules/@biomejs/biome": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.0.6.tgz", + "integrity": "sha512-RRP+9cdh5qwe2t0gORwXaa27oTOiQRQvrFf49x2PA1tnpsyU7FIHX4ZOFMtBC4QNtyWsN7Dqkf5EDbg4X+9iqA==", + "dev": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "2.0.6", + "@biomejs/cli-darwin-x64": "2.0.6", + "@biomejs/cli-linux-arm64": "2.0.6", + "@biomejs/cli-linux-arm64-musl": "2.0.6", + "@biomejs/cli-linux-x64": "2.0.6", + "@biomejs/cli-linux-x64-musl": "2.0.6", + "@biomejs/cli-win32-arm64": "2.0.6", + "@biomejs/cli-win32-x64": "2.0.6" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.0.6.tgz", + "integrity": "sha512-AzdiNNjNzsE6LfqWyBvcL29uWoIuZUkndu+wwlXW13EKcBHbbKjNQEZIJKYDc6IL+p7bmWGx3v9ZtcRyIoIz5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.0.6.tgz", + "integrity": "sha512-wJjjP4E7bO4WJmiQaLnsdXMa516dbtC6542qeRkyJg0MqMXP0fvs4gdsHhZ7p9XWTAmGIjZHFKXdsjBvKGIJJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.0.6.tgz", + "integrity": "sha512-ZSVf6TYo5rNMUHIW1tww+rs/krol7U5A1Is/yzWyHVZguuB0lBnIodqyFuwCNqG9aJGyk7xIMS8HG0qGUPz0SA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.6.tgz", + "integrity": "sha512-CVPEMlin3bW49sBqLBg2x016Pws7eUXA27XYDFlEtponD0luYjg2zQaMJ2nOqlkKG9fqzzkamdYxHdMDc2gZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.0.6.tgz", + "integrity": "sha512-geM1MkHTV1Kh2Cs/Xzot9BOF3WBacihw6bkEmxkz4nSga8B9/hWy5BDiOG3gHDGIBa8WxT0nzsJs2f/hPqQIQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.6.tgz", + "integrity": "sha512-mKHE/e954hR/hSnAcJSjkf4xGqZc/53Kh39HVW1EgO5iFi0JutTN07TSjEMg616julRtfSNJi0KNyxvc30Y4rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.0.6.tgz", + "integrity": "sha512-290V4oSFoKaprKE1zkYVsDfAdn0An5DowZ+GIABgjoq1ndhvNxkJcpxPsiYtT7slbVe3xmlT0ncdfOsN7KruzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.0.6.tgz", + "integrity": "sha512-bfM1Bce0d69Ao7pjTjUS+AWSZ02+5UHdiAP85Th8e9yV5xzw6JrHXbL5YWlcEKQ84FIZMdDc7ncuti1wd2sdbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@changesets/apply-release-plan": { "version": "7.0.12", "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.12.tgz", @@ -708,6 +873,22 @@ "node": ">=6" } }, + "node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-red": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", @@ -1126,6 +1307,93 @@ "node": ">=8" } }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1228,6 +1496,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/comma-separated-tokens": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", @@ -1238,6 +1513,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.0.tgz", + "integrity": "sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, "node_modules/commandpost": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.4.0.tgz", @@ -1344,9 +1629,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1520,6 +1805,19 @@ "node": ">=8.6" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-abstract": { "version": "1.23.8", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", @@ -1679,6 +1977,13 @@ "node": ">=4" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -1939,6 +2244,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", @@ -2935,6 +3253,60 @@ "node": ">=0.10.0" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lint-staged": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.1.2.tgz", + "integrity": "sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "commander": "^14.0.0", + "debug": "^4.4.1", + "lilconfig": "^3.1.3", + "listr2": "^8.3.3", + "micromatch": "^4.0.8", + "nano-spawn": "^1.0.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "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/list-item": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/list-item/-/list-item-1.1.1.tgz", @@ -2951,6 +3323,109 @@ "node": ">=0.10.0" } }, + "node_modules/listr2": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -3040,6 +3515,144 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", @@ -3447,6 +4060,19 @@ "node": ">=8.6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -3681,6 +4307,19 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nano-spawn": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nano-spawn/-/nano-spawn-1.0.2.tgz", + "integrity": "sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, "node_modules/object-assign": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", @@ -3754,6 +4393,22 @@ "node": ">=0.10.0" } }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -3955,6 +4610,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -4362,6 +5030,23 @@ "node": ">=8" } }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -4382,6 +5067,13 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -4689,6 +5381,49 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4736,6 +5471,16 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -5953,6 +6698,19 @@ "node": ">=10" } }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index aa41907..635f599 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,11 @@ "docs:toc": "markdown-toc -i README.md", "release": "changeset publish", "test": "mocha test/ && npm run test:example", - "test:example": "cd example && npm ci && npm test" + "test:example": "cd example && npm ci && npm test", + "lint": "biome check .", + "lint:fix": "biome check --write .", + "format": "biome format --write .", + "prepare": "git config --local core.hooksPath .githooks" }, "dependencies": { "@textlint-rule/textlint-rule-no-invalid-control-character": "^3.0.0", @@ -57,11 +61,18 @@ "textlint-rule-sentence-length": "^5.2.0" }, "devDependencies": { + "@biomejs/biome": "^2.0.6", "@changesets/cli": "^2.29.5", + "lint-staged": "^16.1.2", "markdown-toc": "^1.2.0", "mocha": "^11.7.1", "semver": "^7.7.2" }, + "lint-staged": { + "*.{js,jsx,ts,tsx,json}": [ + "biome check --write --no-errors-on-unmatched" + ] + }, "email": "azuciao@gmail.com", "packageManager": "npm@11.4.2+sha512.f90c1ec8b207b625d6edb6693aef23dacb39c38e4217fe8c46a973f119cab392ac0de23fe3f07e583188dae9fd9108b3845ad6f525b598742bd060ebad60bff3" } diff --git a/renovate.json b/renovate.json index 885c447..02511b6 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,3 @@ { - "extends": [ - "@azu" - ] + "extends": ["@azu"] } diff --git a/test/textlint-rule-preset-ja-technical-writing-test.js b/test/textlint-rule-preset-ja-technical-writing-test.js index 0a285d0..0f1f151 100644 --- a/test/textlint-rule-preset-ja-technical-writing-test.js +++ b/test/textlint-rule-preset-ja-technical-writing-test.js @@ -1,12 +1,10 @@ -// LICENSE : MIT -"use strict"; const assert = require("assert"); const rules = require("../lib/textlint-rule-preset-ja-technical-writing").rules; const rulesConfig = require("../lib/textlint-rule-preset-ja-technical-writing").rulesConfig; -describe("textlint-rule-preset-ja-technical-writing", function() { - it("not missing key", function() { - const ruleKeys = Object.keys(rules).sort(); - const ruleConfigKeys = Object.keys(rulesConfig).sort(); - assert.deepEqual(ruleKeys, ruleConfigKeys); - }); -}); \ No newline at end of file +describe("textlint-rule-preset-ja-technical-writing", () => { + it("not missing key", () => { + const ruleKeys = Object.keys(rules).sort(); + const ruleConfigKeys = Object.keys(rulesConfig).sort(); + assert.deepEqual(ruleKeys, ruleConfigKeys); + }); +});