From 2420d52db30b174ec35da664c75400b7774c2192 Mon Sep 17 00:00:00 2001 From: Prateekshit Jaiswal Date: Sat, 6 Sep 2025 21:26:31 +0530 Subject: [PATCH 1/4] Added spell checking functionality to pre-commit hooks and Makefile. --- .pre-commit-config.yaml | 15 + Makefile | 9 + cspell/Dockerfile | 24 + cspell/Makefile | 16 + cspell/cspell.json | 108 +++ cspell/custom-dict.txt | 33 + cspell/dictionaries/hindi/hi.txt | 24 + cspell/dictionaries/hindi/package.json | 22 + cspell/make.cmd | 38 + cspell/package-lock.json | 1204 ++++++++++++++++++++++++ cspell/package.json | 12 + make.cmd | 6 + 12 files changed, 1511 insertions(+) create mode 100644 cspell/Dockerfile create mode 100644 cspell/Makefile create mode 100644 cspell/cspell.json create mode 100644 cspell/custom-dict.txt create mode 100644 cspell/dictionaries/hindi/hi.txt create mode 100644 cspell/dictionaries/hindi/package.json create mode 100644 cspell/make.cmd create mode 100644 cspell/package-lock.json create mode 100644 cspell/package.json diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 47562ed5a8..f4d7aef872 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -65,6 +65,21 @@ repos: hooks: - id: tox-ini-fmt + - repo: local + hooks: + - id: cspell + name: cspell + entry: cspell --config ./cspell/cspell.json + files: \.(py|md|rst|txt|yml|yaml|po|ini|cfg|conf|env|toml|json|properties|xml)$ + language: node + additional_dependencies: ["cspell@8.19.4"] + exclude: ^(docs/_build|node_modules|\.venv|__pycache__|dist|build|\.mypy_cache|\.pytest_cache|\.egg-info|\.tox|snapshots)/$ + - id: sort-custom-dict + name: sort and uniquify custom-dict.txt + entry: bash -c 'LC_ALL=C grep "^#" cspell/custom-dict.txt > cspell/custom-dict.txt.tmp && LC_ALL=C grep -v "^#" cspell/custom-dict.txt | grep -v "^[[:space:]]*$" | LC_ALL=C sort -f --stable | LC_ALL=C uniq -i >> cspell/custom-dict.txt.tmp && mv cspell/custom-dict.txt.tmp cspell/custom-dict.txt' + files: ^cspell/custom-dict\.txt$ + language: system + - repo: local hooks: - id: tests diff --git a/Makefile b/Makefile index 73f526d103..65874f7a87 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +-include cspell/Makefile + +.PHONY: spellcheck + help: @echo "Usage: make " @echo " check run pre-commit and tests" @@ -7,6 +11,7 @@ help: @echo " package build package distribution" @echo " pre-commit run pre-commit against all files" @echo " setup setup development environment" + @echo " spellcheck run spell check on localization and documentation files" @echo " test run tests (in parallel)" @echo " tox run tox (in parallel)" @@ -14,8 +19,12 @@ check: make l10n make pre-commit make doc + make spellcheck make test +spellcheck: + $(MAKE) cspell-check + clean: @for ext in mo pot pyc; do \ find . -type f -name "*.$$ext" -delete; \ diff --git a/cspell/Dockerfile b/cspell/Dockerfile new file mode 100644 index 0000000000..c9881007d1 --- /dev/null +++ b/cspell/Dockerfile @@ -0,0 +1,24 @@ +FROM node:20-alpine + +# Set working directory for node modules installation +WORKDIR /app + +# Copy package.json and package-lock.json to install dependencies +COPY package.json package-lock.json ./ + +# Install cspell and dictionaries locally using npm ci with security flags +RUN npm ci --ignore-scripts --no-audit --no-fund && npm cache clean --force + +# Set working directory for the application +WORKDIR /holidays + +# Copy cspell configuration and custom dictionary +COPY cspell.json cspell/cspell.json +COPY custom-dict.txt cspell/custom-dict.txt + +# Use non-root user for security +USER node + +# Set entrypoint to local cspell binary +ENTRYPOINT ["/app/node_modules/.bin/cspell"] +CMD ["--help"] diff --git a/cspell/Makefile b/cspell/Makefile new file mode 100644 index 0000000000..15539893a7 --- /dev/null +++ b/cspell/Makefile @@ -0,0 +1,16 @@ +.PHONY: cspell-install cspell-check cspell-run + +cspell-install: + @DOCKER_BUILDKIT=1 docker build \ + $(if $(FORCE),--no-cache,) \ + -f cspell/Dockerfile \ + . \ + -t cspell + +cspell-check: CMD=--no-progress -r /holidays +cspell-check: cspell-install cspell-run + + @docker run \ + --mount type=bind,src="$(CURDIR)",dst=/holidays \ + --rm \ + cspell -c cspell/cspell.json $(CMD) diff --git a/cspell/cspell.json b/cspell/cspell.json new file mode 100644 index 0000000000..fdab1ea91d --- /dev/null +++ b/cspell/cspell.json @@ -0,0 +1,108 @@ +{ + "allowCompoundWords": false, + "caseSensitive": false, + "language": "en", + "minWordLength": 3, + "dictionaryDefinitions": [ + { + "addWords": true, + "name": "custom-dict", + "path": "custom-dict.txt" + }, + { + "name": "hi", + "path": "dictionaries/hindi/hi.txt" + } + ], + "dictionaries": [ + "ar", + "bg-bg", + "bn", + "ca", + "companies", + "cs-cz", + "da-dk", + "de-at", + "de-ch", + "de-de", + "el", + "en_us", + "en-au", + "en-ca", + "en-common-misspellings", + "en-gb", + "eo", + "es-es", + "et-ee", + "eu", + "fa-ir", + "fi-fi", + "fr-fr", + "gd", + "gl-es", + "grc", + "he", + "hi", + "hr-hr", + "hu-hu", + "hy", + "id-id", + "it-it", + "la", + "lt-lt", + "lv", + "makefile", + "markdown", + "mk", + "mn-mn", + "nb-no", + "nl-nl", + "pl-pl", + "pt-br", + "pt-pt", + "python", + "ro-ro", + "ru-ru", + "scientific-terms-gb", + "sk-sk", + "sl-si", + "sr-cyrl", + "sr-latn", + "sv", + "software-terms", + "tr-tr", + "uk-ua", + "vi-vn", + "custom-dict" + ], + "enabled": true, + "files": ["**/*"], + "ignorePaths": [ + "node_modules/**", + ".git/**", + ".venv/**", + "__pycache__/**", + "*.pyc", + "dist/**", + "build/**", + ".mypy_cache/**", + ".pytest_cache/**", + "docs/_build/**", + "snapshots/**", + "*.egg-info/**", + ".tox/**", + "requirements/*.txt", + "cspell/dictionaries/**" + ], + "ignoreRegExpList": [ + "#\\w+", + "<@\\w+>", + "\\b[A-Z]{2,}\\b", + "\\b[A-Z][a-z]+\\s+[A-Z][a-z]+\\b", + "\\b\\d+\\b", + "\\b[A-Za-z]+_[A-Za-z]+\\b", + "\\bhttps?:\\/\\/[^\\s]+\\b" + ], + + "useGitignore": true +} diff --git a/cspell/custom-dict.txt b/cspell/custom-dict.txt new file mode 100644 index 0000000000..b8fe632544 --- /dev/null +++ b/cspell/custom-dict.txt @@ -0,0 +1,33 @@ +# Project-specific terms +API +CD +CI +CLI +COA +CNR +DOI +GitHub +JSON +PyPI +Rica +TKL +TVL +Vacanza +YAML +coa +cnr +dateutil +datetime +holidays +holidaysum +ical +i18n +ics +l10n +pre-commit +pyc +pytz +subdiv +tkl +tvl +timezone diff --git a/cspell/dictionaries/hindi/hi.txt b/cspell/dictionaries/hindi/hi.txt new file mode 100644 index 0000000000..c65f834f34 --- /dev/null +++ b/cspell/dictionaries/hindi/hi.txt @@ -0,0 +1,24 @@ +गणतंत्र +दिवस +होली +राम +नवमी +महावीर +जयंती +गुड +फ्राइडे +बाबा +साहेब +अम्बेडकर +महाराष्ट्र +बकरी +स्वतंत्रता +गणेश +चतुर्थी +महात्मा +दशहरा +दिवाली +बलिप्रतिपदा +गुरु +नानक +क्रिसमस diff --git a/cspell/dictionaries/hindi/package.json b/cspell/dictionaries/hindi/package.json new file mode 100644 index 0000000000..2922f7e350 --- /dev/null +++ b/cspell/dictionaries/hindi/package.json @@ -0,0 +1,22 @@ +{ + "name": "@cspell/dict-hi", + "version": "1.0.0", + "description": "Hindi dictionary for cspell", + "main": "cspell-ext.json", + "files": [ + "hi.txt", + "cspell-ext.json" + ], + "scripts": { + "test": "cspell test hi.txt" + }, + "keywords": [ + "cspell", + "cspell-ext", + "dictionary", + "hindi", + "hi" + ], + "author": "Holidays Project", + "license": "MIT" +} diff --git a/cspell/make.cmd b/cspell/make.cmd new file mode 100644 index 0000000000..65ae6a640c --- /dev/null +++ b/cspell/make.cmd @@ -0,0 +1,38 @@ +@echo off +setlocal enabledelayedexpansion + +set TARGET=%1 + +if "%TARGET%"=="cspell-check" goto cspell-check +if "%TARGET%"=="cspell-install" goto cspell-install +if "%TARGET%"=="cspell-run" goto cspell-run + +echo Usage: make.cmd ^ +echo cspell-check run cspell check +echo cspell-install install cspell docker image +echo cspell-run run cspell (placeholder) +goto end + +:cspell-install +where docker-credential-desktop >nul 2>nul +if %errorlevel% neq 0 ( + echo ERROR: docker-credential-desktop not found in PATH. + echo Please add Docker's bin directory to your PATH. + echo Typically: set PATH=%%PATH%%;C:\Program Files\Docker\Docker\resources\bin + echo Or reinstall Docker Desktop to fix credential helper. + goto end +) +set "DOCKER_BUILDKIT=true" && docker build -f cspell/Dockerfile cspell -t cspell +goto end + +:cspell-run +rem Placeholder for cspell-run +goto end + +:cspell-check +call :cspell-install +call :cspell-run +docker run --mount type=bind,src="%CD%",dst=/holidays --rm cspell lint -c cspell/cspell.json --no-progress -r /holidays +goto end + +:end diff --git a/cspell/package-lock.json b/cspell/package-lock.json new file mode 100644 index 0000000000..da20b5a3a2 --- /dev/null +++ b/cspell/package-lock.json @@ -0,0 +1,1204 @@ +{ + "name": "cspell", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "cspell": "^8.19.4" + } + }, + "node_modules/@cspell/cspell-bundled-dicts": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.19.4.tgz", + "integrity": "sha512-2ZRcZP/ncJ5q953o8i+R0fb8+14PDt5UefUNMrFZZHvfTI0jukAASOQeLY+WT6ASZv6CgbPrApAdbppy9FaXYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-ada": "^4.1.0", + "@cspell/dict-al": "^1.1.0", + "@cspell/dict-aws": "^4.0.10", + "@cspell/dict-bash": "^4.2.0", + "@cspell/dict-companies": "^3.1.15", + "@cspell/dict-cpp": "^6.0.8", + "@cspell/dict-cryptocurrencies": "^5.0.4", + "@cspell/dict-csharp": "^4.0.6", + "@cspell/dict-css": "^4.0.17", + "@cspell/dict-dart": "^2.3.0", + "@cspell/dict-data-science": "^2.0.8", + "@cspell/dict-django": "^4.1.4", + "@cspell/dict-docker": "^1.1.13", + "@cspell/dict-dotnet": "^5.0.9", + "@cspell/dict-elixir": "^4.0.7", + "@cspell/dict-en_us": "^4.4.3", + "@cspell/dict-en-common-misspellings": "^2.0.10", + "@cspell/dict-en-gb": "1.1.33", + "@cspell/dict-filetypes": "^3.0.11", + "@cspell/dict-flutter": "^1.1.0", + "@cspell/dict-fonts": "^4.0.4", + "@cspell/dict-fsharp": "^1.1.0", + "@cspell/dict-fullstack": "^3.2.6", + "@cspell/dict-gaming-terms": "^1.1.1", + "@cspell/dict-git": "^3.0.4", + "@cspell/dict-golang": "^6.0.20", + "@cspell/dict-google": "^1.0.8", + "@cspell/dict-haskell": "^4.0.5", + "@cspell/dict-html": "^4.0.11", + "@cspell/dict-html-symbol-entities": "^4.0.3", + "@cspell/dict-java": "^5.0.11", + "@cspell/dict-julia": "^1.1.0", + "@cspell/dict-k8s": "^1.0.10", + "@cspell/dict-kotlin": "^1.1.0", + "@cspell/dict-latex": "^4.0.3", + "@cspell/dict-lorem-ipsum": "^4.0.4", + "@cspell/dict-lua": "^4.0.7", + "@cspell/dict-makefile": "^1.0.4", + "@cspell/dict-markdown": "^2.0.10", + "@cspell/dict-monkeyc": "^1.0.10", + "@cspell/dict-node": "^5.0.7", + "@cspell/dict-npm": "^5.2.1", + "@cspell/dict-php": "^4.0.14", + "@cspell/dict-powershell": "^5.0.14", + "@cspell/dict-public-licenses": "^2.0.13", + "@cspell/dict-python": "^4.2.17", + "@cspell/dict-r": "^2.1.0", + "@cspell/dict-ruby": "^5.0.8", + "@cspell/dict-rust": "^4.0.11", + "@cspell/dict-scala": "^5.0.7", + "@cspell/dict-shell": "^1.1.0", + "@cspell/dict-software-terms": "^5.0.5", + "@cspell/dict-sql": "^2.2.0", + "@cspell/dict-svelte": "^1.0.6", + "@cspell/dict-swift": "^2.0.5", + "@cspell/dict-terraform": "^1.1.1", + "@cspell/dict-typescript": "^3.2.1", + "@cspell/dict-vue": "^3.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-bundled-dicts/node_modules/@cspell/dict-software-terms": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.7.tgz", + "integrity": "sha512-CfNFQCVx8R/D8RfFdFTwSjDvXcSXY0tO+VN2N6TEbNTL1GCmqyzhwm4YI+ZbO3MUmMAMjwu9jZyoLk5BaJkXcg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/cspell-json-reporter": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.19.4.tgz", + "integrity": "sha512-pOlUtLUmuDdTIOhDTvWxxta0Wm8RCD/p1V0qUqeP6/Ups1ajBI4FWEpRFd7yMBTUHeGeSNicJX5XeX7wNbAbLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-types": "8.19.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-pipe": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.19.4.tgz", + "integrity": "sha512-GNAyk+7ZLEcL2fCMT5KKZprcdsq3L1eYy3e38/tIeXfbZS7Sd1R5FXUe6CHXphVWTItV39TvtLiDwN/2jBts9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-resolver": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.19.4.tgz", + "integrity": "sha512-S8vJMYlsx0S1D60glX8H2Jbj4mD8519VjyY8lu3fnhjxfsl2bDFZvF3ZHKsLEhBE+Wh87uLqJDUJQiYmevHjDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-service-bus": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.19.4.tgz", + "integrity": "sha512-uhY+v8z5JiUogizXW2Ft/gQf3eWrh5P9036jN2Dm0UiwEopG/PLshHcDjRDUiPdlihvA0RovrF0wDh4ptcrjuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/cspell-types": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.19.4.tgz", + "integrity": "sha512-ekMWuNlFiVGfsKhfj4nmc8JCA+1ZltwJgxiKgDuwYtR09ie340RfXFF6YRd2VTW5zN7l4F1PfaAaPklVz6utSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/dict-ada": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz", + "integrity": "sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-al": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz", + "integrity": "sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-aws": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.15.tgz", + "integrity": "sha512-aPY7VVR5Os4rz36EaqXBAEy14wR4Rqv+leCJ2Ug/Gd0IglJpM30LalF3e2eJChnjje3vWoEC0Rz3+e5gpZG+Kg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-bash": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.1.tgz", + "integrity": "sha512-SBnzfAyEAZLI9KFS7DUG6Xc1vDFuLllY3jz0WHvmxe8/4xV3ufFE3fGxalTikc1VVeZgZmxYiABw4iGxVldYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-shell": "1.1.1" + } + }, + "node_modules/@cspell/dict-companies": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.5.tgz", + "integrity": "sha512-H51R0w7c6RwJJPqH7Gs65tzP6ouZsYDEHmmol6MIIk0kQaOIBuFP2B3vIxHLUr2EPRVFZsMW8Ni7NmVyaQlwsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-cpp": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.12.tgz", + "integrity": "sha512-N4NsCTttVpMqQEYbf0VQwCj6np+pJESov0WieCN7R/0aByz4+MXEiDieWWisaiVi8LbKzs1mEj4ZTw5K/6O2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-cryptocurrencies": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz", + "integrity": "sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-csharp": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.7.tgz", + "integrity": "sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-css": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", + "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-dart": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.1.tgz", + "integrity": "sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-data-science": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.9.tgz", + "integrity": "sha512-wTOFMlxv06veIwKdXUwdGxrQcK44Zqs426m6JGgHIB/GqvieZQC5n0UI+tUm5OCxuNyo4OV6mylT4cRMjtKtWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-django": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.5.tgz", + "integrity": "sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-docker": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.16.tgz", + "integrity": "sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-dotnet": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.10.tgz", + "integrity": "sha512-ooar8BP/RBNP1gzYfJPStKEmpWy4uv/7JCq6FOnJLeD1yyfG3d/LFMVMwiJo+XWz025cxtkM3wuaikBWzCqkmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-elixir": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz", + "integrity": "sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-en_us": { + "version": "4.4.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.18.tgz", + "integrity": "sha512-6Le961Q0AIfVp3nKuSJJD/9NfnTYA1N/MLAaeWKCABEvhzhopeyGrykwejd0SA4m64WBUNEfSlsgselYWoDSjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-en-common-misspellings": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.5.tgz", + "integrity": "sha512-hlRDSjul7wGTDXeLBADoyTGIZjWWZn6/SP+pt0lG3PRtqF0MWH/QEDgUkS+Yev7ZhHCHVLvwBZtDxOd1uw06Tw==", + "dev": true, + "license": "CC BY-SA 4.0" + }, + "node_modules/@cspell/dict-en-gb": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", + "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-filetypes": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.13.tgz", + "integrity": "sha512-g6rnytIpQlMNKGJT1JKzWkC+b3xCliDKpQ3ANFSq++MnR4GaLiifaC4JkVON11Oh/UTplYOR1nY3BR4X30bswA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-flutter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz", + "integrity": "sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fonts": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.5.tgz", + "integrity": "sha512-BbpkX10DUX/xzHs6lb7yzDf/LPjwYIBJHJlUXSBXDtK/1HaeS+Wqol4Mlm2+NAgZ7ikIE5DQMViTgBUY3ezNoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fsharp": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz", + "integrity": "sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fullstack": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.7.tgz", + "integrity": "sha512-IxEk2YAwAJKYCUEgEeOg3QvTL4XLlyArJElFuMQevU1dPgHgzWElFevN5lsTFnvMFA1riYsVinqJJX0BanCFEg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-gaming-terms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz", + "integrity": "sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-git": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.7.tgz", + "integrity": "sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-golang": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.23.tgz", + "integrity": "sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-google": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz", + "integrity": "sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-haskell": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz", + "integrity": "sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-html": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", + "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-html-symbol-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", + "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-java": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz", + "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-julia": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz", + "integrity": "sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-k8s": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", + "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-kotlin": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz", + "integrity": "sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-latex": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.4.tgz", + "integrity": "sha512-YdTQhnTINEEm/LZgTzr9Voz4mzdOXH7YX+bSFs3hnkUHCUUtX/mhKgf1CFvZ0YNM2afjhQcmLaR9bDQVyYBvpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-lorem-ipsum": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz", + "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-lua": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz", + "integrity": "sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-makefile": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz", + "integrity": "sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-markdown": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.12.tgz", + "integrity": "sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@cspell/dict-css": "^4.0.18", + "@cspell/dict-html": "^4.0.12", + "@cspell/dict-html-symbol-entities": "^4.0.4", + "@cspell/dict-typescript": "^3.2.3" + } + }, + "node_modules/@cspell/dict-monkeyc": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.11.tgz", + "integrity": "sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-node": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.8.tgz", + "integrity": "sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-npm": { + "version": "5.2.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.15.tgz", + "integrity": "sha512-kb9oX/N5FUlJYoqc5G+tIP/0SolteFMz2VhOVKG2qiXUS/1AybVTjUEo4gZ4uEveUhLzUDcfpZbn40EoUVBVrg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-php": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.15.tgz", + "integrity": "sha512-iepGB2gtToMWSTvybesn4/lUp4LwXcEm0s8vasJLP76WWVkq1zYjmeS+WAIzNgsuURyZ/9mGqhS0CWMuo74ODw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-powershell": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz", + "integrity": "sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-public-licenses": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.15.tgz", + "integrity": "sha512-cJEOs901H13Pfy0fl4dCD1U+xpWIMaEPq8MeYU83FfDZvellAuSo4GqWCripfIqlhns/L6+UZEIJSOZnjgy7Wg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-python": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.19.tgz", + "integrity": "sha512-9S2gTlgILp1eb6OJcVZeC8/Od83N8EqBSg5WHVpx97eMMJhifOzePkE0kDYjyHMtAFznCQTUu0iQEJohNQ5B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/dict-data-science": "^2.0.9" + } + }, + "node_modules/@cspell/dict-r": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz", + "integrity": "sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-ruby": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.9.tgz", + "integrity": "sha512-H2vMcERMcANvQshAdrVx0XoWaNX8zmmiQN11dZZTQAZaNJ0xatdJoSqY8C8uhEMW89bfgpN+NQgGuDXW2vmXEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-rust": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.12.tgz", + "integrity": "sha512-z2QiH+q9UlNhobBJArvILRxV8Jz0pKIK7gqu4TgmEYyjiu1TvnGZ1tbYHeu9w3I/wOP6UMDoCBTty5AlYfW0mw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-scala": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.8.tgz", + "integrity": "sha512-YdftVmumv8IZq9zu1gn2U7A4bfM2yj9Vaupydotyjuc+EEZZSqAafTpvW/jKLWji2TgybM1L2IhmV0s/Iv9BTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-shell": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.1.tgz", + "integrity": "sha512-T37oYxE7OV1x/1D4/13Y8JZGa1QgDCXV7AVt3HLXjn0Fe3TaNDvf5sU0fGnXKmBPqFFrHdpD3uutAQb1dlp15g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-sql": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz", + "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-svelte": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz", + "integrity": "sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-swift": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz", + "integrity": "sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-terraform": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", + "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-typescript": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", + "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-vue": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz", + "integrity": "sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dynamic-import": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.19.4.tgz", + "integrity": "sha512-0LLghC64+SiwQS20Sa0VfFUBPVia1rNyo0bYeIDoB34AA3qwguDBVJJkthkpmaP1R2JeR/VmxmJowuARc4ZUxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/url": "8.19.4", + "import-meta-resolve": "^4.1.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@cspell/filetypes": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.19.4.tgz", + "integrity": "sha512-D9hOCMyfKtKjjqQJB8F80PWsjCZhVGCGUMiDoQpcta0e+Zl8vHgzwaC0Ai4QUGBhwYEawHGiWUd7Y05u/WXiNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/strong-weak-map": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.19.4.tgz", + "integrity": "sha512-MUfFaYD8YqVe32SQaYLI24/bNzaoyhdBIFY5pVrvMo1ZCvMl8AlfI2OcBXvcGb5aS5z7sCNCJm11UuoYbLI1zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@cspell/url": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.19.4.tgz", + "integrity": "sha512-Pa474iBxS+lxsAL4XkETPGIq3EgMLCEb9agj3hAd2VGMTCApaiUvamR4b+uGXIPybN70piFxvzrfoxsG2uIP6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", + "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/chalk-template": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", + "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/chalk/chalk-template?sponsor=1" + } + }, + "node_modules/clear-module": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", + "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^2.0.0", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/comment-json": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cspell": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", + "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-json-reporter": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/url": "8.19.4", + "chalk": "^5.4.1", + "chalk-template": "^1.1.0", + "commander": "^13.1.0", + "cspell-dictionary": "8.19.4", + "cspell-gitignore": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4", + "cspell-lib": "8.19.4", + "fast-json-stable-stringify": "^2.1.0", + "file-entry-cache": "^9.1.0", + "semver": "^7.7.1", + "tinyglobby": "^0.2.13" + }, + "bin": { + "cspell": "bin.mjs", + "cspell-esm": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/streetsidesoftware/cspell?sponsor=1" + } + }, + "node_modules/cspell-config-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", + "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-types": "8.19.4", + "comment-json": "^4.2.5", + "yaml": "^2.7.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-dictionary": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", + "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "cspell-trie-lib": "8.19.4", + "fast-equals": "^5.2.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-gitignore": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", + "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/url": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-io": "8.19.4" + }, + "bin": { + "cspell-gitignore": "bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-glob": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", + "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/url": "8.19.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-grammar": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", + "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4" + }, + "bin": { + "cspell-grammar": "bin.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-io": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", + "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-service-bus": "8.19.4", + "@cspell/url": "8.19.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", + "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-bundled-dicts": "8.19.4", + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-resolver": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "@cspell/dynamic-import": "8.19.4", + "@cspell/filetypes": "8.19.4", + "@cspell/strong-weak-map": "8.19.4", + "@cspell/url": "8.19.4", + "clear-module": "^4.1.2", + "comment-json": "^4.2.5", + "cspell-config-lib": "8.19.4", + "cspell-dictionary": "8.19.4", + "cspell-glob": "8.19.4", + "cspell-grammar": "8.19.4", + "cspell-io": "8.19.4", + "cspell-trie-lib": "8.19.4", + "env-paths": "^3.0.0", + "fast-equals": "^5.2.2", + "gensequence": "^7.0.0", + "import-fresh": "^3.3.1", + "resolve-from": "^5.0.0", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cspell-trie-lib": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", + "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-pipe": "8.19.4", + "@cspell/cspell-types": "8.19.4", + "gensequence": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/gensequence": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", + "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "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/has-own-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/parent-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", + "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "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/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + } + } +} diff --git a/cspell/package.json b/cspell/package.json new file mode 100644 index 0000000000..19a223ded9 --- /dev/null +++ b/cspell/package.json @@ -0,0 +1,12 @@ +{ + "name": "cspell-check", + "version": "1.0.0", + "description": "Spell checking for holidays project", + "main": "index.js", + "scripts": { + "spellcheck": "cspell" + }, + "dependencies": { + "cspell": "^8.0.0" + } +} diff --git a/make.cmd b/make.cmd index b00ab49062..99a1ead065 100644 --- a/make.cmd +++ b/make.cmd @@ -14,9 +14,14 @@ GoTo :Help Call :L10n Call :Pre-commit Call :Doc + Call :Spellcheck Call :Test Exit /B +:Spellcheck + call cspell\make.cmd cspell-check + Exit /B %ERRORLEVEL% + :Clean Del /S /Q *.mo Del /S /Q *.pyc @@ -32,6 +37,7 @@ GoTo :Help :Help Echo Usage: make ^ Echo check run pre-commit and tests + Echo spellcheck run spell check on localization and documentation files Echo doc run documentation build process Echo help show summary of available commands Echo l10n update .pot and .po files From 0a98658c6e3abc064e9ebc858b5c8a438988791f Mon Sep 17 00:00:00 2001 From: Prateekshit Jaiswal Date: Fri, 12 Sep 2025 09:52:27 +0530 Subject: [PATCH 2/4] Update cspell dependencies and configuration. --- .pre-commit-config.yaml | 19 +- Makefile | 8 +- cspell/Makefile | 12 +- cspell/cspell.json | 12 +- cspell/custom-dict.txt | 34 +- cspell/dictionaries/hindi/hi.txt | 24 -- cspell/dictionaries/hindi/package.json | 22 -- cspell/make.cmd | 26 +- cspell/package-lock.json | 489 ++++++++++++++++++------- cspell/package.json | 57 ++- make.cmd | 7 +- tools/sort_cspell_dict.py | 35 ++ 12 files changed, 497 insertions(+), 248 deletions(-) delete mode 100644 cspell/dictionaries/hindi/hi.txt delete mode 100644 cspell/dictionaries/hindi/package.json create mode 100644 tools/sort_cspell_dict.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f4d7aef872..3ef3776ab0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,7 +20,7 @@ repos: - repo: https://github.com/asottile/pyupgrade rev: v3.20.0 hooks: - - id: pyupgrade + - id: pyupgrade args: - --py39-plus @@ -61,25 +61,10 @@ repos: - id: pyproject-fmt - repo: https://github.com/tox-dev/tox-ini-fmt - rev: '1.6.0' + rev: "1.6.0" hooks: - id: tox-ini-fmt - - repo: local - hooks: - - id: cspell - name: cspell - entry: cspell --config ./cspell/cspell.json - files: \.(py|md|rst|txt|yml|yaml|po|ini|cfg|conf|env|toml|json|properties|xml)$ - language: node - additional_dependencies: ["cspell@8.19.4"] - exclude: ^(docs/_build|node_modules|\.venv|__pycache__|dist|build|\.mypy_cache|\.pytest_cache|\.egg-info|\.tox|snapshots)/$ - - id: sort-custom-dict - name: sort and uniquify custom-dict.txt - entry: bash -c 'LC_ALL=C grep "^#" cspell/custom-dict.txt > cspell/custom-dict.txt.tmp && LC_ALL=C grep -v "^#" cspell/custom-dict.txt | grep -v "^[[:space:]]*$" | LC_ALL=C sort -f --stable | LC_ALL=C uniq -i >> cspell/custom-dict.txt.tmp && mv cspell/custom-dict.txt.tmp cspell/custom-dict.txt' - files: ^cspell/custom-dict\.txt$ - language: system - - repo: local hooks: - id: tests diff --git a/Makefile b/Makefile index 65874f7a87..37f42388c7 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ help: @echo " package build package distribution" @echo " pre-commit run pre-commit against all files" @echo " setup setup development environment" - @echo " spellcheck run spell check on localization and documentation files" + @echo " spellcheck run spell check across the repository (code, docs, l10n)" @echo " test run tests (in parallel)" @echo " tox run tox (in parallel)" @@ -22,7 +22,11 @@ check: make spellcheck make test -spellcheck: +sort-custom-dict: + python tools/sort_cspell_dict.py + +spellcheck: sort-custom-dict + @command -v docker >/dev/null 2>&1 || { echo "ERROR: docker not found. Install Docker or skip spellcheck."; exit 127; } $(MAKE) cspell-check clean: diff --git a/cspell/Makefile b/cspell/Makefile index 15539893a7..b52736a863 100644 --- a/cspell/Makefile +++ b/cspell/Makefile @@ -1,16 +1,20 @@ -.PHONY: cspell-install cspell-check cspell-run +.PHONY: cspell-install cspell-check cspell-run sort-custom-dict cspell-install: + @which docker > /dev/null 2>&1 || (echo "ERROR: docker not found in PATH. Install Docker."; exit 1) @DOCKER_BUILDKIT=1 docker build \ $(if $(FORCE),--no-cache,) \ -f cspell/Dockerfile \ - . \ + cspell \ -t cspell cspell-check: CMD=--no-progress -r /holidays cspell-check: cspell-install cspell-run @docker run \ - --mount type=bind,src="$(CURDIR)",dst=/holidays \ + --mount type=bind,src="$(CURDIR)",dst=/holidays,readonly \ --rm \ - cspell -c cspell/cspell.json $(CMD) + cspell lint -c cspell/cspell.json $(CMD) + +sort-custom-dict: + @python tools/sort_cspell_dict.py diff --git a/cspell/cspell.json b/cspell/cspell.json index fdab1ea91d..b9fd9c7009 100644 --- a/cspell/cspell.json +++ b/cspell/cspell.json @@ -8,10 +8,6 @@ "addWords": true, "name": "custom-dict", "path": "custom-dict.txt" - }, - { - "name": "hi", - "path": "dictionaries/hindi/hi.txt" } ], "dictionaries": [ @@ -42,7 +38,6 @@ "gl-es", "grc", "he", - "hi", "hr-hr", "hu-hu", "hy", @@ -76,7 +71,12 @@ "custom-dict" ], "enabled": true, - "files": ["**/*"], + "files": [ + "docs/**/*", + "README.md", + "scripts/l10n/**/*", + "mkdocs.yml" + ], "ignorePaths": [ "node_modules/**", ".git/**", diff --git a/cspell/custom-dict.txt b/cspell/custom-dict.txt index b8fe632544..5030dd834c 100644 --- a/cspell/custom-dict.txt +++ b/cspell/custom-dict.txt @@ -1,33 +1 @@ -# Project-specific terms -API -CD -CI -CLI -COA -CNR -DOI -GitHub -JSON -PyPI -Rica -TKL -TVL -Vacanza -YAML -coa -cnr -dateutil -datetime -holidays -holidaysum -ical -i18n -ics -l10n -pre-commit -pyc -pytz -subdiv -tkl -tvl -timezone +# Project-specific terms\n diff --git a/cspell/dictionaries/hindi/hi.txt b/cspell/dictionaries/hindi/hi.txt deleted file mode 100644 index c65f834f34..0000000000 --- a/cspell/dictionaries/hindi/hi.txt +++ /dev/null @@ -1,24 +0,0 @@ -गणतंत्र -दिवस -होली -राम -नवमी -महावीर -जयंती -गुड -फ्राइडे -बाबा -साहेब -अम्बेडकर -महाराष्ट्र -बकरी -स्वतंत्रता -गणेश -चतुर्थी -महात्मा -दशहरा -दिवाली -बलिप्रतिपदा -गुरु -नानक -क्रिसमस diff --git a/cspell/dictionaries/hindi/package.json b/cspell/dictionaries/hindi/package.json deleted file mode 100644 index 2922f7e350..0000000000 --- a/cspell/dictionaries/hindi/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@cspell/dict-hi", - "version": "1.0.0", - "description": "Hindi dictionary for cspell", - "main": "cspell-ext.json", - "files": [ - "hi.txt", - "cspell-ext.json" - ], - "scripts": { - "test": "cspell test hi.txt" - }, - "keywords": [ - "cspell", - "cspell-ext", - "dictionary", - "hindi", - "hi" - ], - "author": "Holidays Project", - "license": "MIT" -} diff --git a/cspell/make.cmd b/cspell/make.cmd index 65ae6a640c..1dd82affff 100644 --- a/cspell/make.cmd +++ b/cspell/make.cmd @@ -6,33 +6,39 @@ set TARGET=%1 if "%TARGET%"=="cspell-check" goto cspell-check if "%TARGET%"=="cspell-install" goto cspell-install if "%TARGET%"=="cspell-run" goto cspell-run +if "%TARGET%"=="sort-custom-dict" goto sort-custom-dict echo Usage: make.cmd ^ -echo cspell-check run cspell check -echo cspell-install install cspell docker image -echo cspell-run run cspell (placeholder) +echo cspell-check run cspell check +echo cspell-install install cspell docker image +echo cspell-run run cspell (placeholder) +echo sort-custom-dict sort and uniquify custom-dict.txt goto end :cspell-install -where docker-credential-desktop >nul 2>nul +where docker >nul 2>nul if %errorlevel% neq 0 ( - echo ERROR: docker-credential-desktop not found in PATH. - echo Please add Docker's bin directory to your PATH. - echo Typically: set PATH=%%PATH%%;C:\Program Files\Docker\Docker\resources\bin - echo Or reinstall Docker Desktop to fix credential helper. + echo ERROR: docker not found in PATH. Install Docker Desktop or add docker.exe to PATH. goto end ) -set "DOCKER_BUILDKIT=true" && docker build -f cspell/Dockerfile cspell -t cspell +set "build_args=" +if defined FORCE set "build_args=--no-cache" +set "DOCKER_BUILDKIT=true" && docker build %build_args% -f cspell/Dockerfile -t cspell cspell goto end :cspell-run rem Placeholder for cspell-run goto end +:sort-custom-dict +python tools/sort_cspell_dict.py +goto end + :cspell-check +set CMD=--no-progress -r /holidays call :cspell-install call :cspell-run -docker run --mount type=bind,src="%CD%",dst=/holidays --rm cspell lint -c cspell/cspell.json --no-progress -r /holidays +docker run --mount type=bind,src="%CD%",dst=/holidays,readonly --rm cspell lint -c cspell/cspell.json %CMD% goto end :end diff --git a/cspell/package-lock.json b/cspell/package-lock.json index da20b5a3a2..ab8814c1dc 100644 --- a/cspell/package-lock.json +++ b/cspell/package-lock.json @@ -1,10 +1,68 @@ { - "name": "cspell", + "name": "cspell-check", + "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "devDependencies": { + "name": "cspell-check", + "version": "1.0.0", + "dependencies": { + "@cspell/dict-ar": "^1.1.6", + "@cspell/dict-bg-bg": "^3.0.8", + "@cspell/dict-bn": "^1.0.3", + "@cspell/dict-ca": "^3.1.2", + "@cspell/dict-companies": "^3.2.5", + "@cspell/dict-cs-cz": "^3.0.8", + "@cspell/dict-da-dk": "^4.1.2", + "@cspell/dict-de-at": "^1.2.2", + "@cspell/dict-de-ch": "^1.3.2", + "@cspell/dict-de-de": "^4.1.2", + "@cspell/dict-el": "^3.1.8", + "@cspell/dict-en_us": "^4.4.19", + "@cspell/dict-en-au": "^1.1.7", + "@cspell/dict-en-ca": "^1.0.45", + "@cspell/dict-en-common-misspellings": "^2.1.6", + "@cspell/dict-en-gb": "^5.0.14", + "@cspell/dict-eo": "^3.0.7", + "@cspell/dict-es-es": "^3.0.8", + "@cspell/dict-et-ee": "^3.1.6", + "@cspell/dict-eu": "^1.0.6", + "@cspell/dict-fa-ir": "^4.0.5", + "@cspell/dict-fi-fi": "^1.1.3", + "@cspell/dict-fr-fr": "^2.3.2", + "@cspell/dict-gd": "^1.0.3", + "@cspell/dict-gl-es": "^1.1.3", + "@cspell/dict-grc": "^1.0.7", + "@cspell/dict-he": "^4.0.5", + "@cspell/dict-hr-hr": "^3.1.2", + "@cspell/dict-hu-hu": "^1.1.2", + "@cspell/dict-hy": "^1.0.3", + "@cspell/dict-id-id": "^1.0.7", + "@cspell/dict-it-it": "^3.1.6", + "@cspell/dict-la": "^1.1.2", + "@cspell/dict-lt-lt": "^4.0.6", + "@cspell/dict-lv": "^1.1.6", + "@cspell/dict-makefile": "^1.0.5", + "@cspell/dict-markdown": "^2.0.12", + "@cspell/dict-mk": "^1.0.3", + "@cspell/dict-mn-mn": "^1.2.2", + "@cspell/dict-nb-no": "^2.0.6", + "@cspell/dict-nl-nl": "^2.4.2", + "@cspell/dict-pt-br": "^2.4.2", + "@cspell/dict-pt-pt": "^3.0.6", + "@cspell/dict-python": "^4.2.19", + "@cspell/dict-ro-ro": "^2.0.6", + "@cspell/dict-scientific-terms-gb": "^1.0.6", + "@cspell/dict-sk-sk": "^1.1.7", + "@cspell/dict-sl-si": "^1.0.11", + "@cspell/dict-software-terms": "^5.1.8", + "@cspell/dict-sr-cyrl": "^1.1.6", + "@cspell/dict-sr-latn": "^1.0.8", + "@cspell/dict-sv": "^2.3.2", + "@cspell/dict-tr-tr": "^3.0.6", + "@cspell/dict-uk-ua": "^4.0.6", + "@cspell/dict-vi-vn": "^3.0.6", "cspell": "^8.19.4" } }, @@ -12,7 +70,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.19.4.tgz", "integrity": "sha512-2ZRcZP/ncJ5q953o8i+R0fb8+14PDt5UefUNMrFZZHvfTI0jukAASOQeLY+WT6ASZv6CgbPrApAdbppy9FaXYQ==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-ada": "^4.1.0", @@ -78,18 +135,16 @@ "node": ">=18" } }, - "node_modules/@cspell/cspell-bundled-dicts/node_modules/@cspell/dict-software-terms": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.7.tgz", - "integrity": "sha512-CfNFQCVx8R/D8RfFdFTwSjDvXcSXY0tO+VN2N6TEbNTL1GCmqyzhwm4YI+ZbO3MUmMAMjwu9jZyoLk5BaJkXcg==", - "dev": true, + "node_modules/@cspell/cspell-bundled-dicts/node_modules/@cspell/dict-en-gb": { + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", + "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", "license": "MIT" }, "node_modules/@cspell/cspell-json-reporter": { "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.19.4.tgz", "integrity": "sha512-pOlUtLUmuDdTIOhDTvWxxta0Wm8RCD/p1V0qUqeP6/Ups1ajBI4FWEpRFd7yMBTUHeGeSNicJX5XeX7wNbAbLQ==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-types": "8.19.4" @@ -102,7 +157,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.19.4.tgz", "integrity": "sha512-GNAyk+7ZLEcL2fCMT5KKZprcdsq3L1eYy3e38/tIeXfbZS7Sd1R5FXUe6CHXphVWTItV39TvtLiDwN/2jBts9A==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -112,7 +166,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.19.4.tgz", "integrity": "sha512-S8vJMYlsx0S1D60glX8H2Jbj4mD8519VjyY8lu3fnhjxfsl2bDFZvF3ZHKsLEhBE+Wh87uLqJDUJQiYmevHjDg==", - "dev": true, "license": "MIT", "dependencies": { "global-directory": "^4.0.1" @@ -125,7 +178,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.19.4.tgz", "integrity": "sha512-uhY+v8z5JiUogizXW2Ft/gQf3eWrh5P9036jN2Dm0UiwEopG/PLshHcDjRDUiPdlihvA0RovrF0wDh4ptcrjuQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -135,7 +187,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.19.4.tgz", "integrity": "sha512-ekMWuNlFiVGfsKhfj4nmc8JCA+1ZltwJgxiKgDuwYtR09ie340RfXFF6YRd2VTW5zN7l4F1PfaAaPklVz6utSg==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -145,276 +196,423 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.1.tgz", "integrity": "sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-al": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.1.tgz", "integrity": "sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-ar": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-ar/-/dict-ar-1.1.6.tgz", + "integrity": "sha512-glrr8q+bg5VRT3+BRZa7NRbz0hJ2NWvnACcT4VT0zjgBO9b5KdjWZ5pN1X5Ewtr1ZbpU0/yGivJVJSTuPcc84Q==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-aws": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.15.tgz", "integrity": "sha512-aPY7VVR5Os4rz36EaqXBAEy14wR4Rqv+leCJ2Ug/Gd0IglJpM30LalF3e2eJChnjje3vWoEC0Rz3+e5gpZG+Kg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-bash": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.1.tgz", "integrity": "sha512-SBnzfAyEAZLI9KFS7DUG6Xc1vDFuLllY3jz0WHvmxe8/4xV3ufFE3fGxalTikc1VVeZgZmxYiABw4iGxVldYEg==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-shell": "1.1.1" } }, + "node_modules/@cspell/dict-bg-bg": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-bg-bg/-/dict-bg-bg-3.0.8.tgz", + "integrity": "sha512-aC85dD3z4BwIqC0OvfL8lSHpUK2y+oSjNGb44OLtNr6shJQQA2R4OoWdKv8+/QXSdIl2gDyAsicouBzBbk2GLA==", + "license": "MIT" + }, + "node_modules/@cspell/dict-bn": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-bn/-/dict-bn-1.0.3.tgz", + "integrity": "sha512-vry+CC/LKjLHJ85B0T3CZ4dol8/7mcSK5NNC4RnLJ9ZH8BjbrTRTykITP5os2QLW+8c2N1nrBxRIKbWKRegXNw==", + "license": "GPL-3.0" + }, + "node_modules/@cspell/dict-ca": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-ca/-/dict-ca-3.1.2.tgz", + "integrity": "sha512-Oy7z78KFjM3U5IoxX8eD6FAiMzDt+3NybNVwQvRDpkn4FfFhGhp0IsBWaeHlQdnm9+yzJU+bwQY95+4JOrlJOw==", + "license": "MIT" + }, "node_modules/@cspell/dict-companies": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.5.tgz", "integrity": "sha512-H51R0w7c6RwJJPqH7Gs65tzP6ouZsYDEHmmol6MIIk0kQaOIBuFP2B3vIxHLUr2EPRVFZsMW8Ni7NmVyaQlwsg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cpp": { "version": "6.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.12.tgz", "integrity": "sha512-N4NsCTttVpMqQEYbf0VQwCj6np+pJESov0WieCN7R/0aByz4+MXEiDieWWisaiVi8LbKzs1mEj4ZTw5K/6O2UQ==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cryptocurrencies": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.5.tgz", "integrity": "sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-cs-cz": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-cs-cz/-/dict-cs-cz-3.0.8.tgz", + "integrity": "sha512-h2hgHvhXJ7a2Pzf8ac0gR98+3kmbdicKPRnUcQN8uMPaBsgz94lIuWIwUI7pG8gJ/n2tbOStH/d1Ur0q9i9gmg==", + "license": "GPL-3.0+" + }, "node_modules/@cspell/dict-csharp": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.7.tgz", "integrity": "sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-css": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-da-dk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-da-dk/-/dict-da-dk-4.1.2.tgz", + "integrity": "sha512-2y+hZzdQHp7pPLpOJEQzIURCtl8mTiTC/plcrs8VZjYJt4xptRxokAnxFNqeUe7iiG3SAMUjSDOTwHgRCpyNzQ==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.1.tgz", "integrity": "sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-data-science": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.9.tgz", "integrity": "sha512-wTOFMlxv06veIwKdXUwdGxrQcK44Zqs426m6JGgHIB/GqvieZQC5n0UI+tUm5OCxuNyo4OV6mylT4cRMjtKtWQ==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-de-at": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-de-at/-/dict-de-at-1.2.2.tgz", + "integrity": "sha512-idN6CKmDMJoezqCxd3FX3noJZUwUFn6ltAXYafBVrFMEnVKZyzIsWwFeWXh2Sw0mBvIqFdfASEz5UAdblncNdQ==", + "license": "GPL-3.0-or-later" + }, + "node_modules/@cspell/dict-de-ch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-de-ch/-/dict-de-ch-1.3.2.tgz", + "integrity": "sha512-012I5YxvdpVnOrTH01mo6QVV66K7pICqMAG690KBJj3ba9zU1xTyfe4C96frIDu/T+Z1ueXgp9WaonsH6LejNg==", + "license": "GPL-3.0-or-later" + }, + "node_modules/@cspell/dict-de-de": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-de-de/-/dict-de-de-4.1.2.tgz", + "integrity": "sha512-pRb5bIQc2pJU6bVEsSfhMkB+XXJauaXg3KS+KjO38HBHAe2vg611keKYSkry90Rbn2KVMOLAVjN0hN/qiy5X0A==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-django": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.5.tgz", "integrity": "sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-docker": { "version": "1.1.16", "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.16.tgz", "integrity": "sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dotnet": { "version": "5.0.10", "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.10.tgz", "integrity": "sha512-ooar8BP/RBNP1gzYfJPStKEmpWy4uv/7JCq6FOnJLeD1yyfG3d/LFMVMwiJo+XWz025cxtkM3wuaikBWzCqkmg==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-el": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-el/-/dict-el-3.1.8.tgz", + "integrity": "sha512-Ct4x9JYE2JXuivtnYabVQ59U4ICtZ/BJdssMv/3hPBvgjBrTHR/c/7ywVz0QI097hwSEg5N5mgU1+epHS8nTww==", + "license": "GPL-3.0+" + }, "node_modules/@cspell/dict-elixir": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.8.tgz", "integrity": "sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.18.tgz", - "integrity": "sha512-6Le961Q0AIfVp3nKuSJJD/9NfnTYA1N/MLAaeWKCABEvhzhopeyGrykwejd0SA4m64WBUNEfSlsgselYWoDSjQ==", - "dev": true, + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.19.tgz", + "integrity": "sha512-JYYgzhGqSGuIMNY1cTlmq3zrNpehrExMHqLmLnSM2jEGFeHydlL+KLBwBYxMy4e73w+p1+o/rmAiGsMj9g3MCw==", "license": "MIT" }, + "node_modules/@cspell/dict-en-au": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-au/-/dict-en-au-1.1.7.tgz", + "integrity": "sha512-ejgcdYYCYn/9sRCpye9fRf45d/AstJmgTHn4HgZ2N5vrf/Xjsujozme6AGHm17HbeL4iv1nJMQliIz8yE2Y64g==", + "license": "LGPL-3.0" + }, + "node_modules/@cspell/dict-en-ca": { + "version": "1.0.45", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-ca/-/dict-en-ca-1.0.45.tgz", + "integrity": "sha512-aRt6AwLYwUtsqk4phQAmGGffrL90PuYXoGoLpub14zBGYy0ujefmDkBV7r2tK3aXPgsUpYXUq9EygRtTvI2z0w==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.5.tgz", - "integrity": "sha512-hlRDSjul7wGTDXeLBADoyTGIZjWWZn6/SP+pt0lG3PRtqF0MWH/QEDgUkS+Yev7ZhHCHVLvwBZtDxOd1uw06Tw==", - "dev": true, + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.6.tgz", + "integrity": "sha512-xV9yryOqZizbSqxRS7kSVRrxVEyWHUqwdY56IuT7eAWGyTCJNmitXzXa4p+AnEbhL+AB2WLynGVSbNoUC3ceFA==", "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz", - "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==", - "dev": true, + "version": "5.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-5.0.14.tgz", + "integrity": "sha512-pVnhLPiise1mfe5J+Qk/1+bZgtwR+N8um+YRQL9N9Gpev3cnXexlFN3yJumWCibZU9cwq7ktn2lyt8nBYEn2jQ==", + "license": "LGPL-3.0" + }, + "node_modules/@cspell/dict-eo": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-eo/-/dict-eo-3.0.7.tgz", + "integrity": "sha512-4RsQjqdBuN5Lt0kJE0JTGFvn1JVD3dDQc9BwaNBlWR+5Y8b3MialJe0fOkOP1ZbEclNzLFIX1Q0zSBnHt3uicg==", + "license": "GPL-3.0+" + }, + "node_modules/@cspell/dict-es-es": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-es-es/-/dict-es-es-3.0.8.tgz", + "integrity": "sha512-tj4zYKYWtAFc+JWtJo0DxLAve7I0UJM5+6we3hvLyzQlhGCBF41cTihPa/cbLHUkTD6PkrVGf1hgOKuSR9hkMQ==", + "license": "LGPL-3.0" + }, + "node_modules/@cspell/dict-et-ee": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-et-ee/-/dict-et-ee-3.1.6.tgz", + "integrity": "sha512-GH7d/OFaxtgQoiG7V1Ze4akFfO8AN7OIkxcwk2pUiuALa3IFlKHfr9+ZdUuhI9+paYSvTt2W+8ANveKLFPao5w==", + "license": "LGPL-3.0+" + }, + "node_modules/@cspell/dict-eu": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-eu/-/dict-eu-1.0.6.tgz", + "integrity": "sha512-pTaf9wYFrVn1gRQ57J/kLzLOaBlaUbxoEnu8h1O6E2dpmBIlle3jQ5kQSP7e67LZ02Tfu48MCoZp7685w1jwSA==", "license": "MIT" }, + "node_modules/@cspell/dict-fa-ir": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-fa-ir/-/dict-fa-ir-4.0.5.tgz", + "integrity": "sha512-07H0WOw7vtBxjYz1AJ+abhQwtbg5KBQ5KlStEtNNz1uoIlaIlRrnHz+kSwOXThCYPEEBTUfrYhniTvEJu9U75g==", + "license": "Apache-2.0" + }, + "node_modules/@cspell/dict-fi-fi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-fi-fi/-/dict-fi-fi-1.1.3.tgz", + "integrity": "sha512-w7vmJZe0KPjluzM1oqK0oGMpbdwFNXKV6nFBSM/Ls1v0pja7M2BZz2s088Q+YrOKOZPtFK6YYQDqU9ifzbTsHw==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-filetypes": { "version": "3.0.13", "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.13.tgz", "integrity": "sha512-g6rnytIpQlMNKGJT1JKzWkC+b3xCliDKpQ3ANFSq++MnR4GaLiifaC4JkVON11Oh/UTplYOR1nY3BR4X30bswA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-flutter": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.1.tgz", "integrity": "sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fonts": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.5.tgz", "integrity": "sha512-BbpkX10DUX/xzHs6lb7yzDf/LPjwYIBJHJlUXSBXDtK/1HaeS+Wqol4Mlm2+NAgZ7ikIE5DQMViTgBUY3ezNoQ==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-fr-fr": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-fr-fr/-/dict-fr-fr-2.3.2.tgz", + "integrity": "sha512-cPNjlavSiMfH/bB/Zl5GEF+94s6C77mdvghvVsclco1Ly0VWN3EpH5L9EE3bDGLDpE7m9EnYfRs8TOfZugGrUg==", "license": "MIT" }, "node_modules/@cspell/dict-fsharp": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.1.tgz", "integrity": "sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-fullstack": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.7.tgz", "integrity": "sha512-IxEk2YAwAJKYCUEgEeOg3QvTL4XLlyArJElFuMQevU1dPgHgzWElFevN5lsTFnvMFA1riYsVinqJJX0BanCFEg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-gaming-terms": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.2.tgz", "integrity": "sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-gd": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-gd/-/dict-gd-1.0.3.tgz", + "integrity": "sha512-hkxu3MLVpYBSaWErPIZDTrcf4pc9j7qRmQmfiDmlj8zJKBJt1vc7wLcAuPNeGpStMxdWlA922aHa8Z7/Yu0zQQ==", + "license": "GPL-3.0" + }, "node_modules/@cspell/dict-git": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.7.tgz", "integrity": "sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-gl-es": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-gl-es/-/dict-gl-es-1.1.3.tgz", + "integrity": "sha512-Ce1tNATj9UATBLdWS10lOyFWDtftgpr0E4XktwRBddgF8HoUAvLSWgL28tWVmvUbuvf/SLzWIKyRZAGKhHFPxA==", "license": "MIT" }, "node_modules/@cspell/dict-golang": { "version": "6.0.23", "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.23.tgz", "integrity": "sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-google": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.9.tgz", "integrity": "sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-grc": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-grc/-/dict-grc-1.0.7.tgz", + "integrity": "sha512-u/rXJieaIXNg8OuwOgQZOLjjGpQ8hiEEdBc5FkkNsp41pnvQ7uRVQYXomyiqJvubXQQFs6VaqC+yGBxDEKnTGw==", + "license": "GPL-3.0" + }, "node_modules/@cspell/dict-haskell": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.6.tgz", "integrity": "sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-he": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-he/-/dict-he-4.0.5.tgz", + "integrity": "sha512-kio364XZ+f/tNGBxT1Puc1VpO9o5u6J+07GVhFE+Z/smod6de5scXTLL11dVbo/ah2i9w6Qcc3J+g2P0H+Ft6Q==", + "license": "AGPLv3" + }, + "node_modules/@cspell/dict-hr-hr": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-hr-hr/-/dict-hr-hr-3.1.2.tgz", + "integrity": "sha512-P6vIYN0DI3OoLZ/4sFgZj3Qjfn8V93LhKP6V4SVhFzARNWh2MfkFNuDcTza6+5Qcwl/Gv7moRbPUmvX+GwWVGw==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-html": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-hu-hu": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-hu-hu/-/dict-hu-hu-1.1.2.tgz", + "integrity": "sha512-6p0dyfVQoSHNjeezyMwN3NQijfJsq3U3wmBvkCgUHvj8RZ5ICLcEILIYUnw398jyaNhcxvTtuqhXCM36+s9+Jg==", + "license": "GPL-3.0" + }, + "node_modules/@cspell/dict-hy": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-hy/-/dict-hy-1.0.3.tgz", + "integrity": "sha512-kahndOqbvoZ9YMUS2xLM/XZj3itQQuRI0Tdf3es+4TtDsRVD9MTpgoXdXg6v8ZH8BKsDT2ojAnqhulghBndVwg==", + "license": "MIT" + }, + "node_modules/@cspell/dict-id-id": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-id-id/-/dict-id-id-1.0.7.tgz", + "integrity": "sha512-5PWqvi0u5GKruAf/zN5BnZ/C1IFgT8U4v17/SSGlw3w8SMIrUrQmFU3depVkyMzHglrKm6lpJSf1DJdDXTt6GA==", + "license": "MIT" + }, + "node_modules/@cspell/dict-it-it": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-it-it/-/dict-it-it-3.1.6.tgz", + "integrity": "sha512-q0o4dTm2RrdczvzQ/ENS+FL9TgPTMxoTdlAMtBE9tZjjUOiYcDkBeHBrmsX1Aq7Wz2xdEiUce2oD9Dn268nDOg==", + "license": "GPL-3.0-or-later" + }, "node_modules/@cspell/dict-java": { "version": "5.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.12.tgz", "integrity": "sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-julia": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.1.tgz", "integrity": "sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-k8s": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.12.tgz", "integrity": "sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-kotlin": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.1.tgz", "integrity": "sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-la": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-la/-/dict-la-1.1.2.tgz", + "integrity": "sha512-iCm/i0aRJowTqxe51ODCWSLSrUArC8KIoHpILZDiYNgwmYq9scefNlo+LIYjiRQnl1Q/YjxC1DQolH4UtkYNmA==", + "license": "GPL-3.0+" + }, "node_modules/@cspell/dict-latex": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.4.tgz", "integrity": "sha512-YdTQhnTINEEm/LZgTzr9Voz4mzdOXH7YX+bSFs3hnkUHCUUtX/mhKgf1CFvZ0YNM2afjhQcmLaR9bDQVyYBvpA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-lorem-ipsum": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.5.tgz", "integrity": "sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-lt-lt": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-lt-lt/-/dict-lt-lt-4.0.6.tgz", + "integrity": "sha512-MhGWLTfcYZvZiqDv8C3FaXapEI0wALIPV4FXiX8ksl85AU+ivn+La1GKzAZ9yL36I+MbD82J7/ZUJFBTzHVL3g==", + "license": "BSD-3-Clause" + }, "node_modules/@cspell/dict-lua": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.8.tgz", "integrity": "sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-lv": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-lv/-/dict-lv-1.1.6.tgz", + "integrity": "sha512-T9ozGJUUui6hsFTGn/8pIpGp2KGnlg0glu/mSG1I028Tyn07sVbeMRR4Rhocx0gQnFPIE9y+chVY4taOOFkIFg==", + "license": "LGPL-3.0+" + }, "node_modules/@cspell/dict-makefile": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.5.tgz", "integrity": "sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-markdown": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.12.tgz", "integrity": "sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==", - "dev": true, "license": "MIT", "peerDependencies": { "@cspell/dict-css": "^4.0.18", @@ -423,53 +621,82 @@ "@cspell/dict-typescript": "^3.2.3" } }, + "node_modules/@cspell/dict-mk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@cspell/dict-mk/-/dict-mk-1.0.3.tgz", + "integrity": "sha512-cx7w4LGVpTomsT6bzw1NkodlNtlUJzn3lCIj88GU9iITYJxZs+atxJNGjK7HbNku8IbryUQKueZ/msgJk/HnEA==", + "license": "LGPL-3.0" + }, + "node_modules/@cspell/dict-mn-mn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-mn-mn/-/dict-mn-mn-1.2.2.tgz", + "integrity": "sha512-WcgsSdkZg8S4q4mwS0xNcpLQaeIFCaVNEKMiEvZyN6kXuI3tbx30m0xbNQMBvuePGk6O/Pt8i86Dzsw2KHIXYA==", + "license": "MIT" + }, "node_modules/@cspell/dict-monkeyc": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.11.tgz", "integrity": "sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-nb-no": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-nb-no/-/dict-nb-no-2.0.6.tgz", + "integrity": "sha512-i7GwwS9Er4sX1M0qnSrkn1wWHrpDPjWZ69/ti7UIc1/mrnXS/Ed3bwUSLekvGoZ83ZEAR3CYdKdagGnf28ZrtA==", + "license": "GPL-3.0-or-later" + }, + "node_modules/@cspell/dict-nl-nl": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-nl-nl/-/dict-nl-nl-2.4.2.tgz", + "integrity": "sha512-HkxSItJibsBB2N+YAP6V+RaC40yp8D2tLaI111NjQWxXV0MoecXBn/xK6DJqEsN+Ok3kB2dDK3EKdgjkK2gasQ==", "license": "MIT" }, "node_modules/@cspell/dict-node": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.8.tgz", "integrity": "sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-npm": { "version": "5.2.15", "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.15.tgz", "integrity": "sha512-kb9oX/N5FUlJYoqc5G+tIP/0SolteFMz2VhOVKG2qiXUS/1AybVTjUEo4gZ4uEveUhLzUDcfpZbn40EoUVBVrg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-php": { "version": "4.0.15", "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.15.tgz", "integrity": "sha512-iepGB2gtToMWSTvybesn4/lUp4LwXcEm0s8vasJLP76WWVkq1zYjmeS+WAIzNgsuURyZ/9mGqhS0CWMuo74ODw==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-powershell": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.15.tgz", "integrity": "sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-pt-br": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-pt-br/-/dict-pt-br-2.4.2.tgz", + "integrity": "sha512-kNhoNilURI4u8tOolguvKFntkzVA2EdSaoYIveHu6BVx1YAU/o7x6fJyIfSVHFYzGyCgXNXe18neIRPhnVoa5g==", + "license": "GPL-3.0-or-later" + }, + "node_modules/@cspell/dict-pt-pt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-pt-pt/-/dict-pt-pt-3.0.6.tgz", + "integrity": "sha512-RT3EovAHK086ta4efTp+PxT9a2fZFHGrsf6AhX6LoFfxCn2RZAnITULSuVgkwpD/3Z/Di7oSXXNfeW9LKtGpGQ==", + "license": "LGPL-3.0" + }, "node_modules/@cspell/dict-public-licenses": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.15.tgz", "integrity": "sha512-cJEOs901H13Pfy0fl4dCD1U+xpWIMaEPq8MeYU83FfDZvellAuSo4GqWCripfIqlhns/L6+UZEIJSOZnjgy7Wg==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-python": { "version": "4.2.19", "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.19.tgz", "integrity": "sha512-9S2gTlgILp1eb6OJcVZeC8/Od83N8EqBSg5WHVpx97eMMJhifOzePkE0kDYjyHMtAFznCQTUu0iQEJohNQ5B0A==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-data-science": "^2.0.9" @@ -479,84 +706,138 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.1.tgz", "integrity": "sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-ro-ro": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-ro-ro/-/dict-ro-ro-2.0.6.tgz", + "integrity": "sha512-0NqyK3Z/eKluBJnAvtXTnM9ieWoXqAsH/MWoPMib4b8iQCnUEY4Z6b2gPy3rTVrkr/WPby990XtkW6C+3kL0BA==", + "license": "GPL-3.0" + }, "node_modules/@cspell/dict-ruby": { "version": "5.0.9", "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.9.tgz", "integrity": "sha512-H2vMcERMcANvQshAdrVx0XoWaNX8zmmiQN11dZZTQAZaNJ0xatdJoSqY8C8uhEMW89bfgpN+NQgGuDXW2vmXEw==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-rust": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.12.tgz", "integrity": "sha512-z2QiH+q9UlNhobBJArvILRxV8Jz0pKIK7gqu4TgmEYyjiu1TvnGZ1tbYHeu9w3I/wOP6UMDoCBTty5AlYfW0mw==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-scala": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.8.tgz", "integrity": "sha512-YdftVmumv8IZq9zu1gn2U7A4bfM2yj9Vaupydotyjuc+EEZZSqAafTpvW/jKLWji2TgybM1L2IhmV0s/Iv9BTw==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-scientific-terms-gb": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-scientific-terms-gb/-/dict-scientific-terms-gb-1.0.6.tgz", + "integrity": "sha512-iYjB5QNR+Ex8Za/+9Sq+YxgN3BlmwaTWn8Nrtg1CTHPhQkUqlAFkmWTnkIRkW05BlcjcZ1wHZWh0A00LfwP9YQ==", "license": "MIT" }, "node_modules/@cspell/dict-shell": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.1.tgz", "integrity": "sha512-T37oYxE7OV1x/1D4/13Y8JZGa1QgDCXV7AVt3HLXjn0Fe3TaNDvf5sU0fGnXKmBPqFFrHdpD3uutAQb1dlp15g==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-sk-sk": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-sk-sk/-/dict-sk-sk-1.1.7.tgz", + "integrity": "sha512-BocZxan1eliL4B0xGEDX3HcbXtIe0/iLI8Bb46JMie3s7ifinvabUvoBcCX7yXQt02/dbH/zbwFwtdUcOO6qmQ==", + "license": "MPL v2" + }, + "node_modules/@cspell/dict-sl-si": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-sl-si/-/dict-sl-si-1.0.11.tgz", + "integrity": "sha512-7K4sCTniF/sbgxqSbkV7mQzn6tnSP6dkgeRVkUWkKd+WQccHP/5I+QOEkRGVB+9NT+06wZNIa/t/iGyg20l3NQ==", + "license": "LGPL-3.0-or-later" + }, + "node_modules/@cspell/dict-software-terms": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.8.tgz", + "integrity": "sha512-iwCHLP11OmVHEX2MzE8EPxpPw7BelvldxWe5cJ3xXIDL8TjF2dBTs2noGcrqnZi15SLYIlO8897BIOa33WHHZA==", "license": "MIT" }, "node_modules/@cspell/dict-sql": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.1.tgz", "integrity": "sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==", - "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-sr-cyrl": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-sr-cyrl/-/dict-sr-cyrl-1.1.6.tgz", + "integrity": "sha512-7TfBiaC1RTvnE3QsmGKeUCJfHI8y1RHxhDsTCnrerE08OIr/lDkc9XqvE0k6WlnFCdB1j07w+qScRbiM+/XUSQ==", + "license": "MIT" + }, + "node_modules/@cspell/dict-sr-latn": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-sr-latn/-/dict-sr-latn-1.0.8.tgz", + "integrity": "sha512-Z3liwW0DmCJqqyoovOQ4VNRGH8HbVzgHsNBMXOu+4pEr5zTZ30BYeC+m2u41LSJ8OOecdQ5i1ftHOP5FbMCdMg==", + "license": "MIT" + }, + "node_modules/@cspell/dict-sv": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-sv/-/dict-sv-2.3.2.tgz", + "integrity": "sha512-Es+nEM6v2JXk05SPBFgOEvlrHh5SIoqM2t2gET8BjvCsMBdpCcIREEOiESfX/8Rc2OiiTZXYCXhwa5WjsPmVMQ==", + "license": "GPL-3.0-or-later" + }, "node_modules/@cspell/dict-svelte": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.7.tgz", "integrity": "sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-swift": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.6.tgz", "integrity": "sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-terraform": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.3.tgz", "integrity": "sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-tr-tr": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-tr-tr/-/dict-tr-tr-3.0.6.tgz", + "integrity": "sha512-KwJZviO34acqij7AL9rkac1DOVYq27QIzwGm4x5YC58O16JVHspyPRRbF+sK3SLB4WeZ+ESbITXKrdICqaHB0A==", "license": "MIT" }, "node_modules/@cspell/dict-typescript": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", - "dev": true, + "license": "MIT" + }, + "node_modules/@cspell/dict-uk-ua": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-uk-ua/-/dict-uk-ua-4.0.6.tgz", + "integrity": "sha512-r/PB8LFboPm+fd2xqRrNMCf7yPiJC+skNZsmGA3bun2y1FsZqcZ2kqkiWxHTZZrWmgj98pgoVxmLePcVofLLjA==", + "license": "GPL-3.0" + }, + "node_modules/@cspell/dict-vi-vn": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-vi-vn/-/dict-vi-vn-3.0.6.tgz", + "integrity": "sha512-VFPpTrutrNOY8UTRSThTq3u5xfdkdsB2kiSSP9VCpUo2AaBdKbvL0rk8QBhvJEfaQVgZwRfPIAgM8ml97QJAKA==", "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.5.tgz", "integrity": "sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==", - "dev": true, "license": "MIT" }, "node_modules/@cspell/dynamic-import": { "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.19.4.tgz", "integrity": "sha512-0LLghC64+SiwQS20Sa0VfFUBPVia1rNyo0bYeIDoB34AA3qwguDBVJJkthkpmaP1R2JeR/VmxmJowuARc4ZUxA==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/url": "8.19.4", @@ -570,7 +851,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.19.4.tgz", "integrity": "sha512-D9hOCMyfKtKjjqQJB8F80PWsjCZhVGCGUMiDoQpcta0e+Zl8vHgzwaC0Ai4QUGBhwYEawHGiWUd7Y05u/WXiNQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -580,7 +860,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.19.4.tgz", "integrity": "sha512-MUfFaYD8YqVe32SQaYLI24/bNzaoyhdBIFY5pVrvMo1ZCvMl8AlfI2OcBXvcGb5aS5z7sCNCJm11UuoYbLI1zw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -590,7 +869,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.19.4.tgz", "integrity": "sha512-Pa474iBxS+lxsAL4XkETPGIq3EgMLCEb9agj3hAd2VGMTCApaiUvamR4b+uGXIPybN70piFxvzrfoxsG2uIP6A==", - "dev": true, "license": "MIT", "engines": { "node": ">=18.0" @@ -600,14 +878,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true, "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -617,7 +893,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "dev": true, "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -630,7 +905,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz", "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", - "dev": true, "license": "MIT", "dependencies": { "chalk": "^5.2.0" @@ -646,7 +920,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^2.0.0", @@ -663,7 +936,6 @@ "version": "13.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -673,7 +945,6 @@ "version": "4.2.5", "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", - "dev": true, "license": "MIT", "dependencies": { "array-timsort": "^1.0.3", @@ -690,14 +961,12 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, "license": "MIT" }, "node_modules/cspell": { "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz", "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-json-reporter": "8.19.4", @@ -733,7 +1002,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz", "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-types": "8.19.4", @@ -748,7 +1016,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz", "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-pipe": "8.19.4", @@ -764,7 +1031,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz", "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/url": "8.19.4", @@ -782,7 +1048,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz", "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/url": "8.19.4", @@ -796,7 +1061,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz", "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-pipe": "8.19.4", @@ -813,7 +1077,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz", "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-service-bus": "8.19.4", @@ -827,7 +1090,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz", "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-bundled-dicts": "8.19.4", @@ -863,7 +1125,6 @@ "version": "8.19.4", "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz", "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==", - "dev": true, "license": "MIT", "dependencies": { "@cspell/cspell-pipe": "8.19.4", @@ -878,7 +1139,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "dev": true, "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -891,7 +1151,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -905,7 +1164,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -915,14 +1173,12 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, "license": "MIT" }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0.0" @@ -940,7 +1196,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", - "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^5.0.0" @@ -953,7 +1208,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", - "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.3.1", @@ -967,14 +1221,12 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, "license": "ISC" }, "node_modules/gensequence": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -984,7 +1236,6 @@ "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" @@ -1000,7 +1251,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -1010,7 +1260,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -1027,7 +1276,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -1040,7 +1288,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -1050,7 +1297,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -1061,7 +1307,6 @@ "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" @@ -1071,14 +1316,12 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -1088,7 +1331,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.1.0" @@ -1101,7 +1343,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1114,7 +1355,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10" @@ -1124,7 +1364,6 @@ "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" @@ -1134,7 +1373,6 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1147,7 +1385,6 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.4.4", @@ -1164,21 +1401,18 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "dev": true, "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", - "dev": true, "license": "MIT" }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -1191,7 +1425,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/cspell/package.json b/cspell/package.json index 19a223ded9..a370bc9e12 100644 --- a/cspell/package.json +++ b/cspell/package.json @@ -7,6 +7,61 @@ "spellcheck": "cspell" }, "dependencies": { - "cspell": "^8.0.0" + "@cspell/dict-ar": "^1.1.6", + "@cspell/dict-bg-bg": "^3.0.8", + "@cspell/dict-bn": "^1.0.3", + "@cspell/dict-ca": "^3.1.2", + "@cspell/dict-companies": "^3.2.5", + "@cspell/dict-cs-cz": "^3.0.8", + "@cspell/dict-da-dk": "^4.1.2", + "@cspell/dict-de-at": "^1.2.2", + "@cspell/dict-de-ch": "^1.3.2", + "@cspell/dict-de-de": "^4.1.2", + "@cspell/dict-el": "^3.1.8", + "@cspell/dict-en-au": "^1.1.7", + "@cspell/dict-en-ca": "^1.0.45", + "@cspell/dict-en-common-misspellings": "^2.1.6", + "@cspell/dict-en-gb": "^5.0.14", + "@cspell/dict-en_us": "^4.4.19", + "@cspell/dict-eo": "^3.0.7", + "@cspell/dict-es-es": "^3.0.8", + "@cspell/dict-et-ee": "^3.1.6", + "@cspell/dict-eu": "^1.0.6", + "@cspell/dict-fa-ir": "^4.0.5", + "@cspell/dict-fi-fi": "^1.1.3", + "@cspell/dict-fr-fr": "^2.3.2", + "@cspell/dict-gd": "^1.0.3", + "@cspell/dict-gl-es": "^1.1.3", + "@cspell/dict-grc": "^1.0.7", + "@cspell/dict-he": "^4.0.5", + "@cspell/dict-hr-hr": "^3.1.2", + "@cspell/dict-hu-hu": "^1.1.2", + "@cspell/dict-hy": "^1.0.3", + "@cspell/dict-id-id": "^1.0.7", + "@cspell/dict-it-it": "^3.1.6", + "@cspell/dict-la": "^1.1.2", + "@cspell/dict-lt-lt": "^4.0.6", + "@cspell/dict-lv": "^1.1.6", + "@cspell/dict-makefile": "^1.0.5", + "@cspell/dict-markdown": "^2.0.12", + "@cspell/dict-mk": "^1.0.3", + "@cspell/dict-mn-mn": "^1.2.2", + "@cspell/dict-nb-no": "^2.0.6", + "@cspell/dict-nl-nl": "^2.4.2", + "@cspell/dict-pt-br": "^2.4.2", + "@cspell/dict-pt-pt": "^3.0.6", + "@cspell/dict-python": "^4.2.19", + "@cspell/dict-ro-ro": "^2.0.6", + "@cspell/dict-scientific-terms-gb": "^1.0.6", + "@cspell/dict-sk-sk": "^1.1.7", + "@cspell/dict-sl-si": "^1.0.11", + "@cspell/dict-software-terms": "^5.1.8", + "@cspell/dict-sr-cyrl": "^1.1.6", + "@cspell/dict-sr-latn": "^1.0.8", + "@cspell/dict-sv": "^2.3.2", + "@cspell/dict-tr-tr": "^3.0.6", + "@cspell/dict-uk-ua": "^4.0.6", + "@cspell/dict-vi-vn": "^3.0.6", + "cspell": "^8.19.4" } } diff --git a/make.cmd b/make.cmd index 99a1ead065..ca6ab56b50 100644 --- a/make.cmd +++ b/make.cmd @@ -18,7 +18,12 @@ GoTo :Help Call :Test Exit /B +:Sort-custom-dict + python tools/sort_cspell_dict.py + Exit /B + :Spellcheck + call :Sort-custom-dict call cspell\make.cmd cspell-check Exit /B %ERRORLEVEL% @@ -37,7 +42,7 @@ GoTo :Help :Help Echo Usage: make ^ Echo check run pre-commit and tests - Echo spellcheck run spell check on localization and documentation files + Echo spellcheck run spell check across the repository (code, docs, l10n) Echo doc run documentation build process Echo help show summary of available commands Echo l10n update .pot and .po files diff --git a/tools/sort_cspell_dict.py b/tools/sort_cspell_dict.py new file mode 100644 index 0000000000..3eb6391586 --- /dev/null +++ b/tools/sort_cspell_dict.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +""" +Sort and uniquify the custom dictionary file for cspell. +""" + +import sys +from pathlib import Path + +def sort_custom_dict(): + dict_file = Path(__file__).parent.parent / "cspell" / "custom-dict.txt" + if not dict_file.exists(): + print(f"Dictionary file {dict_file} not found.") + return + + with open(dict_file, 'r', encoding='utf-8') as f: + words = f.read().splitlines() + + # Remove duplicates while preserving order (case-sensitive) + seen = set() + unique_words = [] + for word in words: + if word not in seen: + seen.add(word) + unique_words.append(word) + + # Sort the words + unique_words.sort() + + with open(dict_file, 'w', encoding='utf-8') as f: + f.write('\n'.join(unique_words) + '\n') + + print(f"Sorted and uniquified {dict_file}") + +if __name__ == "__main__": + sort_custom_dict() From 5346c25441022807522be18e801741ed42c78f93 Mon Sep 17 00:00:00 2001 From: Prateekshit73 Date: Sun, 29 Mar 2026 12:45:13 +0530 Subject: [PATCH 3/4] Refine spellcheck command descriptions and enhance error handling in cspell scripts - Updated usage descriptions in `make.cmd` and `Makefile` to clarify that spellcheck runs on docs and l10n only. - Improved error handling in `cspell/make.cmd` to notify users of Docker build failures. - Adjusted `cspell/Makefile` to streamline the spellcheck process. - Added new entries to `cspell/custom-dict.txt` for additional project-specific terms. - Enhanced `sort_cspell_dict.py` with better error handling and output messages. --- Makefile | 4 ++-- cspell/Makefile | 4 ++-- cspell/custom-dict.txt | 8 +++++++- cspell/make.cmd | 5 +++++ cspell/package.json | 3 ++- make.cmd | 2 +- tools/sort_cspell_dict.py | 25 +++++++++++++++++++------ 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index fd58ae0fb1..0d7cffb2c1 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ help: @echo " package build package distribution" @echo " pre-commit run pre-commit against all files" @echo " setup setup development environment" - @echo " spellcheck run spell check across the repository (code, docs, l10n)" + @echo " spellcheck run spell check across the repository (docs, l10n)" @echo " test run tests (in parallel)" @echo " upgrade run dependency upgrade" @@ -33,7 +33,7 @@ sort-custom-dict: spellcheck: sort-custom-dict @command -v docker >/dev/null 2>&1 || { echo "ERROR: docker not found. Install Docker or skip spellcheck."; exit 127; } - $(MAKE) cspell-check + $(MAKE) -f cspell/Makefile cspell-check clean: @for ext in mo pot pyc; do \ diff --git a/cspell/Makefile b/cspell/Makefile index b52736a863..a6ca620935 100644 --- a/cspell/Makefile +++ b/cspell/Makefile @@ -1,4 +1,4 @@ -.PHONY: cspell-install cspell-check cspell-run sort-custom-dict +.PHONY: cspell-install cspell-check sort-custom-dict cspell-install: @which docker > /dev/null 2>&1 || (echo "ERROR: docker not found in PATH. Install Docker."; exit 1) @@ -9,7 +9,7 @@ cspell-install: -t cspell cspell-check: CMD=--no-progress -r /holidays -cspell-check: cspell-install cspell-run +cspell-check: cspell-install @docker run \ --mount type=bind,src="$(CURDIR)",dst=/holidays,readonly \ diff --git a/cspell/custom-dict.txt b/cspell/custom-dict.txt index 5030dd834c..2e84db4357 100644 --- a/cspell/custom-dict.txt +++ b/cspell/custom-dict.txt @@ -1 +1,7 @@ -# Project-specific terms\n +# Project-specific terms +Día +Nāgā +Río +mofile +ārā +วันสงกรานต์ diff --git a/cspell/make.cmd b/cspell/make.cmd index 1dd82affff..561c571dac 100644 --- a/cspell/make.cmd +++ b/cspell/make.cmd @@ -24,6 +24,10 @@ if %errorlevel% neq 0 ( set "build_args=" if defined FORCE set "build_args=--no-cache" set "DOCKER_BUILDKIT=true" && docker build %build_args% -f cspell/Dockerfile -t cspell cspell +if %errorlevel% neq 0 ( + echo ERROR: Docker build failed. + goto end +) goto end :cspell-run @@ -37,6 +41,7 @@ goto end :cspell-check set CMD=--no-progress -r /holidays call :cspell-install +if %errorlevel% neq 0 goto end call :cspell-run docker run --mount type=bind,src="%CD%",dst=/holidays,readonly --rm cspell lint -c cspell/cspell.json %CMD% goto end diff --git a/cspell/package.json b/cspell/package.json index a370bc9e12..4c6d49a827 100644 --- a/cspell/package.json +++ b/cspell/package.json @@ -2,11 +2,12 @@ "name": "cspell-check", "version": "1.0.0", "description": "Spell checking for holidays project", + "private": true, "main": "index.js", "scripts": { "spellcheck": "cspell" }, - "dependencies": { + "devDependencies": { "@cspell/dict-ar": "^1.1.6", "@cspell/dict-bg-bg": "^3.0.8", "@cspell/dict-bn": "^1.0.3", diff --git a/make.cmd b/make.cmd index 72adda885c..7a65d11b82 100644 --- a/make.cmd +++ b/make.cmd @@ -47,7 +47,7 @@ GoTo :Help :Help Echo Usage: make ^ Echo check run pre-commit and tests - Echo spellcheck run spell check across the repository (code, docs, l10n) + Echo spellcheck run spell check across the repository (docs, l10n) Echo doc run documentation build process Echo doc-serve serve documentation locally Echo help show summary of available commands diff --git a/tools/sort_cspell_dict.py b/tools/sort_cspell_dict.py index 3eb6391586..613632dca7 100644 --- a/tools/sort_cspell_dict.py +++ b/tools/sort_cspell_dict.py @@ -1,4 +1,16 @@ #!/usr/bin/env python3 +# holidays +# -------- +# A fast, efficient Python library for generating country, province and state +# specific sets of holidays on the fly. It aims to make determining whether a +# specific date is a holiday as fast and flexible as possible. +# +# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file) +# dr-prodigy (c) 2017-2023 +# ryanss (c) 2014-2017 +# Website: https://github.com/vacanza/holidays +# License: MIT (see LICENSE file) + """ Sort and uniquify the custom dictionary file for cspell. """ @@ -6,13 +18,13 @@ import sys from pathlib import Path + def sort_custom_dict(): dict_file = Path(__file__).parent.parent / "cspell" / "custom-dict.txt" if not dict_file.exists(): - print(f"Dictionary file {dict_file} not found.") - return + raise SystemExit(f"Dictionary file {dict_file} not found.") - with open(dict_file, 'r', encoding='utf-8') as f: + with open(dict_file, encoding="utf-8") as f: words = f.read().splitlines() # Remove duplicates while preserving order (case-sensitive) @@ -26,10 +38,11 @@ def sort_custom_dict(): # Sort the words unique_words.sort() - with open(dict_file, 'w', encoding='utf-8') as f: - f.write('\n'.join(unique_words) + '\n') + with open(dict_file, "w", encoding="utf-8") as f: + f.write("\n".join(unique_words) + "\n") + + sys.stdout.write(f"Sorted and uniquified {dict_file}\n") - print(f"Sorted and uniquified {dict_file}") if __name__ == "__main__": sort_custom_dict() From ab77833a5c0bf672f0d15628f740b0aecf2fd1f5 Mon Sep 17 00:00:00 2001 From: Prateekshit73 Date: Fri, 1 May 2026 17:08:45 +0530 Subject: [PATCH 4/4] Add spellcheck workflow to CI/CD and update .gitignore to include node_modules --- .github/workflows/ci-cd.yml | 16 ++++++++++++++++ .gitignore | 1 + 2 files changed, 17 insertions(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index dc09229e3a..503d56a0e3 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -43,6 +43,22 @@ jobs: - name: Run pre-commit run: uv tool run --with pre-commit-uv pre-commit run --show-diff-on-failure --color=always --all-files + spellcheck: + name: Spellcheck + runs-on: ubuntu-24.04 + needs: + - pre-commit + steps: + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd + + - name: Install cspell dependencies + run: npm ci --ignore-scripts --no-audit --no-fund + working-directory: cspell + + - name: Run spellcheck + run: cspell/node_modules/.bin/cspell lint -c cspell/cspell.json --no-progress "docs/**/*" "README.md" "scripts/l10n/**/*" "mkdocs.yml" + code-ql: name: CodeQL needs: diff --git a/.gitignore b/.gitignore index e99890a979..2d4c7a78eb 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ dist/ docs/auto_gen_files/ holidays/locale/pot/*.pot MANIFEST +node_modules/ Pipfile sbom.json site/