diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..baafac1 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,52 @@ +# Colors for output +RED='\033[0;31m' +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +NC='\033[0m' # No Color + +echo "๐Ÿš€ Running pre-commit checks..." + +# Check for merge conflicts +if git diff --cached --name-only | xargs grep -E "^(<<<<<<<|=======|>>>>>>>)" 2>/dev/null; then + echo "${RED}โŒ Merge conflict markers detected!${NC}" + echo "Please resolve merge conflicts before committing." + exit 1 +fi + +# Check for console.log statements (warning only) +CONSOLE_LOGS=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(js|jsx|ts|tsx)$' | xargs grep -n "console\.log" 2>/dev/null || true) +if [ -n "$CONSOLE_LOGS" ]; then + echo "${YELLOW}โš ๏ธ Warning: console.log statements found:${NC}" + echo "$CONSOLE_LOGS" | while IFS= read -r line; do + echo " $line" + done + echo "${YELLOW}Consider removing console.log statements before committing.${NC}" +fi + +# Check for large files (>5MB) +LARGE_FILES=$(git diff --cached --name-only | while read file; do + if [ -f "$file" ]; then + SIZE=$(wc -c < "$file" 2>/dev/null || echo 0) + if [ "$SIZE" -gt 5242880 ]; then + echo "$file ($(($SIZE / 1048576))MB)" + fi + fi +done) + +if [ -n "$LARGE_FILES" ]; then + echo "${YELLOW}โš ๏ธ Warning: Large files detected:${NC}" + echo "$LARGE_FILES" + echo "${YELLOW}Consider using Git LFS for large files.${NC}" +fi + +# Run lint-staged for fast checks on staged files +echo "๐Ÿ“ Running lint and format checks on staged files..." +pnpm exec lint-staged + +if [ $? -ne 0 ]; then + echo "${RED}โŒ Pre-commit checks failed!${NC}" + echo "Please fix the issues above and try again." + exit 1 +fi + +echo "${GREEN}โœ… Pre-commit checks passed!${NC}" \ No newline at end of file diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100755 index 0000000..5a68349 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,94 @@ +# Colors for output +RED='\033[0;31m' +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +echo "๐Ÿš€ Running pre-push checks..." + +# Get current branch name +BRANCH=$(git rev-parse --abbrev-ref HEAD) + +# Branch naming validation (matching PR validation rules) +VALID_BRANCH_REGEX="^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert|release|hotfix|deps|wip)\/[a-z0-9._-]+$|^(main|develop|staging|release\/v[0-9]+\.[0-9]+\.[0-9]+|version\/[0-9]+)$" + +if ! echo "$BRANCH" | grep -qE "$VALID_BRANCH_REGEX"; then + echo "${RED}โŒ Invalid branch name: $BRANCH${NC}" + echo "Branch names must follow the pattern: type/description" + echo "Valid types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert, release, hotfix, deps, wip" + echo "Or be one of: main, develop, staging, release/vX.Y.Z, version/X" + exit 1 +fi + +# Get the remote and branch being pushed to +while read local_ref local_sha remote_ref remote_sha +do + # Check commit messages for conventional commit format + echo "${BLUE}๐Ÿ“‹ Validating commit messages...${NC}" + + # Get all commits that will be pushed + if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then + # New branch, check commits not in origin/develop + COMMITS=$(git rev-list origin/develop..HEAD 2>/dev/null || git rev-list HEAD) + else + # Existing branch, check new commits only + COMMITS=$(git rev-list "$remote_sha..$local_sha") + fi + + INVALID_COMMITS="" + for commit in $COMMITS; do + MSG=$(git log --format=%s -n 1 "$commit") + # Check conventional commit format + if ! echo "$MSG" | grep -qE "^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .+$|^Merge |^Initial commit$"; then + INVALID_COMMITS="$INVALID_COMMITS\n - $commit: $MSG" + fi + done + + if [ -n "$INVALID_COMMITS" ]; then + echo "${RED}โŒ Invalid commit messages found:${NC}" + echo "$INVALID_COMMITS" + echo "${YELLOW}Commit messages must follow conventional commit format:${NC}" + echo " type(scope?): description" + echo " Valid types: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert" + exit 1 + fi +done + +echo "${GREEN}โœ… Branch name and commit messages are valid${NC}" + +# Run comprehensive checks +echo "${BLUE}๐Ÿงน Running lint checks...${NC}" +pnpm lint +if [ $? -ne 0 ]; then + echo "${RED}โŒ Linting failed!${NC}" + echo "Run 'pnpm lint:fix' to auto-fix issues" + exit 1 +fi + +echo "${BLUE}๐Ÿ” Running type checks...${NC}" +pnpm typecheck +if [ $? -ne 0 ]; then + echo "${RED}โŒ Type checking failed!${NC}" + echo "Please fix TypeScript errors before pushing" + exit 1 +fi + +echo "${BLUE}๐Ÿงช Running tests...${NC}" +CI=true pnpm test +if [ $? -ne 0 ]; then + echo "${RED}โŒ Tests failed!${NC}" + echo "Please fix failing tests before pushing" + exit 1 +fi + +echo "${BLUE}๐Ÿ—๏ธ Building project...${NC}" +pnpm build +if [ $? -ne 0 ]; then + echo "${RED}โŒ Build failed!${NC}" + echo "Please fix build errors before pushing" + exit 1 +fi + +echo "${GREEN}โœ… All pre-push checks passed!${NC}" +echo "${GREEN}๐ŸŽ‰ Ready to push to $BRANCH${NC}" \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..d7182b1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,193 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Dev: Start All Services", + "type": "shell", + "command": "pnpm", + "args": ["dev"], + "group": { + "kind": "none", + "isDefault": false + }, + "presentation": { + "reveal": "always", + "panel": "new", + "focus": true, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "isBackground": true, + "detail": "Start all applications and packages in development mode using Turborepo" + }, + { + "label": "Build: Entire Monorepo", + "type": "shell", + "command": "pnpm", + "args": ["build"], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": true + }, + "problemMatcher": ["$tsc"], + "detail": "Build all packages and applications in dependency order" + }, + { + "label": "Test: Run All Tests", + "type": "shell", + "command": "pnpm", + "args": ["test"], + "group": { + "kind": "test", + "isDefault": true + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": true + }, + "problemMatcher": [], + "detail": "Run all tests across the entire monorepo using Vitest" + }, + { + "label": "Code Check: Full Validation", + "dependsOrder": "sequence", + "dependsOn": ["Code Check: Lint", "Code Check: Format", "Code Check: Type Check"], + "group": { + "kind": "none", + "isDefault": false + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Run linting, formatting, and type checking across the entire codebase" + }, + { + "label": "Code Check: Lint", + "type": "shell", + "command": "pnpm", + "args": ["lint"], + "group": "none", + "presentation": { + "reveal": "silent", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Run Biome linter" + }, + { + "label": "Code Check: Format", + "type": "shell", + "command": "pnpm", + "args": ["format"], + "group": "none", + "presentation": { + "reveal": "silent", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Format code using Biome" + }, + { + "label": "Code Check: Type Check", + "type": "shell", + "command": "pnpm", + "args": ["typecheck"], + "group": "none", + "presentation": { + "reveal": "silent", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": ["$tsc"], + "detail": "Run TypeScript type checking" + }, + { + "label": "Code Check: Full Validation + Autofix", + "dependsOrder": "sequence", + "dependsOn": [ + "Code Check: Lint Autofix", + "Code Check: Format Autofix", + "Code Check: Type Check" + ], + "group": { + "kind": "none", + "isDefault": false + }, + "presentation": { + "reveal": "always", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Run linting, formatting with autofix, and type checking across the entire codebase" + }, + { + "label": "Code Check: Lint Autofix", + "type": "shell", + "command": "pnpm", + "args": ["lint:fix"], + "group": "none", + "presentation": { + "reveal": "silent", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Run Biome linter with autofix" + }, + { + "label": "Code Check: Format Autofix", + "type": "shell", + "command": "pnpm", + "args": ["format:fix"], + "group": "none", + "presentation": { + "reveal": "silent", + "panel": "shared", + "focus": false, + "echo": true, + "showReuseMessage": false, + "clear": false + }, + "problemMatcher": [], + "detail": "Format code using Biome with autofix" + } + ] +} diff --git a/package.json b/package.json index b37e9c8..024175a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "aicd", "version": "0.2.1", - "private": true, + "private": false, "description": "AI-powered continuous deployment platform", "author": "zopio", "license": "MIT", @@ -33,10 +33,17 @@ "check": "biome check .", "prepare": "husky install" }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx,json,css,scss,md}": [ + "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true" + ], + "**/*.{js,jsx,ts,tsx}": ["bash -c 'tsc --noEmit --skipLibCheck'"] + }, "devDependencies": { "@biomejs/biome": "^1.5.0", "@types/node": "^20.11.0", "husky": "^9.0.0", + "lint-staged": "^16.1.2", "tsup": "^8.0.0", "turbo": "^1.12.0", "typescript": "^5.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eec2d40..5ba44d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,12 @@ importers: husky: specifier: ^9.0.0 version: 9.1.7 + lint-staged: + specifier: ^16.1.2 + version: 16.1.2 tsup: specifier: ^8.0.0 - version: 8.5.0(postcss@8.5.5)(typescript@5.8.3) + version: 8.5.0(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0) turbo: specifier: ^1.12.0 version: 1.13.4 @@ -668,6 +671,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -700,6 +707,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -714,6 +725,10 @@ packages: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -721,6 +736,14 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} @@ -728,6 +751,13 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + commander@14.0.0: + resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} + engines: {node: '>=20'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -763,12 +793,19 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -782,6 +819,9 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -794,6 +834,10 @@ packages: picomatch: optional: true + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + fix-dts-default-cjs-exports@1.0.1: resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} @@ -806,6 +850,10 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -830,6 +878,18 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -854,6 +914,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lint-staged@16.1.2: + resolution: {integrity: sha512-sQKw2Si2g9KUZNY3XNvRuDq4UJqpHwF0/FQzZR2M7I5MvtpWvibikCjUVJzZdGE0ByurEl3KQNvsGetd1ty1/Q==} + engines: {node: '>=20.17'} + hasBin: true + + listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} + engines: {node: '>=18.0.0'} + load-tsconfig@0.2.5: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -865,6 +934,10 @@ packages: lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -877,10 +950,18 @@ packages: merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -898,6 +979,10 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nano-spawn@1.0.2: + resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} + engines: {node: '>=20.17'} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -915,6 +1000,10 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} @@ -946,10 +1035,19 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + picomatch@4.0.2: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -998,6 +1096,13 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rollup@4.43.0: resolution: {integrity: sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1018,6 +1123,14 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1032,6 +1145,10 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -1040,6 +1157,10 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1085,6 +1206,10 @@ packages: resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} engines: {node: '>=14.0.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -1248,6 +1373,15 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} + hasBin: true + yocto-queue@1.2.1: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} @@ -1571,6 +1705,10 @@ snapshots: acorn@8.15.0: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -1593,6 +1731,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + bundle-require@5.1.0(esbuild@0.25.5): dependencies: esbuild: 0.25.5 @@ -1610,6 +1752,8 @@ snapshots: pathval: 1.1.1 type-detect: 4.1.0 + chalk@5.4.1: {} + check-error@1.0.3: dependencies: get-func-name: 2.0.2 @@ -1618,12 +1762,25 @@ snapshots: dependencies: readdirp: 4.1.2 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + color-convert@2.0.1: dependencies: color-name: 1.1.4 color-name@1.1.4: {} + colorette@2.0.20: {} + + commander@14.0.0: {} + commander@4.1.1: {} confbox@0.1.8: {} @@ -1648,10 +1805,14 @@ snapshots: eastasianwidth@0.2.0: {} + emoji-regex@10.4.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + environment@1.1.0: {} + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -1710,6 +1871,8 @@ snapshots: dependencies: '@types/estree': 1.0.8 + eventemitter3@5.0.1: {} + execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -1726,6 +1889,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + fix-dts-default-cjs-exports@1.0.1: dependencies: magic-string: 0.30.17 @@ -1740,6 +1907,8 @@ snapshots: fsevents@2.3.3: optional: true + get-east-asian-width@1.3.0: {} + get-func-name@2.0.2: {} get-stream@8.0.1: {} @@ -1759,6 +1928,14 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-number@7.0.0: {} + is-stream@3.0.0: {} isexe@2.0.0: {} @@ -1777,6 +1954,30 @@ snapshots: lines-and-columns@1.2.4: {} + lint-staged@16.1.2: + dependencies: + chalk: 5.4.1 + commander: 14.0.0 + debug: 4.4.1 + lilconfig: 3.1.3 + listr2: 8.3.3 + micromatch: 4.0.8 + nano-spawn: 1.0.2 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.8.0 + transitivePeerDependencies: + - supports-color + + listr2@8.3.3: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + load-tsconfig@0.2.5: {} local-pkg@0.5.1: @@ -1786,6 +1987,14 @@ snapshots: lodash.sortby@4.7.0: {} + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -1798,8 +2007,15 @@ snapshots: merge-stream@2.0.0: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mimic-fn@4.0.0: {} + mimic-function@5.0.1: {} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -1821,6 +2037,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nano-spawn@1.0.2: {} + nanoid@3.3.11: {} npm-run-path@5.3.0: @@ -1833,6 +2051,10 @@ snapshots: dependencies: mimic-fn: 4.0.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + p-limit@5.0.0: dependencies: yocto-queue: 1.2.1 @@ -1856,8 +2078,12 @@ snapshots: picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + pidtree@0.6.0: {} + pirates@4.0.7: {} pkg-types@1.3.1: @@ -1866,11 +2092,12 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - postcss-load-config@6.0.1(postcss@8.5.5): + postcss-load-config@6.0.1(postcss@8.5.5)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 optionalDependencies: postcss: 8.5.5 + yaml: 2.8.0 postcss@8.5.5: dependencies: @@ -1892,6 +2119,13 @@ snapshots: resolve-from@5.0.0: {} + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + rfdc@1.4.1: {} + rollup@4.43.0: dependencies: '@types/estree': 1.0.7 @@ -1928,6 +2162,16 @@ snapshots: signal-exit@4.1.0: {} + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + source-map-js@1.2.1: {} source-map@0.8.0-beta.0: @@ -1938,6 +2182,8 @@ snapshots: std-env@3.9.0: {} + string-argv@0.3.2: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -1950,6 +2196,12 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -1995,6 +2247,10 @@ snapshots: tinyspy@2.2.1: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + tr46@1.0.1: dependencies: punycode: 2.3.1 @@ -2003,7 +2259,7 @@ snapshots: ts-interface-checker@0.1.13: {} - tsup@8.5.0(postcss@8.5.5)(typescript@5.8.3): + tsup@8.5.0(postcss@8.5.5)(typescript@5.8.3)(yaml@2.8.0): dependencies: bundle-require: 5.1.0(esbuild@0.25.5) cac: 6.7.14 @@ -2014,7 +2270,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.5) + postcss-load-config: 6.0.1(postcss@8.5.5)(yaml@2.8.0) resolve-from: 5.0.0 rollup: 4.43.0 source-map: 0.8.0-beta.0 @@ -2156,4 +2412,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + yaml@2.8.0: {} + yocto-queue@1.2.1: {}