diff --git a/AGENTS.md b/AGENTS.md index 359c802..55b0216 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,9 +1,42 @@ # Repository Guidelines +## Table of Contents + +- [Documentation](#documentation) +- [Project Structure & Module Organization](#project-structure--module-organization) +- [Build, Test, and Development Commands](#build-test-and-development-commands) +- [Coding Style & Naming Conventions](#coding-style--naming-conventions) +- [Testing Guidelines](#testing-guidelines) +- [Commit & Pull Request Guidelines](#commit--pull-request-guidelines) +- [LLM & AI Workflow Notes](#llm--ai-workflow-notes) + +--- + +## Documentation + +All project documentation is located in the `docs/` folder: + +| Document | Description | +|----------|-------------| +| [backend-guide.md](docs/backend-guide.md) | Backend architecture, modules, and API endpoints | +| [frontend-workflow.md](docs/frontend-workflow.md) | User flow, page routes, and component architecture | +| [front-end-apis.md](docs/front-end-apis.md) | API contract between frontend and backend | +| [style-guide.md](docs/style-guide.md) | Swiss International Style design system | +| [backend-architecture.md](docs/backend-architecture.md) | Detailed backend architecture diagrams | +| [frontend-architecture.md](docs/frontend-architecture.md) | Detailed frontend architecture diagrams | +| [api-flow-maps.md](docs/api-flow-maps.md) | API request/response flow diagrams | +| [design-system.md](docs/design-system.md) | Extended design system documentation | +| [template-system.md](docs/template-system.md) | Resume template system documentation | +| [print_pdf_design_spec.md](docs/print_pdf_design_spec.md) | PDF generation specifications | +| [resume_template_design_spec.md](docs/resume_template_design_spec.md) | Resume template design specifications | +| [i18n-preparation.md](docs/i18n-preparation.md) | Internationalization preparation notes | +| [backend-requirements.md](docs/backend-requirements.md) | API contract specifications | +| [review-todo.md](docs/review-todo.md) | Review checklist and TODOs | + ## Project Structure & Module Organization ### Backend (`apps/backend/`) -A lean FastAPI application with multi-provider AI support. See **[.backend-guide.md](.backend-guide.md)** for detailed architecture documentation. +A lean FastAPI application with multi-provider AI support. See **[docs/backend-guide.md](docs/backend-guide.md)** for detailed architecture documentation. - `app/main.py` - FastAPI entry point with CORS and router setup - `app/config.py` - Pydantic settings loaded from environment @@ -15,7 +48,7 @@ A lean FastAPI application with multi-provider AI support. See **[.backend-guide - `app/prompts/` - Simplified LLM prompt templates ### Frontend (`apps/frontend/`) -Next.js dashboard with Swiss International Style design. See **[.frontend-workflow.md](.frontend-workflow.md)** for user flow and **[.front-end-apis.md](.front-end-apis.md)** for API contracts. +Next.js dashboard with Swiss International Style design. See **[docs/frontend-workflow.md](docs/frontend-workflow.md)** for user flow and **[docs/front-end-apis.md](docs/front-end-apis.md)** for API contracts. - `app/` - Next.js routes (dashboard, builder, tailor, resumes, settings, print) - `components/` - Reusable UI components (including `ConfirmDialog` with danger/success variants) @@ -28,20 +61,18 @@ Next.js dashboard with Swiss International Style design. See **[.frontend-workfl - Delete flow includes confirmation before and success message after deletion ### Root Tooling -- `Makefile`, `setup.sh`, `package.json` - Workflow coordination -- `backend-requirements.md` - API contract specifications -- `.style-guide.md` - Swiss International Style design system +- `package.json` - Workflow coordination and scripts ## Build, Test, and Development Commands - `npm run install` provisions the frontend and, via `uv`, the backend virtual environment. -- `make run-dev` (or `npm run dev`) launches FastAPI on `:8000` and the UI on `:3000`; use `npm run dev:backend` or `npm run dev:frontend` to focus on a single tier. -- Production builds: `npm run build` for both stacks, `npm run build:frontend` for UI-only, and `make build-prod` for a Makefile-driven bundle. +- `npm run dev` launches FastAPI on `:8000` and the UI on `:3000`; use `npm run dev:backend` or `npm run dev:frontend` to focus on a single tier. +- Production builds: `npm run build` for both stacks, `npm run build:frontend` for UI-only. - Quality checks: `npm run lint` for the UI, `npm run format` to apply Prettier. ## Coding Style & Naming Conventions ### Frontend (TypeScript/React) -- **Design System**: All UI changes MUST follow the **Swiss International Style** in `.style-guide.md`. +- **Design System**: All UI changes MUST follow the **Swiss International Style** in [docs/style-guide.md](docs/style-guide.md). - Use `font-serif` for headers, `font-mono` for metadata, `font-sans` for body text. - Color palette: `#F0F0E8` (Canvas), `#000000` (Ink), `#1D4ED8` (Hyper Blue), `#15803D` (Signal Green), `#F97316` (Alert Orange), `#DC2626` (Alert Red), `#4B5563` (Steel Grey). - Components: `rounded-none` with 1px black borders and hard shadows. diff --git a/Makefile b/Makefile deleted file mode 100644 index 230d14a..0000000 --- a/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -.SHELL := /usr/bin/env bash - -.PHONY: all help setup dev build clean - -all: help - -help: - @echo "Usage: make [target]" - @echo "Available targets:" - @echo " setup Run the setup script to configure the project" - @echo " run-dev Setup and start the development server (with graceful shutdown)" - @echo " build-prod Build the project for production" - @echo " start-prod Start the production server (after building)" - @echo " run-prod Build and start the production server" - @echo " clean Clean up generated artifacts" - -setup: - @echo "🔧 Running setup.sh…" - @bash setup.sh - -run-dev: - @echo "🚀 Starting development server…" - @bash -c 'trap "echo "\n🛑 Development server stopped"; exit 0" SIGINT; npm run dev' - -build-prod: - @echo "📦 Building for production…" - @npm run build - -start-prod: - @echo "🚀 Starting production server…" - @bash -c 'trap "echo "\n🛑 Production server stopped"; exit 0" SIGINT; npm run start' - -run-prod: build-prod - @echo "🚀 Starting production server…" - @bash -c 'trap "echo "\n🛑 Production server stopped"; exit 0" SIGINT; npm run start' - -clean: - @echo "🧹 Cleaning artifacts…" - # Add commands to clean build and temp files, e.g.: - # rm -rf node_modules apps/backend/.venv apps/frontend/node_modules diff --git a/.backend-guide.md b/docs/backend-guide.md similarity index 100% rename from .backend-guide.md rename to docs/backend-guide.md diff --git a/backend-requirements.md b/docs/backend-requirements.md similarity index 100% rename from backend-requirements.md rename to docs/backend-requirements.md diff --git a/.front-end-apis.md b/docs/front-end-apis.md similarity index 100% rename from .front-end-apis.md rename to docs/front-end-apis.md diff --git a/.frontend-workflow.md b/docs/frontend-workflow.md similarity index 100% rename from .frontend-workflow.md rename to docs/frontend-workflow.md diff --git a/review_TODO.md b/docs/review-todo.md similarity index 100% rename from review_TODO.md rename to docs/review-todo.md diff --git a/.style-guide.md b/docs/style-guide.md similarity index 100% rename from .style-guide.md rename to docs/style-guide.md diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 1e76d6a..0000000 --- a/setup.sh +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env bash -# -# setup.sh - cross-platform setup for Resume Matcher -# -# Usage: -# ./setup.sh [--help] [--start-dev] -# -# Requirements: -# • Bash 4.4+ (for associative arrays) -# • curl (for uv & ollama installers, if needed) -# -# After setup: -# npm run dev # start development server -# npm run build # build for production - -set -euo pipefail -export PYTHONDONTWRITEBYTECODE=1 -IFS=$'\n\t' - -#–– Detect OS for compatibility ––# -OS="$(uname -s)" -case "$OS" in - Linux*) OS_TYPE="Linux" ;; - Darwin*) OS_TYPE="macOS" ;; - *) OS_TYPE="$OS" ;; -esac - -#–– CLI help ––# -usage() { - cat <&2; exit 1; } - -info "Detected operating system: $OS_TYPE" - -#–– 1. Prerequisite checks ––# -check_cmd() { - local cmd=$1 - if ! command -v "$cmd" &> /dev/null; then - error "$cmd is not installed. Please install it and retry." - fi -} - -check_node_version() { - local min_major=18 - local ver - ver=$(node --version | sed 's/^v\([0-9]*\).*/\1/') - if (( ver < min_major )); then - error "Node.js v${min_major}+ is required (found v$(node --version))." - fi -} - -info "Checking prerequisites…" -check_cmd node -check_node_version -check_cmd npm -check_cmd python3 - -if ! command -v pip3 &> /dev/null; then - if [[ "$OS_TYPE" == "Linux" && -x "$(command -v apt-get)" ]]; then - info "pip3 not found; installing via apt-get…" - sudo apt-get update && sudo apt-get install -y python3-pip || error "Failed to install python3-pip" - elif [[ "$OS_TYPE" == "Linux" && -x "$(command -v yum)" ]]; then - info "pip3 not found; installing via yum…" - sudo yum install -y python3-pip || error "Failed to install python3-pip" - else - info "pip3 not found; bootstrapping via ensurepip…" - python3 -m ensurepip --upgrade || error "ensurepip failed" - fi -fi -check_cmd pip3 -success "pip3 is available" - -# ensure uv -if ! command -v uv &> /dev/null; then - info "uv not found; installing via Astral.sh…" - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH="$HOME/.local/bin:$PATH" -fi -check_cmd uv -success "All prerequisites satisfied." - -#–– 2. Optional Ollama setup ––# -ollama_check_or_pull() { - model_name="$1" - if ! ollama list | grep -q "$model_name"; then - info "Pulling $model_name model…" - ollama pull "$model_name" || error "Failed to pull $model_name model" - success "$model_name model ready" - else - info "$model_name model already present—skipping" - fi -} - -NEEDS_OLLAMA=false -ENV_SOURCE="" -if [[ -f apps/backend/.env ]]; then - ENV_SOURCE="apps/backend/.env" -elif [[ -f apps/backend/.env.sample ]]; then - ENV_SOURCE="apps/backend/.env.sample" -fi - -if [[ -n "$ENV_SOURCE" ]]; then - if grep -Eq "^LLM_PROVIDER=[\"']?ollama" "$ENV_SOURCE" || grep -Eq "^EMBEDDING_PROVIDER=[\"']?ollama" "$ENV_SOURCE"; then - NEEDS_OLLAMA=true - fi -fi - -if [[ "$NEEDS_OLLAMA" == true ]]; then - info "Checking Ollama installation…" - if ! command -v ollama &> /dev/null; then - info "ollama not found; installing…" - - if [[ "$OS_TYPE" == "macOS" ]]; then - brew install ollama || error "Failed to install Ollama via Homebrew" - else - # Download Ollama installer securely without using curl | sh - curl -Lo ollama-install.sh https://ollama.com/install.sh || error "Failed to download Ollama installer" - chmod +x ollama-install.sh - ./ollama-install.sh || error "Failed to execute Ollama installer" - rm ollama-install.sh - export PATH="$HOME/.local/bin:$PATH" - fi - success "Ollama installed" - else - info "Ollama already installed—skipping" - fi -else - info "Skipping Ollama installation (providers set to non-Ollama)." -fi - -#–– 3. Bootstrap root .env ––# -if [[ -f .env.example && ! -f .env ]]; then - info "Bootstrapping root .env from .env.example" - cp .env.example .env - success "Root .env created" -elif [[ -f .env ]]; then - info "Root .env already exists—skipping" -else - info "No .env.example at root—skipping" -fi - -#–– 4. Install root dependencies ––# -info "Installing root dependencies with npm ci…" -npm ci -success "Root dependencies installed." - -#–– 5. Setup backend ––# -info "Setting up backend (apps/backend)…" -( - cd apps/backend - - # bootstrap backend .env - if [[ -f .env.sample && ! -f .env ]]; then - info "Bootstrapping backend .env from .env.sample" - cp .env.sample .env - success "Backend .env created" - else - info "Backend .env exists or .env.sample missing—skipping" - fi - - # The Ollama provider automatically pulls models on demand, but it's preferable to do it at setup time. - eval `grep ^LLM_PROVIDER= .env` - if [ "$LLM_PROVIDER" = "ollama" ]; then - eval `grep ^LL_MODEL .env` - ollama_check_or_pull $LL_MODEL - fi - eval `grep ^EMBEDDING_PROVIDER= .env` - if [ "$EMBEDDING_PROVIDER" = "ollama" ]; then - eval `grep ^EMBEDDING_MODEL .env` - ollama_check_or_pull $EMBEDDING_MODEL - fi - - info "Syncing Python deps via uv…" - uv sync - success "Backend dependencies ready." -) - -#–– 6. Setup frontend ––# -info "Setting up frontend (apps/frontend)…" -( - cd apps/frontend - # bootstrap frontend .env - if [[ -f .env.sample && ! -f .env ]]; then - info "Bootstrapping frontend .env from .env.sample" - cp .env.sample .env - success "frontend .env created" - else - info "frontend .env exists or .env.sample missing—skipping" - fi - - info "Installing frontend deps with npm ci…" - npm ci - success "Frontend dependencies ready." -) - -#–– 7. Finish or start dev ––# -if [[ "$START_DEV" == true ]]; then - info "Starting development server…" - # trap SIGINT for graceful shutdown - trap 'info "Gracefully shutting down development server."; exit 0' SIGINT - npm run dev -else - success "🎉 Setup complete! - -Next steps: - • Run \`npm run dev\` to start in development mode. - • Run \`npm run build\` for production. - • See SETUP.md for more details." -fi diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 073aac1..0000000 --- a/yarn.lock +++ /dev/null @@ -1,212 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@pkgr/core@^0.2.9": - version "0.2.9" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" - integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -chalk@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concurrently@^9.1.2: - version "9.2.1" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.2.1.tgz#248ea21b95754947be2dad9c3e4b60f18ca4e44f" - integrity sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng== - dependencies: - chalk "4.1.2" - rxjs "7.8.2" - shell-quote "1.8.3" - supports-color "8.1.1" - tree-kill "1.2.2" - yargs "17.7.2" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -eslint-config-prettier@^10.1.8: - version "10.1.8" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" - integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== - -eslint-plugin-prettier@^5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz#9d61c4ea11de5af704d4edf108c82ccfa7f2e61c" - integrity sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.11.7" - -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^3.6.2: - version "3.7.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.7.4.tgz#d2f8335d4b1cec47e1c8098645411b0c9dff9c0f" - integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -rxjs@7.8.2: - version "7.8.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" - integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== - dependencies: - tslib "^2.1.0" - -shell-quote@1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b" - integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -synckit@^0.11.7: - version "0.11.11" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" - integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== - dependencies: - "@pkgr/core" "^0.2.9" - -tree-kill@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -tslib@^2.1.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1"