From e0575c42c54f7fd6ecae7f0eb64056445b365aa8 Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Sun, 12 Jul 2026 15:31:25 +0300 Subject: [PATCH 1/8] feat: Add shared Product Pulse composite action Centralizes the product-pulse logic (Cursor Agent generation, JSON parsing, Slack notification) so elementor and elementor-pro can share one implementation instead of maintaining duplicate ~300-line workflows. Callers keep their own repo-specific product-area prompt and pass it in via the prompt-file input. Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/README.md | 55 +++ actions/product-pulse/action.yml | 352 ++++++++++++++++++ .../scripts/extract-pulse-json.py | 17 + 3 files changed, 424 insertions(+) create mode 100644 actions/product-pulse/README.md create mode 100644 actions/product-pulse/action.yml create mode 100644 actions/product-pulse/scripts/extract-pulse-json.py diff --git a/actions/product-pulse/README.md b/actions/product-pulse/README.md new file mode 100644 index 0000000000..65181c6b61 --- /dev/null +++ b/actions/product-pulse/README.md @@ -0,0 +1,55 @@ +# Product Pulse Action + +Uses Cursor Agent to decide whether a merged PR is product-facing, and if so, posts a +user-friendly pulse update to Slack. Ported from the `elementor` and `elementor-pro` +repos so both can share one implementation. + +Each consuming repo keeps its own `product-pulse-prompt.md` (product-area mapping +differs per repo) and a thin wrapper workflow that triggers on `pull_request: closed` +and calls this action. + +## Usage + +```yaml +name: Product Pulse + +on: + pull_request: + types: [closed] + branches: [main] + +permissions: + pull-requests: read + +concurrency: + group: product-pulse-${{ github.repository }} + cancel-in-progress: false + +jobs: + product-pulse: + if: github.event.pull_request.merged == true && startsWith(github.repository, 'elementor/') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - uses: elementor/elementor-editor-github-actions/actions/product-pulse@main + with: + pr-number: ${{ github.event.pull_request.number }} + prompt-file: .github/product-pulse-prompt.md + default-product: 'Elementor' + cursor-api-key: ${{ secrets.CURSOR_APIKEY }} + slack-token: ${{ secrets.SLACK_TOKEN }} + slack-channel-id: ${{ secrets.SLACK_PULSE_CHANNEL_ID }} +``` + +## Inputs + +| Input | Required | Default | Description | +| ------------------ | -------- | -------------- | ------------------------------------------------------- | +| `pr-number` | yes | – | Merged PR number to generate the pulse for | +| `prompt-file` | yes | – | Path to the caller repo's product-pulse prompt markdown | +| `default-product` | no | `Elementor` | Fallback product name when the AI omits one | +| `model` | no | `composer-2.5` | Cursor Agent model used for generation | +| `cursor-api-key` | yes | – | Cursor Agent API key | +| `slack-token` | yes | – | Slack bot token with `chat:write` | +| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | diff --git a/actions/product-pulse/action.yml b/actions/product-pulse/action.yml new file mode 100644 index 0000000000..bcfe0858a3 --- /dev/null +++ b/actions/product-pulse/action.yml @@ -0,0 +1,352 @@ +name: 'Product Pulse' +description: 'Use Cursor Agent to decide if a merged PR is product-facing, and notify Slack with a user-friendly pulse update' + +inputs: + pr-number: + description: 'Pull request number to generate the pulse for' + required: true + prompt-file: + description: 'Path (relative to the checked-out caller repo) to the product-pulse prompt markdown file' + required: true + default-product: + description: 'Fallback product name used when the AI response omits one' + required: false + default: 'Elementor' + model: + description: 'Cursor Agent model to use for pulse generation' + required: false + default: 'composer-2.5' + cursor-api-key: + description: 'Cursor Agent API key' + required: true + slack-token: + description: 'Slack bot token with chat:write scope' + required: true + slack-channel-id: + description: 'Slack channel ID to post pulse notifications to' + required: true + +runs: + using: composite + steps: + - name: Get PR details + id: pr + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + PR_NUMBER="${{ inputs.pr-number }}" + + gh pr view "$PR_NUMBER" \ + --json title,body,files > /tmp/pr.json + + gh pr diff "$PR_NUMBER" > /tmp/diff.txt || echo "No diff available" + + - name: Install Cursor CLI + shell: bash + run: | + curl https://cursor.com/install -fsS | bash + echo "$HOME/.cursor/bin" >> "$GITHUB_PATH" + + - name: Generate product pulse + id: generate + shell: bash + env: + CURSOR_API_KEY: ${{ inputs.cursor-api-key }} + PROMPT_FILE: ${{ inputs.prompt-file }} + MODEL: ${{ inputs.model }} + run: | + if [ -z "$CURSOR_API_KEY" ]; then + echo "❌ Error: cursor-api-key input not configured" + exit 1 + fi + + echo "Generating product pulse..." + + PR_DATA=$(cat /tmp/pr.json | head -c 50000) + DIFF_DATA=$(head -500 /tmp/diff.txt 2>/dev/null | head -c 100000 || echo "No diff") + + { + cat "$PROMPT_FILE" + printf '\n## PR Information\n' + printf '%s' "$PR_DATA" + printf '\n\n## Diff (first 500 lines, truncated to 100KB)\n```\n' + printf '%s' "$DIFF_DATA" + printf '\n```\n' + } > /tmp/full_prompt.md + + timeout 300 cursor-agent --force --model "$MODEL" \ + --output-format=json --print "Read /tmp/full_prompt.md and follow its instructions exactly. Output ONLY the JSON object it specifies." \ + > /tmp/pulse_output.json || { + exit_code=$? + if [ $exit_code -eq 124 ]; then + echo "⚠️ Product pulse generation timed out after 5 minutes" + echo '{"skip": true, "reason": "Timeout"}' > /tmp/pulse_output.json + else + echo "❌ Product pulse generation failed with exit code: $exit_code" + exit $exit_code + fi + } + + cat /tmp/pulse_output.json + + - name: Parse pulse output + id: update + shell: bash + env: + DEFAULT_PRODUCT: ${{ inputs.default-product }} + run: | + RAW_OUTPUT=$(cat /tmp/pulse_output.json) + + RESULT_CONTENT=$(echo "$RAW_OUTPUT" | jq -r '.result // empty') + + if [ -z "$RESULT_CONTENT" ]; then + RESULT_CONTENT="$RAW_OUTPUT" + fi + + OUTPUT="" + + if echo "$RESULT_CONTENT" | jq -e 'has("title") or has("skip")' >/dev/null 2>&1; then + OUTPUT="$RESULT_CONTENT" + fi + + if [ -z "$OUTPUT" ]; then + TRIMMED=$(echo "$RESULT_CONTENT" | python3 "${{ github.action_path }}/scripts/extract-pulse-json.py" 2>/dev/null) + if [ -n "$TRIMMED" ]; then + OUTPUT="$TRIMMED" + fi + fi + + echo "Parsed output: $OUTPUT" + + if [ -z "$OUTPUT" ]; then + echo "❌ Failed to extract JSON from AI output" + echo "Raw output: $RAW_OUTPUT" + exit 1 + fi + + SKIP=$(echo "$OUTPUT" | jq -r '.skip // false') + + if [ "$SKIP" = "true" ]; then + REASON=$(echo "$OUTPUT" | jq -r '.reason // "Not product-facing"') + echo "⏭️ Skipping pulse entry: $REASON" + echo "should_notify=false" >> $GITHUB_OUTPUT + exit 0 + fi + + TITLE=$(echo "$OUTPUT" | jq -r '.title') + DESCRIPTION=$(echo "$OUTPUT" | jq -r '.description') + PRODUCT=$(echo "$OUTPUT" | jq -r --arg default "$DEFAULT_PRODUCT" '.product // $default') + TYPE=$(echo "$OUTPUT" | jq -r '.type // "feature"') + + if [ -z "$TITLE" ] || [ "$TITLE" = "null" ]; then + echo "⏭️ No title in AI response, skipping" + echo "should_notify=false" >> $GITHUB_OUTPUT + exit 0 + fi + + if [ -z "$DESCRIPTION" ] || [ "$DESCRIPTION" = "null" ]; then + echo "⏭️ No description in AI response, skipping" + echo "should_notify=false" >> $GITHUB_OUTPUT + exit 0 + fi + + case "$TYPE" in + feature|fix|improvement|internal) + ;; + *) + echo "⚠️ Invalid type '$TYPE', defaulting to feature" + TYPE="feature" + ;; + esac + + echo "✅ Generated pulse: $TITLE (product: $PRODUCT, type: $TYPE)" + + PR_BODY=$(cat /tmp/pr.json | jq -r '.body // ""') + LOOM_URL=$(echo "$PR_BODY" | grep -oE 'https://(www\.)?loom\.com/share/[a-zA-Z0-9]+' | head -1 || echo "") + if [ -n "$LOOM_URL" ]; then + echo "🎥 Found Loom video: $LOOM_URL" + echo "loom_url=$LOOM_URL" >> $GITHUB_OUTPUT + fi + + JIRA_URL=$(echo "$PR_BODY" | grep -oE 'https://elementor\.atlassian\.net/browse/[A-Z][A-Z0-9]*-[0-9]+' | head -1 || echo "") + if [ -n "$JIRA_URL" ]; then + echo "🎫 Found Jira ticket: $JIRA_URL" + echo "jira_url=$JIRA_URL" >> $GITHUB_OUTPUT + fi + + echo "should_notify=true" >> $GITHUB_OUTPUT + { + echo "title<> $GITHUB_OUTPUT + + - name: Notify Slack + if: steps.update.outputs.should_notify == 'true' + shell: bash + continue-on-error: true + env: + SLACK_TOKEN: ${{ inputs.slack-token }} + SLACK_CHANNEL_ID: ${{ inputs.slack-channel-id }} + run: | + TITLE="${{ steps.update.outputs.title }}" + DESCRIPTION="${{ steps.update.outputs.description }}" + PRODUCT="${{ steps.update.outputs.product }}" + TYPE="${{ steps.update.outputs.type }}" + LOOM_URL="${{ steps.update.outputs.loom_url }}" + JIRA_URL="${{ steps.update.outputs.jira_url }}" + PR_NUMBER="${{ inputs.pr-number }}" + PR_URL="${{ github.event.pull_request.html_url }}" + + case "$TYPE" in + fix) + HEADER_EMOJI="🐛" + HEADER_TEXT="Fixed in ${PRODUCT}" + ;; + improvement) + HEADER_EMOJI="📈" + HEADER_TEXT="Improved in ${PRODUCT}" + ;; + internal) + HEADER_EMOJI="🔧" + HEADER_TEXT="Internal Update in ${PRODUCT}" + ;; + *) + HEADER_EMOJI="✨" + HEADER_TEXT="New in ${PRODUCT}" + ;; + esac + + HEADER="${HEADER_EMOJI} ${HEADER_TEXT}" + + FOOTER="<${PR_URL}|PR #${PR_NUMBER}>" + if [ -n "$JIRA_URL" ]; then + TICKET=$(echo "$JIRA_URL" | grep -oE '[A-Z][A-Z0-9]+-[0-9]+$') + FOOTER="${FOOTER} · <${JIRA_URL}|${TICKET}>" + fi + + BLOCKS=$(jq -n \ + --arg title "$TITLE" \ + --arg description "$DESCRIPTION" \ + --arg header "$HEADER" \ + --arg footer "$FOOTER" \ + '[ + { + type: "header", + text: { + type: "plain_text", + text: $header, + emoji: true + } + }, + { + type: "section", + text: { + type: "mrkdwn", + text: ("*" + $title + "*") + } + }, + { + type: "section", + text: { + type: "mrkdwn", + text: $description + } + }, + { + type: "context", + elements: [ + { + type: "mrkdwn", + text: $footer + } + ] + } + ]') + + if [ -n "$LOOM_URL" ]; then + BLOCKS=$(echo "$BLOCKS" | jq \ + --arg loom_url "$LOOM_URL" \ + '. + [{ + type: "actions", + elements: [{ + type: "button", + text: { + type: "plain_text", + text: "🎥 Watch Demo", + emoji: true + }, + url: $loom_url, + style: "primary" + }] + }]') + fi + + PAYLOAD=$(jq -n \ + --arg channel "$SLACK_CHANNEL_ID" \ + --arg title "$TITLE" \ + --arg header "$HEADER" \ + --argjson blocks "$BLOCKS" \ + '{ + channel: $channel, + text: ($header + ": " + $title), + blocks: $blocks + }') + + HTTP_STATUS=$(curl -s -w "%{http_code}" -X POST "https://slack.com/api/chat.postMessage" \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$PAYLOAD" \ + -o /tmp/slack_response.json) + + SLACK_OK=$(jq -r '.ok' /tmp/slack_response.json 2>/dev/null) + + if [ "$HTTP_STATUS" -ge 200 ] && [ "$HTTP_STATUS" -lt 300 ] && [ "$SLACK_OK" = "true" ]; then + echo "✅ Slack notification sent" + else + echo "❌ Slack notification failed (HTTP $HTTP_STATUS, ok=$SLACK_OK)" + cat /tmp/slack_response.json + exit 1 + fi + + - name: Notify Slack on failure + if: failure() + shell: bash + env: + SLACK_TOKEN: ${{ inputs.slack-token }} + SLACK_CHANNEL_ID: ${{ inputs.slack-channel-id }} + PR_NUMBER: ${{ inputs.pr-number }} + PR_TITLE: ${{ github.event.pull_request.title }} + PR_URL: ${{ github.event.pull_request.html_url }} + RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + run: | + PAYLOAD=$(jq -n \ + --arg channel "$SLACK_CHANNEL_ID" \ + --arg pr_title "$PR_TITLE" \ + --arg pr_url "$PR_URL" \ + --arg run_url "$RUN_URL" \ + --arg pr_number "$PR_NUMBER" \ + '{ + channel: $channel, + text: ("⚠️ Product pulse generation failed for PR #" + $pr_number), + blocks: [ + { + type: "section", + text: { + type: "mrkdwn", + text: ("⚠️ *Product pulse generation failed*\n<" + $pr_url + "|#" + $pr_number + ": " + $pr_title + ">\n<" + $run_url + "|View workflow run>") + } + } + ] + }') + + curl -s -X POST "https://slack.com/api/chat.postMessage" \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$PAYLOAD" > /dev/null diff --git a/actions/product-pulse/scripts/extract-pulse-json.py b/actions/product-pulse/scripts/extract-pulse-json.py new file mode 100644 index 0000000000..4b3415f019 --- /dev/null +++ b/actions/product-pulse/scripts/extract-pulse-json.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +import json +import sys + +text = sys.stdin.read() +idx = text.find("{") +while idx != -1: + try: + obj, _ = json.JSONDecoder().raw_decode(text, idx) + if "title" in obj or "skip" in obj: + print(json.dumps(obj)) + sys.exit(0) + except json.JSONDecodeError: + pass + idx = text.find("{", idx + 1) + +sys.exit(1) From 1370d61c02ea64476bdd27818017eb59f10e71b6 Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Sun, 12 Jul 2026 16:16:52 +0300 Subject: [PATCH 2/8] fix: pass GitHub Action expressions via env to prevent script injection Move ${{ }} expressions (inputs.pr-number, github.action_path, steps.update.outputs.*, github.event.pull_request.html_url) out of inline run: script bodies and into env: blocks, addressing CodeQL code-injection findings in the product-pulse action. Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/action.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/actions/product-pulse/action.yml b/actions/product-pulse/action.yml index bcfe0858a3..5303ef7c5f 100644 --- a/actions/product-pulse/action.yml +++ b/actions/product-pulse/action.yml @@ -34,9 +34,8 @@ runs: shell: bash env: GH_TOKEN: ${{ github.token }} + PR_NUMBER: ${{ inputs.pr-number }} run: | - PR_NUMBER="${{ inputs.pr-number }}" - gh pr view "$PR_NUMBER" \ --json title,body,files > /tmp/pr.json @@ -95,6 +94,7 @@ runs: shell: bash env: DEFAULT_PRODUCT: ${{ inputs.default-product }} + ACTION_PATH: ${{ github.action_path }} run: | RAW_OUTPUT=$(cat /tmp/pulse_output.json) @@ -111,7 +111,7 @@ runs: fi if [ -z "$OUTPUT" ]; then - TRIMMED=$(echo "$RESULT_CONTENT" | python3 "${{ github.action_path }}/scripts/extract-pulse-json.py" 2>/dev/null) + TRIMMED=$(echo "$RESULT_CONTENT" | python3 "$ACTION_PATH/scripts/extract-pulse-json.py" 2>/dev/null) if [ -n "$TRIMMED" ]; then OUTPUT="$TRIMMED" fi @@ -194,16 +194,15 @@ runs: env: SLACK_TOKEN: ${{ inputs.slack-token }} SLACK_CHANNEL_ID: ${{ inputs.slack-channel-id }} + TITLE: ${{ steps.update.outputs.title }} + DESCRIPTION: ${{ steps.update.outputs.description }} + PRODUCT: ${{ steps.update.outputs.product }} + TYPE: ${{ steps.update.outputs.type }} + LOOM_URL: ${{ steps.update.outputs.loom_url }} + JIRA_URL: ${{ steps.update.outputs.jira_url }} + PR_NUMBER: ${{ inputs.pr-number }} + PR_URL: ${{ github.event.pull_request.html_url }} run: | - TITLE="${{ steps.update.outputs.title }}" - DESCRIPTION="${{ steps.update.outputs.description }}" - PRODUCT="${{ steps.update.outputs.product }}" - TYPE="${{ steps.update.outputs.type }}" - LOOM_URL="${{ steps.update.outputs.loom_url }}" - JIRA_URL="${{ steps.update.outputs.jira_url }}" - PR_NUMBER="${{ inputs.pr-number }}" - PR_URL="${{ github.event.pull_request.html_url }}" - case "$TYPE" in fix) HEADER_EMOJI="🐛" From 2ec7364effad98731f42194b9591d3d76b24409c Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Sun, 12 Jul 2026 16:51:45 +0300 Subject: [PATCH 3/8] feat: Unify product-pulse prompt into a shared template Moves the ~85% of the prompt that was byte-identical between elementor and elementor-pro (goal, decision criteria, type classification, writing style, output format, examples, edge cases) into prompt-template.md, owned by this action. Callers now only supply a small product-areas-file with the three things that genuinely differ per repo: PRODUCT_NAME, the PRODUCT_AREAS file-path mapping, and the PRODUCT_ENUM list. A new render-prompt.py substitutes these into the shared template before it's handed to Cursor Agent. Replaces the prompt-file/default-product inputs accordingly. Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/README.md | 45 +++-- actions/product-pulse/action.yml | 25 ++- actions/product-pulse/prompt-template.md | 179 ++++++++++++++++++ .../product-pulse/scripts/render-prompt.py | 37 ++++ 4 files changed, 263 insertions(+), 23 deletions(-) create mode 100644 actions/product-pulse/prompt-template.md create mode 100755 actions/product-pulse/scripts/render-prompt.py diff --git a/actions/product-pulse/README.md b/actions/product-pulse/README.md index 65181c6b61..e7f1406dfe 100644 --- a/actions/product-pulse/README.md +++ b/actions/product-pulse/README.md @@ -4,9 +4,12 @@ Uses Cursor Agent to decide whether a merged PR is product-facing, and if so, po user-friendly pulse update to Slack. Ported from the `elementor` and `elementor-pro` repos so both can share one implementation. -Each consuming repo keeps its own `product-pulse-prompt.md` (product-area mapping -differs per repo) and a thin wrapper workflow that triggers on `pull_request: closed` -and calls this action. +The full prompt (goal, decision criteria, writing style, output format, examples) lives +here in `prompt-template.md` and is shared by every caller. Each consuming repo only +keeps a small `product-areas.md` file with the three things that genuinely differ per +repo — `PRODUCT_NAME`, the `PRODUCT_AREAS` file-path mapping, and the `PRODUCT_ENUM` +list — plus a thin wrapper workflow that triggers on `pull_request: closed` and calls +this action. See `product-areas.example.md` for the expected format. ## Usage @@ -35,21 +38,35 @@ jobs: - uses: elementor/elementor-editor-github-actions/actions/product-pulse@main with: pr-number: ${{ github.event.pull_request.number }} - prompt-file: .github/product-pulse-prompt.md - default-product: 'Elementor' + product-areas-file: .github/product-pulse-areas.md cursor-api-key: ${{ secrets.CURSOR_APIKEY }} slack-token: ${{ secrets.SLACK_TOKEN }} slack-channel-id: ${{ secrets.SLACK_PULSE_CHANNEL_ID }} ``` +`.github/product-pulse-areas.md` in the caller repo: + +``` +PRODUCT_NAME: Elementor + +PRODUCT_AREAS: +- `modules/editor-one/` → **"Editor"** +- `modules/ai/` → **"Elementor AI"** +- `core/`, `includes/`, and other paths not listed above → **"Elementor"** + +PRODUCT_ENUM: "Elementor", "Editor", "Elementor AI" +``` + ## Inputs -| Input | Required | Default | Description | -| ------------------ | -------- | -------------- | ------------------------------------------------------- | -| `pr-number` | yes | – | Merged PR number to generate the pulse for | -| `prompt-file` | yes | – | Path to the caller repo's product-pulse prompt markdown | -| `default-product` | no | `Elementor` | Fallback product name when the AI omits one | -| `model` | no | `composer-2.5` | Cursor Agent model used for generation | -| `cursor-api-key` | yes | – | Cursor Agent API key | -| `slack-token` | yes | – | Slack bot token with `chat:write` | -| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | +| Input | Required | Default | Description | +| --------------------- | -------- | -------------- | -------------------------------------------------------------------------- | +| `pr-number` | yes | – | Merged PR number to generate the pulse for | +| `product-areas-file` | yes | – | Path to the caller repo's `PRODUCT_NAME`/`PRODUCT_AREAS`/`PRODUCT_ENUM` file | +| `model` | no | `composer-2.5` | Cursor Agent model used for generation | +| `cursor-api-key` | yes | – | Cursor Agent API key | +| `slack-token` | yes | – | Slack bot token with `chat:write` | +| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | + +The full generic prompt lives in this action's `prompt-template.md` and is rendered +together with the caller's `product-areas-file` before being sent to Cursor Agent. diff --git a/actions/product-pulse/action.yml b/actions/product-pulse/action.yml index 5303ef7c5f..e8116729cd 100644 --- a/actions/product-pulse/action.yml +++ b/actions/product-pulse/action.yml @@ -5,13 +5,9 @@ inputs: pr-number: description: 'Pull request number to generate the pulse for' required: true - prompt-file: - description: 'Path (relative to the checked-out caller repo) to the product-pulse prompt markdown file' + product-areas-file: + description: 'Path (relative to the checked-out caller repo) to the repo-specific product-areas markdown file (PRODUCT_NAME/PRODUCT_AREAS/PRODUCT_ENUM). Combined with this action''s shared prompt-template.md to build the full prompt.' required: true - default-product: - description: 'Fallback product name used when the AI response omits one' - required: false - default: 'Elementor' model: description: 'Cursor Agent model to use for pulse generation' required: false @@ -47,12 +43,23 @@ runs: curl https://cursor.com/install -fsS | bash echo "$HOME/.cursor/bin" >> "$GITHUB_PATH" + - name: Render prompt + shell: bash + env: + ACTION_PATH: ${{ github.action_path }} + PRODUCT_AREAS_FILE: ${{ inputs.product-areas-file }} + run: | + python3 "$ACTION_PATH/scripts/render-prompt.py" \ + "$ACTION_PATH/prompt-template.md" \ + "$PRODUCT_AREAS_FILE" \ + /tmp/rendered_prompt.md \ + /tmp/product_name.txt + - name: Generate product pulse id: generate shell: bash env: CURSOR_API_KEY: ${{ inputs.cursor-api-key }} - PROMPT_FILE: ${{ inputs.prompt-file }} MODEL: ${{ inputs.model }} run: | if [ -z "$CURSOR_API_KEY" ]; then @@ -66,7 +73,7 @@ runs: DIFF_DATA=$(head -500 /tmp/diff.txt 2>/dev/null | head -c 100000 || echo "No diff") { - cat "$PROMPT_FILE" + cat /tmp/rendered_prompt.md printf '\n## PR Information\n' printf '%s' "$PR_DATA" printf '\n\n## Diff (first 500 lines, truncated to 100KB)\n```\n' @@ -93,9 +100,9 @@ runs: id: update shell: bash env: - DEFAULT_PRODUCT: ${{ inputs.default-product }} ACTION_PATH: ${{ github.action_path }} run: | + DEFAULT_PRODUCT=$(cat /tmp/product_name.txt) RAW_OUTPUT=$(cat /tmp/pulse_output.json) RESULT_CONTENT=$(echo "$RAW_OUTPUT" | jq -r '.result // empty') diff --git a/actions/product-pulse/prompt-template.md b/actions/product-pulse/prompt-template.md new file mode 100644 index 0000000000..a88271bc04 --- /dev/null +++ b/actions/product-pulse/prompt-template.md @@ -0,0 +1,179 @@ +# Product Pulse Generator + +You are an AI that generates user-friendly product pulse updates for {{PRODUCT_NAME}}, an Elementor WordPress page-building plugin. + +## Your Goal + +Analyze a merged PR and decide if it contains product-facing changes. If yes, generate a Lovable-style pulse update. If no, skip it. + +## Decision Criteria + +### SKIP if the PR is: +- Pure refactoring with no user-visible changes +- CI/CD pipeline changes +- Dependency updates (unless it enables new features) +- Changes only to test files, configs, or internal tooling +- Documentation updates +- Has prefix `chore:`, `refactor:`, `test:`, `ci:` with no user impact +- Package-only version bumps in `packages/` with no user-facing behavior change +- License/tier bookkeeping changes with no visible upgrade prompt or feature change + +### INCLUDE if the PR is: +- New features users can interact with +- Bug fixes that users would notice +- UX improvements (performance, visual changes, better flows) +- New widgets or editor capabilities +- Changes to the editor, canvas, or frontend rendering +- New integrations (WooCommerce, forms handlers, dynamic tags, etc.) +- Changes to Elementor AI behavior or UI + +## Type Classification + +Every included PR must also be classified with a `type`: + +- `"feature"` — a brand-new capability that didn't exist before +- `"fix"` — resolves a bug or broken behavior users would have noticed +- `"improvement"` — makes an existing feature faster, smoother, or easier to use, without adding new capability +- `"internal"` — a notable change worth logging but with no direct end-user impact (e.g. new admin-only tooling) + +## Product Area Detection + +Based on which files the PR touches, determine the product area: + +{{PRODUCT_AREAS}} +- If the PR touches multiple areas, pick the primary one (where the main feature lives). +- Changes in `packages/` belong to whichever product area consumes them — check the PR context. + +## Output Format + +Output ONLY valid JSON in this exact format: + +```json +{ + "skip": false, + "type": "feature", + "product": "Widgets", + "title": "Loop Through WooCommerce Products", + "description": "You can now build dynamic product grids that automatically loop through your WooCommerce catalog. No more manually adding each product one by one." +} +``` + +Or if skipping: + +```json +{ + "skip": true, + "reason": "Internal refactoring with no user-facing changes" +} +``` + +The `product` field must be one of: {{PRODUCT_ENUM}}. + +The `type` field must be one of: `"feature"`, `"fix"`, `"improvement"`, `"internal"`. + +## Writing Style + +Follow Lovable's product update style: + +1. **Title**: Short, benefit-focused (3-6 words) + - MUST clearly hint at what the feature DOES, not just what category it's in + - Good: "Drag Widgets Between Columns", "Faster Editor Load Times", "Custom CSS Per Breakpoint" + - Bad: "Smart Widget Management" (too vague - what does it actually DO?) + - Bad: "Add nested tabs widget", "Implement collection loop transformer" + +2. **Description**: 1-2 sentences, explain WHAT and WHY it matters + - Focus on user benefits, not implementation + - Use simple, non-technical language + - Avoid jargon like "component", "service", "endpoint", "module" + - Write in present tense ("You can now...") + - Mention what problem was solved (e.g., "Previously X was limited to Y...") + +3. **Tone**: Friendly, clear, exciting but not over-hyped + +## Examples + +### Good Example (Include): +```json +{ + "skip": false, + "type": "feature", + "product": "Editor", + "title": "Drag Widgets Between Columns", + "description": "You can now drag widgets directly from one column to another in the editor. No more copy-paste or delete-and-recreate when rearranging your layout." +} +``` + +### Bad Example (Too Technical): +```json +{ + "title": "Nested Carousel Widget Renderer", + "description": "Implemented Nested_Carousel widget with responsive breakpoint support using the atomic widgets schema." +} +``` + +### Bad Example (Too Vague): +```json +{ + "title": "Smart Widget Management", + "description": "Your widgets can now be managed more efficiently in the editor." +} +``` +Why it's bad: The title doesn't tell users WHAT the feature does. + +### Good Example (Clear Action): +```json +{ + "skip": false, + "type": "feature", + "product": "Theme Builder", + "title": "Preview Templates Before Publishing", + "description": "You can now preview how a theme template looks against real content before making it live. Catch layout issues before your visitors do." +} +``` + +### Good Example (Fix): +```json +{ + "skip": false, + "type": "fix", + "product": "Widgets", + "title": "Fixed Broken Icons in Nav Menu", + "description": "Custom icons in the Nav Menu widget no longer disappear when the Inline Font Icons experiment is off." +} +``` + +### Good Example (Skip): +```json +{ + "skip": true, + "reason": "Refactored PHPUnit bootstrap - no user-facing changes" +} +``` + +## Edge Cases + +### Chore-only PR (skip): +A PR titled `chore: update Playwright config` that only touches `.github/workflows/playwright.yml` and `tests/playwright/` → skip. CI and test infrastructure changes are never product-facing. + +### Feature PR (include): +A PR that adds a brand-new user-visible widget or capability, touching paths matched in the Product Area Detection list above → include with the corresponding product. New user-visible widgets always qualify. + +### Partial `packages/` changes (evaluate carefully): +A PR that only bumps versions or updates a CHANGELOG.md under `packages/` → skip (release housekeeping). +A PR that changes behavior inside a `packages/` source directory with corresponding UI impact → include with the product area that consumes that package. Read the diff and PR body to determine whether the package change reaches users. + +## Context You'll Receive + +- PR title +- PR description/body +- List of changed files +- Diff (first 500 lines) + +Use all context to make an informed decision. If unsure, err on the side of skipping - better to miss a minor update than flood the channel with non-interesting changes. + +## Important + +- Output ONLY the JSON object, nothing else — no preamble, no explanation, no commentary +- Do NOT wrap it in markdown code blocks +- Valid JSON that can be parsed by `jq` +- Your ENTIRE response must be a single JSON object starting with `{` and ending with `}` diff --git a/actions/product-pulse/scripts/render-prompt.py b/actions/product-pulse/scripts/render-prompt.py new file mode 100755 index 0000000000..81c52a65dd --- /dev/null +++ b/actions/product-pulse/scripts/render-prompt.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 +import re +import sys + +template_path, areas_path, output_prompt_path, output_product_name_path = sys.argv[1:5] + +with open(areas_path, encoding="utf-8") as f: + areas_text = f.read() + +name_match = re.search(r"^PRODUCT_NAME:\s*(.+)$", areas_text, re.MULTILINE) +enum_match = re.search(r"^PRODUCT_ENUM:\s*(.+)$", areas_text, re.MULTILINE) +areas_match = re.search(r"^PRODUCT_AREAS:\s*\n(.*?)\n+PRODUCT_ENUM:", areas_text, re.DOTALL | re.MULTILINE) + +if not (name_match and enum_match and areas_match): + sys.exit( + f"{areas_path} must define PRODUCT_NAME, PRODUCT_AREAS, and PRODUCT_ENUM" + ) + +product_name = name_match.group(1).strip() +product_areas = areas_match.group(1).strip() +product_enum = enum_match.group(1).strip() + +with open(template_path, encoding="utf-8") as f: + rendered = f.read() + +rendered = ( + rendered + .replace("{{PRODUCT_NAME}}", product_name) + .replace("{{PRODUCT_AREAS}}", product_areas) + .replace("{{PRODUCT_ENUM}}", product_enum) +) + +with open(output_prompt_path, "w", encoding="utf-8") as f: + f.write(rendered) + +with open(output_product_name_path, "w", encoding="utf-8") as f: + f.write(product_name) From 10c5106714a0bfe585eb02a09d67817cab7a99d7 Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Mon, 13 Jul 2026 13:13:05 +0300 Subject: [PATCH 4/8] refactor: Drop product-area detection, just tag the caller's product name Per-repo file-path -> product-area mapping was more granularity than needed for a Slack pulse feed. The product field is now always the calling repo's name (e.g. "Elementor" or "Elementor Pro"), passed as a plain product-name input instead of a product-areas-file. This removes the whole Product Area Detection section from the shared prompt, drops the AI's product classification (and its validation), and lets callers drop their per-repo areas file entirely. Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/README.md | 41 ++++++------------- actions/product-pulse/action.yml | 18 ++++---- actions/product-pulse/prompt-template.md | 18 +------- .../product-pulse/scripts/render-prompt.py | 33 ++------------- 4 files changed, 25 insertions(+), 85 deletions(-) diff --git a/actions/product-pulse/README.md b/actions/product-pulse/README.md index e7f1406dfe..5c5a71854d 100644 --- a/actions/product-pulse/README.md +++ b/actions/product-pulse/README.md @@ -5,11 +5,9 @@ user-friendly pulse update to Slack. Ported from the `elementor` and `elementor- repos so both can share one implementation. The full prompt (goal, decision criteria, writing style, output format, examples) lives -here in `prompt-template.md` and is shared by every caller. Each consuming repo only -keeps a small `product-areas.md` file with the three things that genuinely differ per -repo — `PRODUCT_NAME`, the `PRODUCT_AREAS` file-path mapping, and the `PRODUCT_ENUM` -list — plus a thin wrapper workflow that triggers on `pull_request: closed` and calls -this action. See `product-areas.example.md` for the expected format. +here in `prompt-template.md` and is shared by every caller. Each consuming repo just +passes its `product-name` (e.g. `"Elementor"` or `"Elementor Pro"`) plus a thin wrapper +workflow that triggers on `pull_request: closed` and calls this action. ## Usage @@ -38,35 +36,22 @@ jobs: - uses: elementor/elementor-editor-github-actions/actions/product-pulse@main with: pr-number: ${{ github.event.pull_request.number }} - product-areas-file: .github/product-pulse-areas.md + product-name: 'Elementor' cursor-api-key: ${{ secrets.CURSOR_APIKEY }} slack-token: ${{ secrets.SLACK_TOKEN }} slack-channel-id: ${{ secrets.SLACK_PULSE_CHANNEL_ID }} ``` -`.github/product-pulse-areas.md` in the caller repo: - -``` -PRODUCT_NAME: Elementor - -PRODUCT_AREAS: -- `modules/editor-one/` → **"Editor"** -- `modules/ai/` → **"Elementor AI"** -- `core/`, `includes/`, and other paths not listed above → **"Elementor"** - -PRODUCT_ENUM: "Elementor", "Editor", "Elementor AI" -``` - ## Inputs -| Input | Required | Default | Description | -| --------------------- | -------- | -------------- | -------------------------------------------------------------------------- | -| `pr-number` | yes | – | Merged PR number to generate the pulse for | -| `product-areas-file` | yes | – | Path to the caller repo's `PRODUCT_NAME`/`PRODUCT_AREAS`/`PRODUCT_ENUM` file | -| `model` | no | `composer-2.5` | Cursor Agent model used for generation | -| `cursor-api-key` | yes | – | Cursor Agent API key | -| `slack-token` | yes | – | Slack bot token with `chat:write` | -| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | +| Input | Required | Default | Description | +| -------------------- | -------- | -------------- | ---------------------------------------------------------------- | +| `pr-number` | yes | – | Merged PR number to generate the pulse for | +| `product-name` | yes | – | Product name used in the prompt and Slack header | +| `model` | no | `composer-2.5` | Cursor Agent model used for generation | +| `cursor-api-key` | yes | – | Cursor Agent API key | +| `slack-token` | yes | – | Slack bot token with `chat:write` | +| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | The full generic prompt lives in this action's `prompt-template.md` and is rendered -together with the caller's `product-areas-file` before being sent to Cursor Agent. +with the caller's `product-name` substituted in before being sent to Cursor Agent. diff --git a/actions/product-pulse/action.yml b/actions/product-pulse/action.yml index e8116729cd..3b6fa20689 100644 --- a/actions/product-pulse/action.yml +++ b/actions/product-pulse/action.yml @@ -5,8 +5,8 @@ inputs: pr-number: description: 'Pull request number to generate the pulse for' required: true - product-areas-file: - description: 'Path (relative to the checked-out caller repo) to the repo-specific product-areas markdown file (PRODUCT_NAME/PRODUCT_AREAS/PRODUCT_ENUM). Combined with this action''s shared prompt-template.md to build the full prompt.' + product-name: + description: 'Product name to use in the prompt and Slack header (e.g. "Elementor" or "Elementor Pro")' required: true model: description: 'Cursor Agent model to use for pulse generation' @@ -47,13 +47,12 @@ runs: shell: bash env: ACTION_PATH: ${{ github.action_path }} - PRODUCT_AREAS_FILE: ${{ inputs.product-areas-file }} + PRODUCT_NAME: ${{ inputs.product-name }} run: | python3 "$ACTION_PATH/scripts/render-prompt.py" \ "$ACTION_PATH/prompt-template.md" \ - "$PRODUCT_AREAS_FILE" \ - /tmp/rendered_prompt.md \ - /tmp/product_name.txt + "$PRODUCT_NAME" \ + /tmp/rendered_prompt.md - name: Generate product pulse id: generate @@ -102,7 +101,6 @@ runs: env: ACTION_PATH: ${{ github.action_path }} run: | - DEFAULT_PRODUCT=$(cat /tmp/product_name.txt) RAW_OUTPUT=$(cat /tmp/pulse_output.json) RESULT_CONTENT=$(echo "$RAW_OUTPUT" | jq -r '.result // empty') @@ -143,7 +141,6 @@ runs: TITLE=$(echo "$OUTPUT" | jq -r '.title') DESCRIPTION=$(echo "$OUTPUT" | jq -r '.description') - PRODUCT=$(echo "$OUTPUT" | jq -r --arg default "$DEFAULT_PRODUCT" '.product // $default') TYPE=$(echo "$OUTPUT" | jq -r '.type // "feature"') if [ -z "$TITLE" ] || [ "$TITLE" = "null" ]; then @@ -167,7 +164,7 @@ runs: ;; esac - echo "✅ Generated pulse: $TITLE (product: $PRODUCT, type: $TYPE)" + echo "✅ Generated pulse: $TITLE (type: $TYPE)" PR_BODY=$(cat /tmp/pr.json | jq -r '.body // ""') LOOM_URL=$(echo "$PR_BODY" | grep -oE 'https://(www\.)?loom\.com/share/[a-zA-Z0-9]+' | head -1 || echo "") @@ -190,7 +187,6 @@ runs: echo "description<> $GITHUB_OUTPUT @@ -203,7 +199,7 @@ runs: SLACK_CHANNEL_ID: ${{ inputs.slack-channel-id }} TITLE: ${{ steps.update.outputs.title }} DESCRIPTION: ${{ steps.update.outputs.description }} - PRODUCT: ${{ steps.update.outputs.product }} + PRODUCT: ${{ inputs.product-name }} TYPE: ${{ steps.update.outputs.type }} LOOM_URL: ${{ steps.update.outputs.loom_url }} JIRA_URL: ${{ steps.update.outputs.jira_url }} diff --git a/actions/product-pulse/prompt-template.md b/actions/product-pulse/prompt-template.md index a88271bc04..64f727791d 100644 --- a/actions/product-pulse/prompt-template.md +++ b/actions/product-pulse/prompt-template.md @@ -36,14 +36,6 @@ Every included PR must also be classified with a `type`: - `"improvement"` — makes an existing feature faster, smoother, or easier to use, without adding new capability - `"internal"` — a notable change worth logging but with no direct end-user impact (e.g. new admin-only tooling) -## Product Area Detection - -Based on which files the PR touches, determine the product area: - -{{PRODUCT_AREAS}} -- If the PR touches multiple areas, pick the primary one (where the main feature lives). -- Changes in `packages/` belong to whichever product area consumes them — check the PR context. - ## Output Format Output ONLY valid JSON in this exact format: @@ -52,7 +44,6 @@ Output ONLY valid JSON in this exact format: { "skip": false, "type": "feature", - "product": "Widgets", "title": "Loop Through WooCommerce Products", "description": "You can now build dynamic product grids that automatically loop through your WooCommerce catalog. No more manually adding each product one by one." } @@ -67,8 +58,6 @@ Or if skipping: } ``` -The `product` field must be one of: {{PRODUCT_ENUM}}. - The `type` field must be one of: `"feature"`, `"fix"`, `"improvement"`, `"internal"`. ## Writing Style @@ -97,7 +86,6 @@ Follow Lovable's product update style: { "skip": false, "type": "feature", - "product": "Editor", "title": "Drag Widgets Between Columns", "description": "You can now drag widgets directly from one column to another in the editor. No more copy-paste or delete-and-recreate when rearranging your layout." } @@ -125,7 +113,6 @@ Why it's bad: The title doesn't tell users WHAT the feature does. { "skip": false, "type": "feature", - "product": "Theme Builder", "title": "Preview Templates Before Publishing", "description": "You can now preview how a theme template looks against real content before making it live. Catch layout issues before your visitors do." } @@ -136,7 +123,6 @@ Why it's bad: The title doesn't tell users WHAT the feature does. { "skip": false, "type": "fix", - "product": "Widgets", "title": "Fixed Broken Icons in Nav Menu", "description": "Custom icons in the Nav Menu widget no longer disappear when the Inline Font Icons experiment is off." } @@ -156,11 +142,11 @@ Why it's bad: The title doesn't tell users WHAT the feature does. A PR titled `chore: update Playwright config` that only touches `.github/workflows/playwright.yml` and `tests/playwright/` → skip. CI and test infrastructure changes are never product-facing. ### Feature PR (include): -A PR that adds a brand-new user-visible widget or capability, touching paths matched in the Product Area Detection list above → include with the corresponding product. New user-visible widgets always qualify. +A PR that adds a brand-new user-visible widget or capability → include. New user-visible widgets always qualify. ### Partial `packages/` changes (evaluate carefully): A PR that only bumps versions or updates a CHANGELOG.md under `packages/` → skip (release housekeeping). -A PR that changes behavior inside a `packages/` source directory with corresponding UI impact → include with the product area that consumes that package. Read the diff and PR body to determine whether the package change reaches users. +A PR that changes behavior inside a `packages/` source directory with corresponding UI impact → include. Read the diff and PR body to determine whether the package change reaches users. ## Context You'll Receive diff --git a/actions/product-pulse/scripts/render-prompt.py b/actions/product-pulse/scripts/render-prompt.py index 81c52a65dd..7ebc72c8ca 100755 --- a/actions/product-pulse/scripts/render-prompt.py +++ b/actions/product-pulse/scripts/render-prompt.py @@ -1,37 +1,10 @@ #!/usr/bin/env python3 -import re import sys -template_path, areas_path, output_prompt_path, output_product_name_path = sys.argv[1:5] - -with open(areas_path, encoding="utf-8") as f: - areas_text = f.read() - -name_match = re.search(r"^PRODUCT_NAME:\s*(.+)$", areas_text, re.MULTILINE) -enum_match = re.search(r"^PRODUCT_ENUM:\s*(.+)$", areas_text, re.MULTILINE) -areas_match = re.search(r"^PRODUCT_AREAS:\s*\n(.*?)\n+PRODUCT_ENUM:", areas_text, re.DOTALL | re.MULTILINE) - -if not (name_match and enum_match and areas_match): - sys.exit( - f"{areas_path} must define PRODUCT_NAME, PRODUCT_AREAS, and PRODUCT_ENUM" - ) - -product_name = name_match.group(1).strip() -product_areas = areas_match.group(1).strip() -product_enum = enum_match.group(1).strip() +template_path, product_name, output_path = sys.argv[1:4] with open(template_path, encoding="utf-8") as f: - rendered = f.read() - -rendered = ( - rendered - .replace("{{PRODUCT_NAME}}", product_name) - .replace("{{PRODUCT_AREAS}}", product_areas) - .replace("{{PRODUCT_ENUM}}", product_enum) -) + rendered = f.read().replace("{{PRODUCT_NAME}}", product_name) -with open(output_prompt_path, "w", encoding="utf-8") as f: +with open(output_path, "w", encoding="utf-8") as f: f.write(rendered) - -with open(output_product_name_path, "w", encoding="utf-8") as f: - f.write(product_name) From a7b270cc6c6e9bb7084c7bf06b4fc3d067f33955 Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Mon, 13 Jul 2026 14:50:31 +0300 Subject: [PATCH 5/8] feat: Add build artifact link to Slack pulse footer Adds a "Get build artifact link" step that looks up the most recent successful run of the caller repo's Build workflow (build.yml) for the PR's head SHA, resolves its uploaded artifact, and appends a "Build Artifact" link to the Slack notification footer alongside the PR # and Jira ticket links. Skips gracefully if no matching run or artifact is found. Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/action.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/actions/product-pulse/action.yml b/actions/product-pulse/action.yml index 3b6fa20689..0af9360ba0 100644 --- a/actions/product-pulse/action.yml +++ b/actions/product-pulse/action.yml @@ -37,6 +37,31 @@ runs: gh pr diff "$PR_NUMBER" > /tmp/diff.txt || echo "No diff available" + - name: Get build artifact link + id: artifact + shell: bash + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + RUN_ID=$(gh api "repos/${REPO}/actions/workflows/build.yml/runs?head_sha=${HEAD_SHA}&status=success" --jq '.workflow_runs[0].id // empty' 2>/dev/null || echo "") + + if [ -z "$RUN_ID" ]; then + echo "⚠️ No successful Build workflow run found for this PR, skipping artifact link" + exit 0 + fi + + ARTIFACT_ID=$(gh api "repos/${REPO}/actions/runs/${RUN_ID}/artifacts" --jq '.artifacts[0].id // empty' 2>/dev/null || echo "") + + if [ -z "$ARTIFACT_ID" ]; then + echo "⚠️ No build artifact found for run $RUN_ID, skipping artifact link" + exit 0 + fi + + echo "🔗 Found build artifact: https://github.com/${REPO}/actions/runs/${RUN_ID}/artifacts/${ARTIFACT_ID}" + echo "build_artifact_url=https://github.com/${REPO}/actions/runs/${RUN_ID}/artifacts/${ARTIFACT_ID}" >> $GITHUB_OUTPUT + - name: Install Cursor CLI shell: bash run: | @@ -203,6 +228,7 @@ runs: TYPE: ${{ steps.update.outputs.type }} LOOM_URL: ${{ steps.update.outputs.loom_url }} JIRA_URL: ${{ steps.update.outputs.jira_url }} + BUILD_ARTIFACT_URL: ${{ steps.artifact.outputs.build_artifact_url }} PR_NUMBER: ${{ inputs.pr-number }} PR_URL: ${{ github.event.pull_request.html_url }} run: | @@ -232,6 +258,9 @@ runs: TICKET=$(echo "$JIRA_URL" | grep -oE '[A-Z][A-Z0-9]+-[0-9]+$') FOOTER="${FOOTER} · <${JIRA_URL}|${TICKET}>" fi + if [ -n "$BUILD_ARTIFACT_URL" ]; then + FOOTER="${FOOTER} · <${BUILD_ARTIFACT_URL}|Build Artifact>" + fi BLOCKS=$(jq -n \ --arg title "$TITLE" \ From 52a9fddbf2886c81edf6a50e958aec6d68002338 Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Tue, 14 Jul 2026 13:45:24 +0300 Subject: [PATCH 6/8] docs: Fix Prettier formatting in product-pulse docs Ref: ED-24831 Co-authored-by: Cursor --- actions/product-pulse/README.md | 16 ++++++++-------- actions/product-pulse/prompt-template.md | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/actions/product-pulse/README.md b/actions/product-pulse/README.md index 5c5a71854d..fdbdf694ee 100644 --- a/actions/product-pulse/README.md +++ b/actions/product-pulse/README.md @@ -44,14 +44,14 @@ jobs: ## Inputs -| Input | Required | Default | Description | -| -------------------- | -------- | -------------- | ---------------------------------------------------------------- | -| `pr-number` | yes | – | Merged PR number to generate the pulse for | -| `product-name` | yes | – | Product name used in the prompt and Slack header | -| `model` | no | `composer-2.5` | Cursor Agent model used for generation | -| `cursor-api-key` | yes | – | Cursor Agent API key | -| `slack-token` | yes | – | Slack bot token with `chat:write` | -| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | +| Input | Required | Default | Description | +| ------------------ | -------- | -------------- | ------------------------------------------------ | +| `pr-number` | yes | – | Merged PR number to generate the pulse for | +| `product-name` | yes | – | Product name used in the prompt and Slack header | +| `model` | no | `composer-2.5` | Cursor Agent model used for generation | +| `cursor-api-key` | yes | – | Cursor Agent API key | +| `slack-token` | yes | – | Slack bot token with `chat:write` | +| `slack-channel-id` | yes | – | Slack channel ID for pulse notifications | The full generic prompt lives in this action's `prompt-template.md` and is rendered with the caller's `product-name` substituted in before being sent to Cursor Agent. diff --git a/actions/product-pulse/prompt-template.md b/actions/product-pulse/prompt-template.md index 64f727791d..9948cf2cf2 100644 --- a/actions/product-pulse/prompt-template.md +++ b/actions/product-pulse/prompt-template.md @@ -9,6 +9,7 @@ Analyze a merged PR and decide if it contains product-facing changes. If yes, ge ## Decision Criteria ### SKIP if the PR is: + - Pure refactoring with no user-visible changes - CI/CD pipeline changes - Dependency updates (unless it enables new features) @@ -19,6 +20,7 @@ Analyze a merged PR and decide if it contains product-facing changes. If yes, ge - License/tier bookkeeping changes with no visible upgrade prompt or feature change ### INCLUDE if the PR is: + - New features users can interact with - Bug fixes that users would notice - UX improvements (performance, visual changes, better flows) @@ -65,12 +67,14 @@ The `type` field must be one of: `"feature"`, `"fix"`, `"improvement"`, `"intern Follow Lovable's product update style: 1. **Title**: Short, benefit-focused (3-6 words) + - MUST clearly hint at what the feature DOES, not just what category it's in - Good: "Drag Widgets Between Columns", "Faster Editor Load Times", "Custom CSS Per Breakpoint" - Bad: "Smart Widget Management" (too vague - what does it actually DO?) - Bad: "Add nested tabs widget", "Implement collection loop transformer" 2. **Description**: 1-2 sentences, explain WHAT and WHY it matters + - Focus on user benefits, not implementation - Use simple, non-technical language - Avoid jargon like "component", "service", "endpoint", "module" @@ -82,6 +86,7 @@ Follow Lovable's product update style: ## Examples ### Good Example (Include): + ```json { "skip": false, @@ -92,6 +97,7 @@ Follow Lovable's product update style: ``` ### Bad Example (Too Technical): + ```json { "title": "Nested Carousel Widget Renderer", @@ -100,15 +106,18 @@ Follow Lovable's product update style: ``` ### Bad Example (Too Vague): + ```json { "title": "Smart Widget Management", "description": "Your widgets can now be managed more efficiently in the editor." } ``` + Why it's bad: The title doesn't tell users WHAT the feature does. ### Good Example (Clear Action): + ```json { "skip": false, @@ -119,6 +128,7 @@ Why it's bad: The title doesn't tell users WHAT the feature does. ``` ### Good Example (Fix): + ```json { "skip": false, @@ -129,6 +139,7 @@ Why it's bad: The title doesn't tell users WHAT the feature does. ``` ### Good Example (Skip): + ```json { "skip": true, @@ -139,12 +150,15 @@ Why it's bad: The title doesn't tell users WHAT the feature does. ## Edge Cases ### Chore-only PR (skip): + A PR titled `chore: update Playwright config` that only touches `.github/workflows/playwright.yml` and `tests/playwright/` → skip. CI and test infrastructure changes are never product-facing. ### Feature PR (include): + A PR that adds a brand-new user-visible widget or capability → include. New user-visible widgets always qualify. ### Partial `packages/` changes (evaluate carefully): + A PR that only bumps versions or updates a CHANGELOG.md under `packages/` → skip (release housekeeping). A PR that changes behavior inside a `packages/` source directory with corresponding UI impact → include. Read the diff and PR body to determine whether the package change reaches users. From 5c5cdf42f23e04c1e5ae0ccaaf51cb7961f3e46b Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:35:36 +0300 Subject: [PATCH 7/8] fix(setup-elementor-env): activate Elementor instead of only validating it wp-env installs the Elementor plugin but does not reliably auto-activate it, causing the Performance flow CI job to fail intermittently at the "Validating elementor being activated" step. Actively activate the plugin (idempotent) instead of just checking its state. Cherry-picked from ED-24451 (5444eeb). Co-authored-by: Cursor --- actions/setup-elementor-env/dist/index.js | 2 +- actions/setup-elementor-env/main.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/actions/setup-elementor-env/dist/index.js b/actions/setup-elementor-env/dist/index.js index 4ea98886a5..512b465282 100644 --- a/actions/setup-elementor-env/dist/index.js +++ b/actions/setup-elementor-env/dist/index.js @@ -58,7 +58,7 @@ ${A.format(t)} Error Message: ${i.message}`)})).result)===null||t===void 0?void 0:t.value;if(!n)throw new Error("Response json body do not have ID Token field");return n})}static getIDToken(A){return Eu(this,void 0,void 0,function*(){try{let t=e.getIDTokenUrl();if(A){let s=encodeURIComponent(A);t=`${t}&audience=${s}`}(0,Qu.debug)(`ID token url is ${t}`);let r=yield e.getCall(t);return(0,Qu.setSecret)(r),r}catch(t){throw new Error(`Error message: ${t.message}`)}})}};fs.OidcClient=Wc});var Xc=h(KA=>{"use strict";var Pc=KA&&KA.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})};Object.defineProperty(KA,"__esModule",{value:!0});KA.summary=KA.markdownSummary=KA.SUMMARY_DOCS_URL=KA.SUMMARY_ENV_VAR=void 0;var XN=require("os"),Zc=require("fs"),{access:zN,appendFile:KN,writeFile:$N}=Zc.promises;KA.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";KA.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";var jc=class{constructor(){this._buffer=""}filePath(){return Pc(this,void 0,void 0,function*(){if(this._filePath)return this._filePath;let A=process.env[KA.SUMMARY_ENV_VAR];if(!A)throw new Error(`Unable to find environment variable for $${KA.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`);try{yield zN(A,Zc.constants.R_OK|Zc.constants.W_OK)}catch{throw new Error(`Unable to access summary file: '${A}'. Check if the file has correct read/write permissions.`)}return this._filePath=A,this._filePath})}wrap(A,t,r={}){let s=Object.entries(r).map(([n,i])=>` ${n}="${i}"`).join("");return t?`<${A}${s}>${t}`:`<${A}${s}>`}write(A){return Pc(this,void 0,void 0,function*(){let t=!!A?.overwrite,r=yield this.filePath();return yield(t?$N:KN)(r,this._buffer,{encoding:"utf8"}),this.emptyBuffer()})}clear(){return Pc(this,void 0,void 0,function*(){return this.emptyBuffer().write({overwrite:!0})})}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){return this._buffer="",this}addRaw(A,t=!1){return this._buffer+=A,t?this.addEOL():this}addEOL(){return this.addRaw(XN.EOL)}addCodeBlock(A,t){let r=Object.assign({},t&&{lang:t}),s=this.wrap("pre",this.wrap("code",A),r);return this.addRaw(s).addEOL()}addList(A,t=!1){let r=t?"ol":"ul",s=A.map(i=>this.wrap("li",i)).join(""),n=this.wrap(r,s);return this.addRaw(n).addEOL()}addTable(A){let t=A.map(s=>{let n=s.map(i=>{if(typeof i=="string")return this.wrap("td",i);let{header:o,data:a,colspan:g,rowspan:c}=i,E=o?"th":"td",Q=Object.assign(Object.assign({},g&&{colspan:g}),c&&{rowspan:c});return this.wrap(E,a,Q)}).join("");return this.wrap("tr",n)}).join(""),r=this.wrap("table",t);return this.addRaw(r).addEOL()}addDetails(A,t){let r=this.wrap("details",this.wrap("summary",A)+t);return this.addRaw(r).addEOL()}addImage(A,t,r){let{width:s,height:n}=r||{},i=Object.assign(Object.assign({},s&&{width:s}),n&&{height:n}),o=this.wrap("img",null,Object.assign({src:A,alt:t},i));return this.addRaw(o).addEOL()}addHeading(A,t){let r=`h${t}`,s=["h1","h2","h3","h4","h5","h6"].includes(r)?r:"h1",n=this.wrap(s,A);return this.addRaw(n).addEOL()}addSeparator(){let A=this.wrap("hr",null);return this.addRaw(A).addEOL()}addBreak(){let A=this.wrap("br",null);return this.addRaw(A).addEOL()}addQuote(A,t){let r=Object.assign({},t&&{cite:t}),s=this.wrap("blockquote",A,r);return this.addRaw(s).addEOL()}addLink(A,t){let r=this.wrap("a",A,{href:t});return this.addRaw(r).addEOL()}},Bu=new jc;KA.markdownSummary=Bu;KA.summary=Bu});var hu=h($A=>{"use strict";var AF=$A&&$A.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t);var s=Object.getOwnPropertyDescriptor(A,t);(!s||("get"in s?!A.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return A[t]}}),Object.defineProperty(e,r,s)}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),eF=$A&&$A.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),tF=$A&&$A.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.prototype.hasOwnProperty.call(e,t)&&AF(A,e,t);return eF(A,e),A};Object.defineProperty($A,"__esModule",{value:!0});$A.toPlatformPath=$A.toWin32Path=$A.toPosixPath=void 0;var rF=tF(require("path"));function sF(e){return e.replace(/[\\]/g,"/")}$A.toPosixPath=sF;function nF(e){return e.replace(/[/]/g,"\\")}$A.toWin32Path=nF;function iF(e){return e.replace(/[/\\]/g,rF.sep)}$A.toPlatformPath=iF});var Kc=h(R=>{"use strict";var oF=R&&R.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return A[t]}})}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),aF=R&&R.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),lu=R&&R.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.hasOwnProperty.call(e,t)&&oF(A,e,t);return aF(A,e),A},zc=R&&R.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})},Ae;Object.defineProperty(R,"__esModule",{value:!0});R.getCmdPath=R.tryGetExecutablePath=R.isRooted=R.isDirectory=R.exists=R.READONLY=R.UV_FS_O_EXLOCK=R.IS_WINDOWS=R.unlink=R.symlink=R.stat=R.rmdir=R.rm=R.rename=R.readlink=R.readdir=R.open=R.mkdir=R.lstat=R.copyFile=R.chmod=void 0;var uu=lu(require("fs")),wo=lu(require("path"));Ae=uu.promises,R.chmod=Ae.chmod,R.copyFile=Ae.copyFile,R.lstat=Ae.lstat,R.mkdir=Ae.mkdir,R.open=Ae.open,R.readdir=Ae.readdir,R.readlink=Ae.readlink,R.rename=Ae.rename,R.rm=Ae.rm,R.rmdir=Ae.rmdir,R.stat=Ae.stat,R.symlink=Ae.symlink,R.unlink=Ae.unlink;R.IS_WINDOWS=process.platform==="win32";R.UV_FS_O_EXLOCK=268435456;R.READONLY=uu.constants.O_RDONLY;function gF(e){return zc(this,void 0,void 0,function*(){try{yield R.stat(e)}catch(A){if(A.code==="ENOENT")return!1;throw A}return!0})}R.exists=gF;function cF(e,A=!1){return zc(this,void 0,void 0,function*(){return(A?yield R.stat(e):yield R.lstat(e)).isDirectory()})}R.isDirectory=cF;function EF(e){if(e=CF(e),!e)throw new Error('isRooted() parameter "p" cannot be empty');return R.IS_WINDOWS?e.startsWith("\\")||/^[A-Z]:/i.test(e):e.startsWith("/")}R.isRooted=EF;function QF(e,A){return zc(this,void 0,void 0,function*(){let t;try{t=yield R.stat(e)}catch(s){s.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${s}`)}if(t&&t.isFile()){if(R.IS_WINDOWS){let s=wo.extname(e).toUpperCase();if(A.some(n=>n.toUpperCase()===s))return e}else if(Iu(t))return e}let r=e;for(let s of A){e=r+s,t=void 0;try{t=yield R.stat(e)}catch(n){n.code!=="ENOENT"&&console.log(`Unexpected error attempting to determine if executable file exists '${e}': ${n}`)}if(t&&t.isFile()){if(R.IS_WINDOWS){try{let n=wo.dirname(e),i=wo.basename(e).toUpperCase();for(let o of yield R.readdir(n))if(i===o.toUpperCase()){e=wo.join(n,o);break}}catch(n){console.log(`Unexpected error attempting to determine the actual case of the file '${e}': ${n}`)}return e}else if(Iu(t))return e}}return""})}R.tryGetExecutablePath=QF;function CF(e){return e=e||"",R.IS_WINDOWS?(e=e.replace(/\//g,"\\"),e.replace(/\\\\+/g,"\\")):e.replace(/\/\/+/g,"/")}function Iu(e){return(e.mode&1)>0||(e.mode&8)>0&&e.gid===process.getgid()||(e.mode&64)>0&&e.uid===process.getuid()}function BF(){var e;return(e=process.env.COMSPEC)!==null&&e!==void 0?e:"cmd.exe"}R.getCmdPath=BF});var Du=h(BA=>{"use strict";var hF=BA&&BA.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return A[t]}})}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),IF=BA&&BA.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),du=BA&&BA.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.hasOwnProperty.call(e,t)&&hF(A,e,t);return IF(A,e),A},Tt=BA&&BA.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})};Object.defineProperty(BA,"__esModule",{value:!0});BA.findInPath=BA.which=BA.mkdirP=BA.rmRF=BA.mv=BA.cp=void 0;var lF=require("assert"),At=du(require("path")),z=du(Kc());function uF(e,A,t={}){return Tt(this,void 0,void 0,function*(){let{force:r,recursive:s,copySourceDirectory:n}=fF(t),i=(yield z.exists(A))?yield z.stat(A):null;if(i&&i.isFile()&&!r)return;let o=i&&i.isDirectory()&&n?At.join(A,At.basename(e)):A;if(!(yield z.exists(e)))throw new Error(`no such file or directory: ${e}`);if((yield z.stat(e)).isDirectory())if(s)yield wu(e,o,0,r);else throw new Error(`Failed to copy. ${e} is a directory, but tried to copy without recursive flag.`);else{if(At.relative(e,o)==="")throw new Error(`'${o}' and '${e}' are the same file`);yield mu(e,o,r)}})}BA.cp=uF;function dF(e,A,t={}){return Tt(this,void 0,void 0,function*(){if(yield z.exists(A)){let r=!0;if((yield z.isDirectory(A))&&(A=At.join(A,At.basename(e)),r=yield z.exists(A)),r)if(t.force==null||t.force)yield fu(A);else throw new Error("Destination already exists")}yield $c(At.dirname(A)),yield z.rename(e,A)})}BA.mv=dF;function fu(e){return Tt(this,void 0,void 0,function*(){if(z.IS_WINDOWS&&/[*"<>|]/.test(e))throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows');try{yield z.rm(e,{force:!0,maxRetries:3,recursive:!0,retryDelay:300})}catch(A){throw new Error(`File was unable to be removed ${A}`)}})}BA.rmRF=fu;function $c(e){return Tt(this,void 0,void 0,function*(){lF.ok(e,"a path argument must be provided"),yield z.mkdir(e,{recursive:!0})})}BA.mkdirP=$c;function pu(e,A){return Tt(this,void 0,void 0,function*(){if(!e)throw new Error("parameter 'tool' is required");if(A){let r=yield pu(e,!1);if(!r)throw z.IS_WINDOWS?new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`):new Error(`Unable to locate executable file: ${e}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`);return r}let t=yield yu(e);return t&&t.length>0?t[0]:""})}BA.which=pu;function yu(e){return Tt(this,void 0,void 0,function*(){if(!e)throw new Error("parameter 'tool' is required");let A=[];if(z.IS_WINDOWS&&process.env.PATHEXT)for(let s of process.env.PATHEXT.split(At.delimiter))s&&A.push(s);if(z.isRooted(e)){let s=yield z.tryGetExecutablePath(e,A);return s?[s]:[]}if(e.includes(At.sep))return[];let t=[];if(process.env.PATH)for(let s of process.env.PATH.split(At.delimiter))s&&t.push(s);let r=[];for(let s of t){let n=yield z.tryGetExecutablePath(At.join(s,e),A);n&&r.push(n)}return r})}BA.findInPath=yu;function fF(e){let A=e.force==null?!0:e.force,t=!!e.recursive,r=e.copySourceDirectory==null?!0:!!e.copySourceDirectory;return{force:A,recursive:t,copySourceDirectory:r}}function wu(e,A,t,r){return Tt(this,void 0,void 0,function*(){if(t>=255)return;t++,yield $c(A);let s=yield z.readdir(e);for(let n of s){let i=`${e}/${n}`,o=`${A}/${n}`;(yield z.lstat(i)).isDirectory()?yield wu(i,o,t,r):yield mu(i,o,r)}yield z.chmod(A,(yield z.stat(e)).mode)})}function mu(e,A,t){return Tt(this,void 0,void 0,function*(){if((yield z.lstat(e)).isSymbolicLink()){try{yield z.lstat(A),yield z.unlink(A)}catch(s){s.code==="EPERM"&&(yield z.chmod(A,"0666"),yield z.unlink(A))}let r=yield z.readlink(e);yield z.symlink(r,A,z.IS_WINDOWS?"junction":null)}else(!(yield z.exists(A))||t)&&(yield z.copyFile(e,A))})}});var Nu=h(ee=>{"use strict";var pF=ee&&ee.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return A[t]}})}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),yF=ee&&ee.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),ps=ee&&ee.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.hasOwnProperty.call(e,t)&&pF(A,e,t);return yF(A,e),A},Ru=ee&&ee.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})};Object.defineProperty(ee,"__esModule",{value:!0});ee.argStringToArray=ee.ToolRunner=void 0;var mo=ps(require("os")),bu=ps(require("events")),wF=ps(require("child_process")),mF=ps(require("path")),DF=ps(Du()),ku=ps(Kc()),RF=require("timers"),Do=process.platform==="win32",AE=class extends bu.EventEmitter{constructor(A,t,r){if(super(),!A)throw new Error("Parameter 'toolPath' cannot be null or empty.");this.toolPath=A,this.args=t||[],this.options=r||{}}_debug(A){this.options.listeners&&this.options.listeners.debug&&this.options.listeners.debug(A)}_getCommandString(A,t){let r=this._getSpawnFileName(),s=this._getSpawnArgs(A),n=t?"":"[command]";if(Do)if(this._isCmdFile()){n+=r;for(let i of s)n+=` ${i}`}else if(A.windowsVerbatimArguments){n+=`"${r}"`;for(let i of s)n+=` ${i}`}else{n+=this._windowsQuoteCmdArg(r);for(let i of s)n+=` ${this._windowsQuoteCmdArg(i)}`}else{n+=r;for(let i of s)n+=` ${i}`}return n}_processLineBuffer(A,t,r){try{let s=t+A.toString(),n=s.indexOf(mo.EOL);for(;n>-1;){let i=s.substring(0,n);r(i),s=s.substring(n+mo.EOL.length),n=s.indexOf(mo.EOL)}return s}catch(s){return this._debug(`error processing line. Failed with error ${s}`),""}}_getSpawnFileName(){return Do&&this._isCmdFile()?process.env.COMSPEC||"cmd.exe":this.toolPath}_getSpawnArgs(A){if(Do&&this._isCmdFile()){let t=`/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`;for(let r of this.args)t+=" ",t+=A.windowsVerbatimArguments?r:this._windowsQuoteCmdArg(r);return t+='"',[t]}return this.args}_endsWith(A,t){return A.endsWith(t)}_isCmdFile(){let A=this.toolPath.toUpperCase();return this._endsWith(A,".CMD")||this._endsWith(A,".BAT")}_windowsQuoteCmdArg(A){if(!this._isCmdFile())return this._uvQuoteCmdArg(A);if(!A)return'""';let t=[" "," ","&","(",")","[","]","{","}","^","=",";","!","'","+",",","`","~","|","<",">",'"'],r=!1;for(let i of A)if(t.some(o=>o===i)){r=!0;break}if(!r)return A;let s='"',n=!0;for(let i=A.length;i>0;i--)s+=A[i-1],n&&A[i-1]==="\\"?s+="\\":A[i-1]==='"'?(n=!0,s+='"'):n=!1;return s+='"',s.split("").reverse().join("")}_uvQuoteCmdArg(A){if(!A)return'""';if(!A.includes(" ")&&!A.includes(" ")&&!A.includes('"'))return A;if(!A.includes('"')&&!A.includes("\\"))return`"${A}"`;let t='"',r=!0;for(let s=A.length;s>0;s--)t+=A[s-1],r&&A[s-1]==="\\"?t+="\\":A[s-1]==='"'?(r=!0,t+="\\"):r=!1;return t+='"',t.split("").reverse().join("")}_cloneExecOptions(A){A=A||{};let t={cwd:A.cwd||process.cwd(),env:A.env||process.env,silent:A.silent||!1,windowsVerbatimArguments:A.windowsVerbatimArguments||!1,failOnStdErr:A.failOnStdErr||!1,ignoreReturnCode:A.ignoreReturnCode||!1,delay:A.delay||1e4};return t.outStream=A.outStream||process.stdout,t.errStream=A.errStream||process.stderr,t}_getSpawnOptions(A,t){A=A||{};let r={};return r.cwd=A.cwd,r.env=A.env,r.windowsVerbatimArguments=A.windowsVerbatimArguments||this._isCmdFile(),A.windowsVerbatimArguments&&(r.argv0=`"${t}"`),r}exec(){return Ru(this,void 0,void 0,function*(){return!ku.isRooted(this.toolPath)&&(this.toolPath.includes("/")||Do&&this.toolPath.includes("\\"))&&(this.toolPath=mF.resolve(process.cwd(),this.options.cwd||process.cwd(),this.toolPath)),this.toolPath=yield DF.which(this.toolPath,!0),new Promise((A,t)=>Ru(this,void 0,void 0,function*(){this._debug(`exec tool: ${this.toolPath}`),this._debug("arguments:");for(let g of this.args)this._debug(` ${g}`);let r=this._cloneExecOptions(this.options);!r.silent&&r.outStream&&r.outStream.write(this._getCommandString(r)+mo.EOL);let s=new eE(r,this.toolPath);if(s.on("debug",g=>{this._debug(g)}),this.options.cwd&&!(yield ku.exists(this.options.cwd)))return t(new Error(`The cwd: ${this.options.cwd} does not exist!`));let n=this._getSpawnFileName(),i=wF.spawn(n,this._getSpawnArgs(r),this._getSpawnOptions(this.options,n)),o="";i.stdout&&i.stdout.on("data",g=>{this.options.listeners&&this.options.listeners.stdout&&this.options.listeners.stdout(g),!r.silent&&r.outStream&&r.outStream.write(g),o=this._processLineBuffer(g,o,c=>{this.options.listeners&&this.options.listeners.stdline&&this.options.listeners.stdline(c)})});let a="";if(i.stderr&&i.stderr.on("data",g=>{s.processStderr=!0,this.options.listeners&&this.options.listeners.stderr&&this.options.listeners.stderr(g),!r.silent&&r.errStream&&r.outStream&&(r.failOnStdErr?r.errStream:r.outStream).write(g),a=this._processLineBuffer(g,a,c=>{this.options.listeners&&this.options.listeners.errline&&this.options.listeners.errline(c)})}),i.on("error",g=>{s.processError=g.message,s.processExited=!0,s.processClosed=!0,s.CheckComplete()}),i.on("exit",g=>{s.processExitCode=g,s.processExited=!0,this._debug(`Exit code ${g} received from tool '${this.toolPath}'`),s.CheckComplete()}),i.on("close",g=>{s.processExitCode=g,s.processExited=!0,s.processClosed=!0,this._debug(`STDIO streams have closed for tool '${this.toolPath}'`),s.CheckComplete()}),s.on("done",(g,c)=>{o.length>0&&this.emit("stdline",o),a.length>0&&this.emit("errline",a),i.removeAllListeners(),g?t(g):A(c)}),this.options.input){if(!i.stdin)throw new Error("child process missing stdin");i.stdin.end(this.options.input)}}))})}};ee.ToolRunner=AE;function kF(e){let A=[],t=!1,r=!1,s="";function n(i){r&&i!=='"'&&(s+="\\"),s+=i,r=!1}for(let i=0;i0&&(A.push(s),s="");continue}n(o)}return s.length>0&&A.push(s.trim()),A}ee.argStringToArray=kF;var eE=class e extends bu.EventEmitter{constructor(A,t){if(super(),this.processClosed=!1,this.processError="",this.processExitCode=0,this.processExited=!1,this.processStderr=!1,this.delay=1e4,this.done=!1,this.timeout=null,!t)throw new Error("toolPath must not be empty");this.options=A,this.toolPath=t,A.delay&&(this.delay=A.delay)}CheckComplete(){this.done||(this.processClosed?this._setResult():this.processExited&&(this.timeout=RF.setTimeout(e.HandleTimeout,this.delay,this)))}_debug(A){this.emit("debug",A)}_setResult(){let A;this.processExited&&(this.processError?A=new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`):this.processExitCode!==0&&!this.options.ignoreReturnCode?A=new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`):this.processStderr&&this.options.failOnStdErr&&(A=new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`))),this.timeout&&(clearTimeout(this.timeout),this.timeout=null),this.done=!0,this.emit("done",A,this.processExitCode)}static HandleTimeout(A){if(!A.done){if(!A.processClosed&&A.processExited){let t=`The STDIO streams did not close within ${A.delay/1e3} seconds of the exit event from process '${A.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`;A._debug(t)}A._setResult()}}}});var tE=h(te=>{"use strict";var bF=te&&te.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t),Object.defineProperty(e,r,{enumerable:!0,get:function(){return A[t]}})}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),NF=te&&te.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),FF=te&&te.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.hasOwnProperty.call(e,t)&&bF(A,e,t);return NF(A,e),A},Uu=te&&te.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})};Object.defineProperty(te,"__esModule",{value:!0});te.getExecOutput=te.exec=void 0;var Fu=require("string_decoder"),Su=FF(Nu());function Lu(e,A,t){return Uu(this,void 0,void 0,function*(){let r=Su.argStringToArray(e);if(r.length===0)throw new Error("Parameter 'commandLine' cannot be null or empty.");let s=r[0];return A=r.slice(1).concat(A||[]),new Su.ToolRunner(s,A,t).exec()})}te.exec=Lu;function SF(e,A,t){var r,s;return Uu(this,void 0,void 0,function*(){let n="",i="",o=new Fu.StringDecoder("utf8"),a=new Fu.StringDecoder("utf8"),g=(r=t?.listeners)===null||r===void 0?void 0:r.stdout,c=(s=t?.listeners)===null||s===void 0?void 0:s.stderr,E=d=>{i+=a.write(d),c&&c(d)},Q=d=>{n+=o.write(d),g&&g(d)},B=Object.assign(Object.assign({},t?.listeners),{stdout:Q,stderr:E}),C=yield Lu(e,A,Object.assign(Object.assign({},t),{listeners:B}));return n+=o.end(),i+=a.end(),{exitCode:C,stdout:n,stderr:i}})}te.getExecOutput=SF});var Mu=h(P=>{"use strict";var UF=P&&P.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t);var s=Object.getOwnPropertyDescriptor(A,t);(!s||("get"in s?!A.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return A[t]}}),Object.defineProperty(e,r,s)}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),LF=P&&P.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),xF=P&&P.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.prototype.hasOwnProperty.call(e,t)&&UF(A,e,t);return LF(A,e),A},ko=P&&P.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})},MF=P&&P.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(P,"__esModule",{value:!0});P.getDetails=P.isLinux=P.isMacOS=P.isWindows=P.arch=P.platform=void 0;var xu=MF(require("os")),Ro=xF(tE()),vF=()=>ko(void 0,void 0,void 0,function*(){let{stdout:e}=yield Ro.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"',void 0,{silent:!0}),{stdout:A}=yield Ro.getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"',void 0,{silent:!0});return{name:A.trim(),version:e.trim()}}),YF=()=>ko(void 0,void 0,void 0,function*(){var e,A,t,r;let{stdout:s}=yield Ro.getExecOutput("sw_vers",void 0,{silent:!0}),n=(A=(e=s.match(/ProductVersion:\s*(.+)/))===null||e===void 0?void 0:e[1])!==null&&A!==void 0?A:"";return{name:(r=(t=s.match(/ProductName:\s*(.+)/))===null||t===void 0?void 0:t[1])!==null&&r!==void 0?r:"",version:n}}),TF=()=>ko(void 0,void 0,void 0,function*(){let{stdout:e}=yield Ro.getExecOutput("lsb_release",["-i","-r","-s"],{silent:!0}),[A,t]=e.trim().split(` `);return{name:A,version:t}});P.platform=xu.default.platform();P.arch=xu.default.arch();P.isWindows=P.platform==="win32";P.isMacOS=P.platform==="darwin";P.isLinux=P.platform==="linux";function JF(){return ko(this,void 0,void 0,function*(){return Object.assign(Object.assign({},yield P.isWindows?vF():P.isMacOS?YF():TF()),{platform:P.platform,arch:P.arch,isWindows:P.isWindows,isMacOS:P.isMacOS,isLinux:P.isLinux})})}P.getDetails=JF});var pn=h(D=>{"use strict";var GF=D&&D.__createBinding||(Object.create?function(e,A,t,r){r===void 0&&(r=t);var s=Object.getOwnPropertyDescriptor(A,t);(!s||("get"in s?!A.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return A[t]}}),Object.defineProperty(e,r,s)}:function(e,A,t,r){r===void 0&&(r=t),e[r]=A[t]}),VF=D&&D.__setModuleDefault||(Object.create?function(e,A){Object.defineProperty(e,"default",{enumerable:!0,value:A})}:function(e,A){e.default=A}),sE=D&&D.__importStar||function(e){if(e&&e.__esModule)return e;var A={};if(e!=null)for(var t in e)t!=="default"&&Object.prototype.hasOwnProperty.call(e,t)&&GF(A,e,t);return VF(A,e),A},vu=D&&D.__awaiter||function(e,A,t,r){function s(n){return n instanceof t?n:new t(function(i){i(n)})}return new(t||(t=Promise))(function(n,i){function o(c){try{g(r.next(c))}catch(E){i(E)}}function a(c){try{g(r.throw(c))}catch(E){i(E)}}function g(c){c.done?n(c.value):s(c.value).then(o,a)}g((r=r.apply(e,A||[])).next())})};Object.defineProperty(D,"__esModule",{value:!0});D.platform=D.toPlatformPath=D.toWin32Path=D.toPosixPath=D.markdownSummary=D.summary=D.getIDToken=D.getState=D.saveState=D.group=D.endGroup=D.startGroup=D.info=D.notice=D.warning=D.error=D.debug=D.isDebug=D.setFailed=D.setCommandEcho=D.setOutput=D.getBooleanInput=D.getMultilineInput=D.getInput=D.addPath=D.setSecret=D.exportVariable=D.ExitCode=void 0;var be=CE(),cr=IE(),ys=bn(),Yu=sE(require("os")),HF=sE(require("path")),_F=Cu(),rE;(function(e){e[e.Success=0]="Success",e[e.Failure=1]="Failure"})(rE||(D.ExitCode=rE={}));function qF(e,A){let t=(0,ys.toCommandValue)(A);if(process.env[e]=t,process.env.GITHUB_ENV||"")return(0,cr.issueFileCommand)("ENV",(0,cr.prepareKeyValueMessage)(e,A));(0,be.issueCommand)("set-env",{name:e},t)}D.exportVariable=qF;function OF(e){(0,be.issueCommand)("add-mask",{},e)}D.setSecret=OF;function WF(e){process.env.GITHUB_PATH||""?(0,cr.issueFileCommand)("PATH",e):(0,be.issueCommand)("add-path",{},e),process.env.PATH=`${e}${HF.delimiter}${process.env.PATH}`}D.addPath=WF;function nE(e,A){let t=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(A&&A.required&&!t)throw new Error(`Input required and not supplied: ${e}`);return A&&A.trimWhitespace===!1?t:t.trim()}D.getInput=nE;function PF(e,A){let t=nE(e,A).split(` `).filter(r=>r!=="");return A&&A.trimWhitespace===!1?t:t.map(r=>r.trim())}D.getMultilineInput=PF;function ZF(e,A){let t=["true","True","TRUE"],r=["false","False","FALSE"],s=nE(e,A);if(t.includes(s))return!0;if(r.includes(s))return!1;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e} -Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}D.getBooleanInput=ZF;function jF(e,A){if(process.env.GITHUB_OUTPUT||"")return(0,cr.issueFileCommand)("OUTPUT",(0,cr.prepareKeyValueMessage)(e,A));process.stdout.write(Yu.EOL),(0,be.issueCommand)("set-output",{name:e},(0,ys.toCommandValue)(A))}D.setOutput=jF;function XF(e){(0,be.issue)("echo",e?"on":"off")}D.setCommandEcho=XF;function zF(e){process.exitCode=rE.Failure,Tu(e)}D.setFailed=zF;function KF(){return process.env.RUNNER_DEBUG==="1"}D.isDebug=KF;function $F(e){(0,be.issueCommand)("debug",{},e)}D.debug=$F;function Tu(e,A={}){(0,be.issueCommand)("error",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.error=Tu;function AS(e,A={}){(0,be.issueCommand)("warning",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.warning=AS;function eS(e,A={}){(0,be.issueCommand)("notice",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.notice=eS;function tS(e){process.stdout.write(e+Yu.EOL)}D.info=tS;function Ju(e){(0,be.issue)("group",e)}D.startGroup=Ju;function Gu(){(0,be.issue)("endgroup")}D.endGroup=Gu;function rS(e,A){return vu(this,void 0,void 0,function*(){Ju(e);let t;try{t=yield A()}finally{Gu()}return t})}D.group=rS;function sS(e,A){if(process.env.GITHUB_STATE||"")return(0,cr.issueFileCommand)("STATE",(0,cr.prepareKeyValueMessage)(e,A));(0,be.issueCommand)("save-state",{name:e},(0,ys.toCommandValue)(A))}D.saveState=sS;function nS(e){return process.env[`STATE_${e}`]||""}D.getState=nS;function iS(e){return vu(this,void 0,void 0,function*(){return yield _F.OidcClient.getIDToken(e)})}D.getIDToken=iS;var oS=Xc();Object.defineProperty(D,"summary",{enumerable:!0,get:function(){return oS.summary}});var aS=Xc();Object.defineProperty(D,"markdownSummary",{enumerable:!0,get:function(){return aS.markdownSummary}});var iE=hu();Object.defineProperty(D,"toPosixPath",{enumerable:!0,get:function(){return iE.toPosixPath}});Object.defineProperty(D,"toWin32Path",{enumerable:!0,get:function(){return iE.toWin32Path}});Object.defineProperty(D,"toPlatformPath",{enumerable:!0,get:function(){return iE.toPlatformPath}});D.platform=sE(Mu())});var Je=kn(pn()),id=kn(tE());var YA={};Bd(YA,{BRAND:()=>xS,DIRTY:()=>Er,EMPTY_PATH:()=>QS,INVALID:()=>L,NEVER:()=>uU,OK:()=>vA,ParseStatus:()=>NA,Schema:()=>V,ZodAny:()=>Vt,ZodArray:()=>yt,ZodBigInt:()=>Cr,ZodBoolean:()=>Br,ZodBranded:()=>wn,ZodCatch:()=>Dr,ZodDate:()=>hr,ZodDefault:()=>mr,ZodDiscriminatedUnion:()=>Fo,ZodEffects:()=>Se,ZodEnum:()=>yr,ZodError:()=>re,ZodFirstPartyTypeKind:()=>x,ZodFunction:()=>Uo,ZodIntersection:()=>dr,ZodIssueCode:()=>l,ZodLazy:()=>fr,ZodLiteral:()=>pr,ZodMap:()=>bs,ZodNaN:()=>Fs,ZodNativeEnum:()=>wr,ZodNever:()=>Te,ZodNull:()=>lr,ZodNullable:()=>rt,ZodNumber:()=>Qr,ZodObject:()=>se,ZodOptional:()=>Ne,ZodParsedType:()=>w,ZodPipeline:()=>mn,ZodPromise:()=>Ht,ZodReadonly:()=>Rr,ZodRecord:()=>So,ZodSchema:()=>V,ZodSet:()=>Ns,ZodString:()=>Gt,ZodSymbol:()=>Rs,ZodTransformer:()=>Se,ZodTuple:()=>tt,ZodType:()=>V,ZodUndefined:()=>Ir,ZodUnion:()=>ur,ZodUnknown:()=>pt,ZodVoid:()=>ks,addIssueToContext:()=>p,any:()=>_S,array:()=>PS,bigint:()=>TS,boolean:()=>zu,coerce:()=>lU,custom:()=>Zu,date:()=>JS,datetimeRegex:()=>Wu,defaultErrorMap:()=>dt,discriminatedUnion:()=>zS,effect:()=>gU,enum:()=>iU,function:()=>rU,getErrorMap:()=>ws,getParsedType:()=>et,instanceof:()=>vS,intersection:()=>KS,isAborted:()=>bo,isAsync:()=>ms,isDirty:()=>No,isValid:()=>Jt,late:()=>MS,lazy:()=>sU,literal:()=>nU,makeIssue:()=>yn,map:()=>eU,nan:()=>YS,nativeEnum:()=>oU,never:()=>OS,null:()=>HS,nullable:()=>EU,number:()=>Xu,object:()=>ZS,objectUtil:()=>oE,oboolean:()=>IU,onumber:()=>hU,optional:()=>cU,ostring:()=>BU,pipeline:()=>CU,preprocess:()=>QU,promise:()=>aU,quotelessJson:()=>gS,record:()=>AU,set:()=>tU,setErrorMap:()=>ES,strictObject:()=>jS,string:()=>ju,symbol:()=>GS,transformer:()=>gU,tuple:()=>$S,undefined:()=>VS,union:()=>XS,unknown:()=>qS,util:()=>q,void:()=>WS});var q;(function(e){e.assertEqual=s=>{};function A(s){}e.assertIs=A;function t(s){throw new Error}e.assertNever=t,e.arrayToEnum=s=>{let n={};for(let i of s)n[i]=i;return n},e.getValidEnumValues=s=>{let n=e.objectKeys(s).filter(o=>typeof s[s[o]]!="number"),i={};for(let o of n)i[o]=s[o];return e.objectValues(i)},e.objectValues=s=>e.objectKeys(s).map(function(n){return s[n]}),e.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let n=[];for(let i in s)Object.prototype.hasOwnProperty.call(s,i)&&n.push(i);return n},e.find=(s,n)=>{for(let i of s)if(n(i))return i},e.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,n=" | "){return s.map(i=>typeof i=="string"?`'${i}'`:i).join(n)}e.joinValues=r,e.jsonStringifyReplacer=(s,n)=>typeof n=="bigint"?n.toString():n})(q||(q={}));var oE;(function(e){e.mergeShapes=(A,t)=>({...A,...t})})(oE||(oE={}));var w=q.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),et=e=>{switch(typeof e){case"undefined":return w.undefined;case"string":return w.string;case"number":return Number.isNaN(e)?w.nan:w.number;case"boolean":return w.boolean;case"function":return w.function;case"bigint":return w.bigint;case"symbol":return w.symbol;case"object":return Array.isArray(e)?w.array:e===null?w.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?w.promise:typeof Map<"u"&&e instanceof Map?w.map:typeof Set<"u"&&e instanceof Set?w.set:typeof Date<"u"&&e instanceof Date?w.date:w.object;default:return w.unknown}};var l=q.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),gS=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),re=class e extends Error{get errors(){return this.issues}constructor(A){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=A}format(A){let t=A||function(n){return n.message},r={_errors:[]},s=n=>{for(let i of n.issues)if(i.code==="invalid_union")i.unionErrors.map(s);else if(i.code==="invalid_return_type")s(i.returnTypeError);else if(i.code==="invalid_arguments")s(i.argumentsError);else if(i.path.length===0)r._errors.push(t(i));else{let o=r,a=0;for(;at.message){let t={},r=[];for(let s of this.issues)s.path.length>0?(t[s.path[0]]=t[s.path[0]]||[],t[s.path[0]].push(A(s))):r.push(A(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}};re.create=e=>new re(e);var cS=(e,A)=>{let t;switch(e.code){case l.invalid_type:e.received===w.undefined?t="Required":t=`Expected ${e.expected}, received ${e.received}`;break;case l.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(e.expected,q.jsonStringifyReplacer)}`;break;case l.unrecognized_keys:t=`Unrecognized key(s) in object: ${q.joinValues(e.keys,", ")}`;break;case l.invalid_union:t="Invalid input";break;case l.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${q.joinValues(e.options)}`;break;case l.invalid_enum_value:t=`Invalid enum value. Expected ${q.joinValues(e.options)}, received '${e.received}'`;break;case l.invalid_arguments:t="Invalid function arguments";break;case l.invalid_return_type:t="Invalid function return type";break;case l.invalid_date:t="Invalid date";break;case l.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(t=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?t=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?t=`Invalid input: must end with "${e.validation.endsWith}"`:q.assertNever(e.validation):e.validation!=="regex"?t=`Invalid ${e.validation}`:t="Invalid";break;case l.too_small:e.type==="array"?t=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?t=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?t=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?t=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:t="Invalid input";break;case l.too_big:e.type==="array"?t=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?t=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?t=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?t=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?t=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:t="Invalid input";break;case l.custom:t="Invalid input";break;case l.invalid_intersection_types:t="Intersection results could not be merged";break;case l.not_multiple_of:t=`Number must be a multiple of ${e.multipleOf}`;break;case l.not_finite:t="Number must be finite";break;default:t=A.defaultError,q.assertNever(e)}return{message:t}},dt=cS;var Vu=dt;function ES(e){Vu=e}function ws(){return Vu}var yn=e=>{let{data:A,path:t,errorMaps:r,issueData:s}=e,n=[...t,...s.path||[]],i={...s,path:n};if(s.message!==void 0)return{...s,path:n,message:s.message};let o="",a=r.filter(g=>!!g).slice().reverse();for(let g of a)o=g(i,{data:A,defaultError:o}).message;return{...s,path:n,message:o}},QS=[];function p(e,A){let t=ws(),r=yn({issueData:A,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,t,t===dt?void 0:dt].filter(s=>!!s)});e.common.issues.push(r)}var NA=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(A,t){let r=[];for(let s of t){if(s.status==="aborted")return L;s.status==="dirty"&&A.dirty(),r.push(s.value)}return{status:A.value,value:r}}static async mergeObjectAsync(A,t){let r=[];for(let s of t){let n=await s.key,i=await s.value;r.push({key:n,value:i})}return e.mergeObjectSync(A,r)}static mergeObjectSync(A,t){let r={};for(let s of t){let{key:n,value:i}=s;if(n.status==="aborted"||i.status==="aborted")return L;n.status==="dirty"&&A.dirty(),i.status==="dirty"&&A.dirty(),n.value!=="__proto__"&&(typeof i.value<"u"||s.alwaysSet)&&(r[n.value]=i.value)}return{status:A.value,value:r}}},L=Object.freeze({status:"aborted"}),Er=e=>({status:"dirty",value:e}),vA=e=>({status:"valid",value:e}),bo=e=>e.status==="aborted",No=e=>e.status==="dirty",Jt=e=>e.status==="valid",ms=e=>typeof Promise<"u"&&e instanceof Promise;var k;(function(e){e.errToObj=A=>typeof A=="string"?{message:A}:A||{},e.toString=A=>typeof A=="string"?A:A?.message})(k||(k={}));var Fe=class{constructor(A,t,r,s){this._cachedPath=[],this.parent=A,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Hu=(e,A)=>{if(Jt(A))return{success:!0,data:A.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new re(e.common.issues);return this._error=t,this._error}}};function T(e){if(!e)return{};let{errorMap:A,invalid_type_error:t,required_error:r,description:s}=e;if(A&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return A?{errorMap:A,description:s}:{errorMap:(i,o)=>{let{message:a}=e;return i.code==="invalid_enum_value"?{message:a??o.defaultError}:typeof o.data>"u"?{message:a??r??o.defaultError}:i.code!=="invalid_type"?{message:o.defaultError}:{message:a??t??o.defaultError}},description:s}}var V=class{get description(){return this._def.description}_getType(A){return et(A.data)}_getOrReturnCtx(A,t){return t||{common:A.parent.common,data:A.data,parsedType:et(A.data),schemaErrorMap:this._def.errorMap,path:A.path,parent:A.parent}}_processInputParams(A){return{status:new NA,ctx:{common:A.parent.common,data:A.data,parsedType:et(A.data),schemaErrorMap:this._def.errorMap,path:A.path,parent:A.parent}}}_parseSync(A){let t=this._parse(A);if(ms(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(A){let t=this._parse(A);return Promise.resolve(t)}parse(A,t){let r=this.safeParse(A,t);if(r.success)return r.data;throw r.error}safeParse(A,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)},s=this._parseSync({data:A,path:r.path,parent:r});return Hu(r,s)}"~validate"(A){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)};if(!this["~standard"].async)try{let r=this._parseSync({data:A,path:[],parent:t});return Jt(r)?{value:r.value}:{issues:t.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:A,path:[],parent:t}).then(r=>Jt(r)?{value:r.value}:{issues:t.common.issues})}async parseAsync(A,t){let r=await this.safeParseAsync(A,t);if(r.success)return r.data;throw r.error}async safeParseAsync(A,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)},s=this._parse({data:A,path:r.path,parent:r}),n=await(ms(s)?s:Promise.resolve(s));return Hu(r,n)}refine(A,t){let r=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,n)=>{let i=A(s),o=()=>n.addIssue({code:l.custom,...r(s)});return typeof Promise<"u"&&i instanceof Promise?i.then(a=>a?!0:(o(),!1)):i?!0:(o(),!1)})}refinement(A,t){return this._refinement((r,s)=>A(r)?!0:(s.addIssue(typeof t=="function"?t(r,s):t),!1))}_refinement(A){return new Se({schema:this,typeName:x.ZodEffects,effect:{type:"refinement",refinement:A}})}superRefine(A){return this._refinement(A)}constructor(A){this.spa=this.safeParseAsync,this._def=A,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ne.create(this,this._def)}nullable(){return rt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return yt.create(this)}promise(){return Ht.create(this,this._def)}or(A){return ur.create([this,A],this._def)}and(A){return dr.create(this,A,this._def)}transform(A){return new Se({...T(this._def),schema:this,typeName:x.ZodEffects,effect:{type:"transform",transform:A}})}default(A){let t=typeof A=="function"?A:()=>A;return new mr({...T(this._def),innerType:this,defaultValue:t,typeName:x.ZodDefault})}brand(){return new wn({typeName:x.ZodBranded,type:this,...T(this._def)})}catch(A){let t=typeof A=="function"?A:()=>A;return new Dr({...T(this._def),innerType:this,catchValue:t,typeName:x.ZodCatch})}describe(A){let t=this.constructor;return new t({...this._def,description:A})}pipe(A){return mn.create(this,A)}readonly(){return Rr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},CS=/^c[^\s-]{8,}$/i,BS=/^[0-9a-z]+$/,hS=/^[0-9A-HJKMNP-TV-Z]{26}$/i,IS=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,lS=/^[a-z0-9_-]{21}$/i,uS=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,dS=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,fS=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,pS="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",aE,yS=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,wS=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,mS=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,DS=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,RS=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,kS=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,qu="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",bS=new RegExp(`^${qu}$`);function Ou(e){let A="[0-5]\\d";e.precision?A=`${A}\\.\\d{${e.precision}}`:e.precision==null&&(A=`${A}(\\.\\d+)?`);let t=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${A})${t}`}function NS(e){return new RegExp(`^${Ou(e)}$`)}function Wu(e){let A=`${qu}T${Ou(e)}`,t=[];return t.push(e.local?"Z?":"Z"),e.offset&&t.push("([+-]\\d{2}:?\\d{2})"),A=`${A}(${t.join("|")})`,new RegExp(`^${A}$`)}function FS(e,A){return!!((A==="v4"||!A)&&yS.test(e)||(A==="v6"||!A)&&mS.test(e))}function SS(e,A){if(!uS.test(e))return!1;try{let[t]=e.split("."),r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||A&&s.alg!==A)}catch{return!1}}function US(e,A){return!!((A==="v4"||!A)&&wS.test(e)||(A==="v6"||!A)&&DS.test(e))}var Gt=class e extends V{_parse(A){if(this._def.coerce&&(A.data=String(A.data)),this._getType(A)!==w.string){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.string,received:n.parsedType}),L}let r=new NA,s;for(let n of this._def.checks)if(n.kind==="min")A.data.lengthn.value&&(s=this._getOrReturnCtx(A,s),p(s,{code:l.too_big,maximum:n.value,type:"string",inclusive:!0,exact:!1,message:n.message}),r.dirty());else if(n.kind==="length"){let i=A.data.length>n.value,o=A.data.lengthA.test(s),{validation:t,code:l.invalid_string,...k.errToObj(r)})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}email(A){return this._addCheck({kind:"email",...k.errToObj(A)})}url(A){return this._addCheck({kind:"url",...k.errToObj(A)})}emoji(A){return this._addCheck({kind:"emoji",...k.errToObj(A)})}uuid(A){return this._addCheck({kind:"uuid",...k.errToObj(A)})}nanoid(A){return this._addCheck({kind:"nanoid",...k.errToObj(A)})}cuid(A){return this._addCheck({kind:"cuid",...k.errToObj(A)})}cuid2(A){return this._addCheck({kind:"cuid2",...k.errToObj(A)})}ulid(A){return this._addCheck({kind:"ulid",...k.errToObj(A)})}base64(A){return this._addCheck({kind:"base64",...k.errToObj(A)})}base64url(A){return this._addCheck({kind:"base64url",...k.errToObj(A)})}jwt(A){return this._addCheck({kind:"jwt",...k.errToObj(A)})}ip(A){return this._addCheck({kind:"ip",...k.errToObj(A)})}cidr(A){return this._addCheck({kind:"cidr",...k.errToObj(A)})}datetime(A){return typeof A=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:A}):this._addCheck({kind:"datetime",precision:typeof A?.precision>"u"?null:A?.precision,offset:A?.offset??!1,local:A?.local??!1,...k.errToObj(A?.message)})}date(A){return this._addCheck({kind:"date",message:A})}time(A){return typeof A=="string"?this._addCheck({kind:"time",precision:null,message:A}):this._addCheck({kind:"time",precision:typeof A?.precision>"u"?null:A?.precision,...k.errToObj(A?.message)})}duration(A){return this._addCheck({kind:"duration",...k.errToObj(A)})}regex(A,t){return this._addCheck({kind:"regex",regex:A,...k.errToObj(t)})}includes(A,t){return this._addCheck({kind:"includes",value:A,position:t?.position,...k.errToObj(t?.message)})}startsWith(A,t){return this._addCheck({kind:"startsWith",value:A,...k.errToObj(t)})}endsWith(A,t){return this._addCheck({kind:"endsWith",value:A,...k.errToObj(t)})}min(A,t){return this._addCheck({kind:"min",value:A,...k.errToObj(t)})}max(A,t){return this._addCheck({kind:"max",value:A,...k.errToObj(t)})}length(A,t){return this._addCheck({kind:"length",value:A,...k.errToObj(t)})}nonempty(A){return this.min(1,k.errToObj(A))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(A=>A.kind==="datetime")}get isDate(){return!!this._def.checks.find(A=>A.kind==="date")}get isTime(){return!!this._def.checks.find(A=>A.kind==="time")}get isDuration(){return!!this._def.checks.find(A=>A.kind==="duration")}get isEmail(){return!!this._def.checks.find(A=>A.kind==="email")}get isURL(){return!!this._def.checks.find(A=>A.kind==="url")}get isEmoji(){return!!this._def.checks.find(A=>A.kind==="emoji")}get isUUID(){return!!this._def.checks.find(A=>A.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(A=>A.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(A=>A.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(A=>A.kind==="cuid2")}get isULID(){return!!this._def.checks.find(A=>A.kind==="ulid")}get isIP(){return!!this._def.checks.find(A=>A.kind==="ip")}get isCIDR(){return!!this._def.checks.find(A=>A.kind==="cidr")}get isBase64(){return!!this._def.checks.find(A=>A.kind==="base64")}get isBase64url(){return!!this._def.checks.find(A=>A.kind==="base64url")}get minLength(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxLength(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew Gt({checks:[],typeName:x.ZodString,coerce:e?.coerce??!1,...T(e)});function LS(e,A){let t=(e.toString().split(".")[1]||"").length,r=(A.toString().split(".")[1]||"").length,s=t>r?t:r,n=Number.parseInt(e.toFixed(s).replace(".","")),i=Number.parseInt(A.toFixed(s).replace(".",""));return n%i/10**s}var Qr=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(A){if(this._def.coerce&&(A.data=Number(A.data)),this._getType(A)!==w.number){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.number,received:n.parsedType}),L}let r,s=new NA;for(let n of this._def.checks)n.kind==="int"?q.isInteger(A.data)||(r=this._getOrReturnCtx(A,r),p(r,{code:l.invalid_type,expected:"integer",received:"float",message:n.message}),s.dirty()):n.kind==="min"?(n.inclusive?A.datan.value:A.data>=n.value)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.too_big,maximum:n.value,type:"number",inclusive:n.inclusive,exact:!1,message:n.message}),s.dirty()):n.kind==="multipleOf"?LS(A.data,n.value)!==0&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_multiple_of,multipleOf:n.value,message:n.message}),s.dirty()):n.kind==="finite"?Number.isFinite(A.data)||(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_finite,message:n.message}),s.dirty()):q.assertNever(n);return{status:s.value,value:A.data}}gte(A,t){return this.setLimit("min",A,!0,k.toString(t))}gt(A,t){return this.setLimit("min",A,!1,k.toString(t))}lte(A,t){return this.setLimit("max",A,!0,k.toString(t))}lt(A,t){return this.setLimit("max",A,!1,k.toString(t))}setLimit(A,t,r,s){return new e({...this._def,checks:[...this._def.checks,{kind:A,value:t,inclusive:r,message:k.toString(s)}]})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}int(A){return this._addCheck({kind:"int",message:k.toString(A)})}positive(A){return this._addCheck({kind:"min",value:0,inclusive:!1,message:k.toString(A)})}negative(A){return this._addCheck({kind:"max",value:0,inclusive:!1,message:k.toString(A)})}nonpositive(A){return this._addCheck({kind:"max",value:0,inclusive:!0,message:k.toString(A)})}nonnegative(A){return this._addCheck({kind:"min",value:0,inclusive:!0,message:k.toString(A)})}multipleOf(A,t){return this._addCheck({kind:"multipleOf",value:A,message:k.toString(t)})}finite(A){return this._addCheck({kind:"finite",message:k.toString(A)})}safe(A){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:k.toString(A)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:k.toString(A)})}get minValue(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxValue(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valueA.kind==="int"||A.kind==="multipleOf"&&q.isInteger(A.value))}get isFinite(){let A=null,t=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(A===null||r.valuenew Qr({checks:[],typeName:x.ZodNumber,coerce:e?.coerce||!1,...T(e)});var Cr=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(A){if(this._def.coerce)try{A.data=BigInt(A.data)}catch{return this._getInvalidInput(A)}if(this._getType(A)!==w.bigint)return this._getInvalidInput(A);let r,s=new NA;for(let n of this._def.checks)n.kind==="min"?(n.inclusive?A.datan.value:A.data>=n.value)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.too_big,type:"bigint",maximum:n.value,inclusive:n.inclusive,message:n.message}),s.dirty()):n.kind==="multipleOf"?A.data%n.value!==BigInt(0)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_multiple_of,multipleOf:n.value,message:n.message}),s.dirty()):q.assertNever(n);return{status:s.value,value:A.data}}_getInvalidInput(A){let t=this._getOrReturnCtx(A);return p(t,{code:l.invalid_type,expected:w.bigint,received:t.parsedType}),L}gte(A,t){return this.setLimit("min",A,!0,k.toString(t))}gt(A,t){return this.setLimit("min",A,!1,k.toString(t))}lte(A,t){return this.setLimit("max",A,!0,k.toString(t))}lt(A,t){return this.setLimit("max",A,!1,k.toString(t))}setLimit(A,t,r,s){return new e({...this._def,checks:[...this._def.checks,{kind:A,value:t,inclusive:r,message:k.toString(s)}]})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}positive(A){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:k.toString(A)})}negative(A){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:k.toString(A)})}nonpositive(A){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:k.toString(A)})}nonnegative(A){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:k.toString(A)})}multipleOf(A,t){return this._addCheck({kind:"multipleOf",value:A,message:k.toString(t)})}get minValue(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxValue(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew Cr({checks:[],typeName:x.ZodBigInt,coerce:e?.coerce??!1,...T(e)});var Br=class extends V{_parse(A){if(this._def.coerce&&(A.data=!!A.data),this._getType(A)!==w.boolean){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.boolean,received:r.parsedType}),L}return vA(A.data)}};Br.create=e=>new Br({typeName:x.ZodBoolean,coerce:e?.coerce||!1,...T(e)});var hr=class e extends V{_parse(A){if(this._def.coerce&&(A.data=new Date(A.data)),this._getType(A)!==w.date){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.date,received:n.parsedType}),L}if(Number.isNaN(A.data.getTime())){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_date}),L}let r=new NA,s;for(let n of this._def.checks)n.kind==="min"?A.data.getTime()n.value&&(s=this._getOrReturnCtx(A,s),p(s,{code:l.too_big,message:n.message,inclusive:!0,exact:!1,maximum:n.value,type:"date"}),r.dirty()):q.assertNever(n);return{status:r.value,value:new Date(A.data.getTime())}}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}min(A,t){return this._addCheck({kind:"min",value:A.getTime(),message:k.toString(t)})}max(A,t){return this._addCheck({kind:"max",value:A.getTime(),message:k.toString(t)})}get minDate(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A!=null?new Date(A):null}get maxDate(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew hr({checks:[],coerce:e?.coerce||!1,typeName:x.ZodDate,...T(e)});var Rs=class extends V{_parse(A){if(this._getType(A)!==w.symbol){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.symbol,received:r.parsedType}),L}return vA(A.data)}};Rs.create=e=>new Rs({typeName:x.ZodSymbol,...T(e)});var Ir=class extends V{_parse(A){if(this._getType(A)!==w.undefined){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.undefined,received:r.parsedType}),L}return vA(A.data)}};Ir.create=e=>new Ir({typeName:x.ZodUndefined,...T(e)});var lr=class extends V{_parse(A){if(this._getType(A)!==w.null){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.null,received:r.parsedType}),L}return vA(A.data)}};lr.create=e=>new lr({typeName:x.ZodNull,...T(e)});var Vt=class extends V{constructor(){super(...arguments),this._any=!0}_parse(A){return vA(A.data)}};Vt.create=e=>new Vt({typeName:x.ZodAny,...T(e)});var pt=class extends V{constructor(){super(...arguments),this._unknown=!0}_parse(A){return vA(A.data)}};pt.create=e=>new pt({typeName:x.ZodUnknown,...T(e)});var Te=class extends V{_parse(A){let t=this._getOrReturnCtx(A);return p(t,{code:l.invalid_type,expected:w.never,received:t.parsedType}),L}};Te.create=e=>new Te({typeName:x.ZodNever,...T(e)});var ks=class extends V{_parse(A){if(this._getType(A)!==w.undefined){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.void,received:r.parsedType}),L}return vA(A.data)}};ks.create=e=>new ks({typeName:x.ZodVoid,...T(e)});var yt=class e extends V{_parse(A){let{ctx:t,status:r}=this._processInputParams(A),s=this._def;if(t.parsedType!==w.array)return p(t,{code:l.invalid_type,expected:w.array,received:t.parsedType}),L;if(s.exactLength!==null){let i=t.data.length>s.exactLength.value,o=t.data.lengths.maxLength.value&&(p(t,{code:l.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((i,o)=>s.type._parseAsync(new Fe(t,i,t.path,o)))).then(i=>NA.mergeArray(r,i));let n=[...t.data].map((i,o)=>s.type._parseSync(new Fe(t,i,t.path,o)));return NA.mergeArray(r,n)}get element(){return this._def.type}min(A,t){return new e({...this._def,minLength:{value:A,message:k.toString(t)}})}max(A,t){return new e({...this._def,maxLength:{value:A,message:k.toString(t)}})}length(A,t){return new e({...this._def,exactLength:{value:A,message:k.toString(t)}})}nonempty(A){return this.min(1,A)}};yt.create=(e,A)=>new yt({type:e,minLength:null,maxLength:null,exactLength:null,typeName:x.ZodArray,...T(A)});function Ds(e){if(e instanceof se){let A={};for(let t in e.shape){let r=e.shape[t];A[t]=Ne.create(Ds(r))}return new se({...e._def,shape:()=>A})}else return e instanceof yt?new yt({...e._def,type:Ds(e.element)}):e instanceof Ne?Ne.create(Ds(e.unwrap())):e instanceof rt?rt.create(Ds(e.unwrap())):e instanceof tt?tt.create(e.items.map(A=>Ds(A))):e}var se=class e extends V{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let A=this._def.shape(),t=q.objectKeys(A);return this._cached={shape:A,keys:t},this._cached}_parse(A){if(this._getType(A)!==w.object){let g=this._getOrReturnCtx(A);return p(g,{code:l.invalid_type,expected:w.object,received:g.parsedType}),L}let{status:r,ctx:s}=this._processInputParams(A),{shape:n,keys:i}=this._getCached(),o=[];if(!(this._def.catchall instanceof Te&&this._def.unknownKeys==="strip"))for(let g in s.data)i.includes(g)||o.push(g);let a=[];for(let g of i){let c=n[g],E=s.data[g];a.push({key:{status:"valid",value:g},value:c._parse(new Fe(s,E,s.path,g)),alwaysSet:g in s.data})}if(this._def.catchall instanceof Te){let g=this._def.unknownKeys;if(g==="passthrough")for(let c of o)a.push({key:{status:"valid",value:c},value:{status:"valid",value:s.data[c]}});else if(g==="strict")o.length>0&&(p(s,{code:l.unrecognized_keys,keys:o}),r.dirty());else if(g!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let g=this._def.catchall;for(let c of o){let E=s.data[c];a.push({key:{status:"valid",value:c},value:g._parse(new Fe(s,E,s.path,c)),alwaysSet:c in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let g=[];for(let c of a){let E=await c.key,Q=await c.value;g.push({key:E,value:Q,alwaysSet:c.alwaysSet})}return g}).then(g=>NA.mergeObjectSync(r,g)):NA.mergeObjectSync(r,a)}get shape(){return this._def.shape()}strict(A){return k.errToObj,new e({...this._def,unknownKeys:"strict",...A!==void 0?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return t.code==="unrecognized_keys"?{message:k.errToObj(A).message??s}:{message:s}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(A){return new e({...this._def,shape:()=>({...this._def.shape(),...A})})}merge(A){return new e({unknownKeys:A._def.unknownKeys,catchall:A._def.catchall,shape:()=>({...this._def.shape(),...A._def.shape()}),typeName:x.ZodObject})}setKey(A,t){return this.augment({[A]:t})}catchall(A){return new e({...this._def,catchall:A})}pick(A){let t={};for(let r of q.objectKeys(A))A[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new e({...this._def,shape:()=>t})}omit(A){let t={};for(let r of q.objectKeys(this.shape))A[r]||(t[r]=this.shape[r]);return new e({...this._def,shape:()=>t})}deepPartial(){return Ds(this)}partial(A){let t={};for(let r of q.objectKeys(this.shape)){let s=this.shape[r];A&&!A[r]?t[r]=s:t[r]=s.optional()}return new e({...this._def,shape:()=>t})}required(A){let t={};for(let r of q.objectKeys(this.shape))if(A&&!A[r])t[r]=this.shape[r];else{let n=this.shape[r];for(;n instanceof Ne;)n=n._def.innerType;t[r]=n}return new e({...this._def,shape:()=>t})}keyof(){return Pu(q.objectKeys(this.shape))}};se.create=(e,A)=>new se({shape:()=>e,unknownKeys:"strip",catchall:Te.create(),typeName:x.ZodObject,...T(A)});se.strictCreate=(e,A)=>new se({shape:()=>e,unknownKeys:"strict",catchall:Te.create(),typeName:x.ZodObject,...T(A)});se.lazycreate=(e,A)=>new se({shape:e,unknownKeys:"strip",catchall:Te.create(),typeName:x.ZodObject,...T(A)});var ur=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=this._def.options;function s(n){for(let o of n)if(o.result.status==="valid")return o.result;for(let o of n)if(o.result.status==="dirty")return t.common.issues.push(...o.ctx.common.issues),o.result;let i=n.map(o=>new re(o.ctx.common.issues));return p(t,{code:l.invalid_union,unionErrors:i}),L}if(t.common.async)return Promise.all(r.map(async n=>{let i={...t,common:{...t.common,issues:[]},parent:null};return{result:await n._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(s);{let n,i=[];for(let a of r){let g={...t,common:{...t.common,issues:[]},parent:null},c=a._parseSync({data:t.data,path:t.path,parent:g});if(c.status==="valid")return c;c.status==="dirty"&&!n&&(n={result:c,ctx:g}),g.common.issues.length&&i.push(g.common.issues)}if(n)return t.common.issues.push(...n.ctx.common.issues),n.result;let o=i.map(a=>new re(a));return p(t,{code:l.invalid_union,unionErrors:o}),L}}get options(){return this._def.options}};ur.create=(e,A)=>new ur({options:e,typeName:x.ZodUnion,...T(A)});var ft=e=>e instanceof fr?ft(e.schema):e instanceof Se?ft(e.innerType()):e instanceof pr?[e.value]:e instanceof yr?e.options:e instanceof wr?q.objectValues(e.enum):e instanceof mr?ft(e._def.innerType):e instanceof Ir?[void 0]:e instanceof lr?[null]:e instanceof Ne?[void 0,...ft(e.unwrap())]:e instanceof rt?[null,...ft(e.unwrap())]:e instanceof wn||e instanceof Rr?ft(e.unwrap()):e instanceof Dr?ft(e._def.innerType):[],Fo=class e extends V{_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.object)return p(t,{code:l.invalid_type,expected:w.object,received:t.parsedType}),L;let r=this.discriminator,s=t.data[r],n=this.optionsMap.get(s);return n?t.common.async?n._parseAsync({data:t.data,path:t.path,parent:t}):n._parseSync({data:t.data,path:t.path,parent:t}):(p(t,{code:l.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),L)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(A,t,r){let s=new Map;for(let n of t){let i=ft(n.shape[A]);if(!i.length)throw new Error(`A discriminator value for key \`${A}\` could not be extracted from all schema options`);for(let o of i){if(s.has(o))throw new Error(`Discriminator property ${String(A)} has duplicate value ${String(o)}`);s.set(o,n)}}return new e({typeName:x.ZodDiscriminatedUnion,discriminator:A,options:t,optionsMap:s,...T(r)})}};function gE(e,A){let t=et(e),r=et(A);if(e===A)return{valid:!0,data:e};if(t===w.object&&r===w.object){let s=q.objectKeys(A),n=q.objectKeys(e).filter(o=>s.indexOf(o)!==-1),i={...e,...A};for(let o of n){let a=gE(e[o],A[o]);if(!a.valid)return{valid:!1};i[o]=a.data}return{valid:!0,data:i}}else if(t===w.array&&r===w.array){if(e.length!==A.length)return{valid:!1};let s=[];for(let n=0;n{if(bo(n)||bo(i))return L;let o=gE(n.value,i.value);return o.valid?((No(n)||No(i))&&t.dirty(),{status:t.value,value:o.data}):(p(r,{code:l.invalid_intersection_types}),L)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([n,i])=>s(n,i)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};dr.create=(e,A,t)=>new dr({left:e,right:A,typeName:x.ZodIntersection,...T(t)});var tt=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.array)return p(r,{code:l.invalid_type,expected:w.array,received:r.parsedType}),L;if(r.data.lengththis._def.items.length&&(p(r,{code:l.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let n=[...r.data].map((i,o)=>{let a=this._def.items[o]||this._def.rest;return a?a._parse(new Fe(r,i,r.path,o)):null}).filter(i=>!!i);return r.common.async?Promise.all(n).then(i=>NA.mergeArray(t,i)):NA.mergeArray(t,n)}get items(){return this._def.items}rest(A){return new e({...this._def,rest:A})}};tt.create=(e,A)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new tt({items:e,typeName:x.ZodTuple,rest:null,...T(A)})};var So=class e extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.object)return p(r,{code:l.invalid_type,expected:w.object,received:r.parsedType}),L;let s=[],n=this._def.keyType,i=this._def.valueType;for(let o in r.data)s.push({key:n._parse(new Fe(r,o,r.path,o)),value:i._parse(new Fe(r,r.data[o],r.path,o)),alwaysSet:o in r.data});return r.common.async?NA.mergeObjectAsync(t,s):NA.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(A,t,r){return t instanceof V?new e({keyType:A,valueType:t,typeName:x.ZodRecord,...T(r)}):new e({keyType:Gt.create(),valueType:A,typeName:x.ZodRecord,...T(t)})}},bs=class extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.map)return p(r,{code:l.invalid_type,expected:w.map,received:r.parsedType}),L;let s=this._def.keyType,n=this._def.valueType,i=[...r.data.entries()].map(([o,a],g)=>({key:s._parse(new Fe(r,o,r.path,[g,"key"])),value:n._parse(new Fe(r,a,r.path,[g,"value"]))}));if(r.common.async){let o=new Map;return Promise.resolve().then(async()=>{for(let a of i){let g=await a.key,c=await a.value;if(g.status==="aborted"||c.status==="aborted")return L;(g.status==="dirty"||c.status==="dirty")&&t.dirty(),o.set(g.value,c.value)}return{status:t.value,value:o}})}else{let o=new Map;for(let a of i){let g=a.key,c=a.value;if(g.status==="aborted"||c.status==="aborted")return L;(g.status==="dirty"||c.status==="dirty")&&t.dirty(),o.set(g.value,c.value)}return{status:t.value,value:o}}}};bs.create=(e,A,t)=>new bs({valueType:A,keyType:e,typeName:x.ZodMap,...T(t)});var Ns=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.set)return p(r,{code:l.invalid_type,expected:w.set,received:r.parsedType}),L;let s=this._def;s.minSize!==null&&r.data.sizes.maxSize.value&&(p(r,{code:l.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let n=this._def.valueType;function i(a){let g=new Set;for(let c of a){if(c.status==="aborted")return L;c.status==="dirty"&&t.dirty(),g.add(c.value)}return{status:t.value,value:g}}let o=[...r.data.values()].map((a,g)=>n._parse(new Fe(r,a,r.path,g)));return r.common.async?Promise.all(o).then(a=>i(a)):i(o)}min(A,t){return new e({...this._def,minSize:{value:A,message:k.toString(t)}})}max(A,t){return new e({...this._def,maxSize:{value:A,message:k.toString(t)}})}size(A,t){return this.min(A,t).max(A,t)}nonempty(A){return this.min(1,A)}};Ns.create=(e,A)=>new Ns({valueType:e,minSize:null,maxSize:null,typeName:x.ZodSet,...T(A)});var Uo=class e extends V{constructor(){super(...arguments),this.validate=this.implement}_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.function)return p(t,{code:l.invalid_type,expected:w.function,received:t.parsedType}),L;function r(o,a){return yn({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ws(),dt].filter(g=>!!g),issueData:{code:l.invalid_arguments,argumentsError:a}})}function s(o,a){return yn({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ws(),dt].filter(g=>!!g),issueData:{code:l.invalid_return_type,returnTypeError:a}})}let n={errorMap:t.common.contextualErrorMap},i=t.data;if(this._def.returns instanceof Ht){let o=this;return vA(async function(...a){let g=new re([]),c=await o._def.args.parseAsync(a,n).catch(B=>{throw g.addIssue(r(a,B)),g}),E=await Reflect.apply(i,this,c);return await o._def.returns._def.type.parseAsync(E,n).catch(B=>{throw g.addIssue(s(E,B)),g})})}else{let o=this;return vA(function(...a){let g=o._def.args.safeParse(a,n);if(!g.success)throw new re([r(a,g.error)]);let c=Reflect.apply(i,this,g.data),E=o._def.returns.safeParse(c,n);if(!E.success)throw new re([s(c,E.error)]);return E.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...A){return new e({...this._def,args:tt.create(A).rest(pt.create())})}returns(A){return new e({...this._def,returns:A})}implement(A){return this.parse(A)}strictImplement(A){return this.parse(A)}static create(A,t,r){return new e({args:A||tt.create([]).rest(pt.create()),returns:t||pt.create(),typeName:x.ZodFunction,...T(r)})}},fr=class extends V{get schema(){return this._def.getter()}_parse(A){let{ctx:t}=this._processInputParams(A);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};fr.create=(e,A)=>new fr({getter:e,typeName:x.ZodLazy,...T(A)});var pr=class extends V{_parse(A){if(A.data!==this._def.value){let t=this._getOrReturnCtx(A);return p(t,{received:t.data,code:l.invalid_literal,expected:this._def.value}),L}return{status:"valid",value:A.data}}get value(){return this._def.value}};pr.create=(e,A)=>new pr({value:e,typeName:x.ZodLiteral,...T(A)});function Pu(e,A){return new yr({values:e,typeName:x.ZodEnum,...T(A)})}var yr=class e extends V{_parse(A){if(typeof A.data!="string"){let t=this._getOrReturnCtx(A),r=this._def.values;return p(t,{expected:q.joinValues(r),received:t.parsedType,code:l.invalid_type}),L}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(A.data)){let t=this._getOrReturnCtx(A),r=this._def.values;return p(t,{received:t.data,code:l.invalid_enum_value,options:r}),L}return vA(A.data)}get options(){return this._def.values}get enum(){let A={};for(let t of this._def.values)A[t]=t;return A}get Values(){let A={};for(let t of this._def.values)A[t]=t;return A}get Enum(){let A={};for(let t of this._def.values)A[t]=t;return A}extract(A,t=this._def){return e.create(A,{...this._def,...t})}exclude(A,t=this._def){return e.create(this.options.filter(r=>!A.includes(r)),{...this._def,...t})}};yr.create=Pu;var wr=class extends V{_parse(A){let t=q.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(A);if(r.parsedType!==w.string&&r.parsedType!==w.number){let s=q.objectValues(t);return p(r,{expected:q.joinValues(s),received:r.parsedType,code:l.invalid_type}),L}if(this._cache||(this._cache=new Set(q.getValidEnumValues(this._def.values))),!this._cache.has(A.data)){let s=q.objectValues(t);return p(r,{received:r.data,code:l.invalid_enum_value,options:s}),L}return vA(A.data)}get enum(){return this._def.values}};wr.create=(e,A)=>new wr({values:e,typeName:x.ZodNativeEnum,...T(A)});var Ht=class extends V{unwrap(){return this._def.type}_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.promise&&t.common.async===!1)return p(t,{code:l.invalid_type,expected:w.promise,received:t.parsedType}),L;let r=t.parsedType===w.promise?t.data:Promise.resolve(t.data);return vA(r.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Ht.create=(e,A)=>new Ht({type:e,typeName:x.ZodPromise,...T(A)});var Se=class extends V{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===x.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(A){let{status:t,ctx:r}=this._processInputParams(A),s=this._def.effect||null,n={addIssue:i=>{p(r,i),i.fatal?t.abort():t.dirty()},get path(){return r.path}};if(n.addIssue=n.addIssue.bind(n),s.type==="preprocess"){let i=s.transform(r.data,n);if(r.common.async)return Promise.resolve(i).then(async o=>{if(t.value==="aborted")return L;let a=await this._def.schema._parseAsync({data:o,path:r.path,parent:r});return a.status==="aborted"?L:a.status==="dirty"?Er(a.value):t.value==="dirty"?Er(a.value):a});{if(t.value==="aborted")return L;let o=this._def.schema._parseSync({data:i,path:r.path,parent:r});return o.status==="aborted"?L:o.status==="dirty"?Er(o.value):t.value==="dirty"?Er(o.value):o}}if(s.type==="refinement"){let i=o=>{let a=s.refinement(o,n);if(r.common.async)return Promise.resolve(a);if(a instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?L:(o.status==="dirty"&&t.dirty(),i(o.value),{status:t.value,value:o.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>o.status==="aborted"?L:(o.status==="dirty"&&t.dirty(),i(o.value).then(()=>({status:t.value,value:o.value}))))}if(s.type==="transform")if(r.common.async===!1){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Jt(i))return L;let o=s.transform(i.value,n);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:o}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>Jt(i)?Promise.resolve(s.transform(i.value,n)).then(o=>({status:t.value,value:o})):L);q.assertNever(s)}};Se.create=(e,A,t)=>new Se({schema:e,typeName:x.ZodEffects,effect:A,...T(t)});Se.createWithPreprocess=(e,A,t)=>new Se({schema:A,effect:{type:"preprocess",transform:e},typeName:x.ZodEffects,...T(t)});var Ne=class extends V{_parse(A){return this._getType(A)===w.undefined?vA(void 0):this._def.innerType._parse(A)}unwrap(){return this._def.innerType}};Ne.create=(e,A)=>new Ne({innerType:e,typeName:x.ZodOptional,...T(A)});var rt=class extends V{_parse(A){return this._getType(A)===w.null?vA(null):this._def.innerType._parse(A)}unwrap(){return this._def.innerType}};rt.create=(e,A)=>new rt({innerType:e,typeName:x.ZodNullable,...T(A)});var mr=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=t.data;return t.parsedType===w.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};mr.create=(e,A)=>new mr({innerType:e,typeName:x.ZodDefault,defaultValue:typeof A.default=="function"?A.default:()=>A.default,...T(A)});var Dr=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return ms(s)?s.then(n=>({status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Dr.create=(e,A)=>new Dr({innerType:e,typeName:x.ZodCatch,catchValue:typeof A.catch=="function"?A.catch:()=>A.catch,...T(A)});var Fs=class extends V{_parse(A){if(this._getType(A)!==w.nan){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.nan,received:r.parsedType}),L}return{status:"valid",value:A.data}}};Fs.create=e=>new Fs({typeName:x.ZodNaN,...T(e)});var xS=Symbol("zod_brand"),wn=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}},mn=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.common.async)return(async()=>{let n=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return n.status==="aborted"?L:n.status==="dirty"?(t.dirty(),Er(n.value)):this._def.out._parseAsync({data:n.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?L:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(A,t){return new e({in:A,out:t,typeName:x.ZodPipeline})}},Rr=class extends V{_parse(A){let t=this._def.innerType._parse(A),r=s=>(Jt(s)&&(s.value=Object.freeze(s.value)),s);return ms(t)?t.then(s=>r(s)):r(t)}unwrap(){return this._def.innerType}};Rr.create=(e,A)=>new Rr({innerType:e,typeName:x.ZodReadonly,...T(A)});function _u(e,A){let t=typeof e=="function"?e(A):typeof e=="string"?{message:e}:e;return typeof t=="string"?{message:t}:t}function Zu(e,A={},t){return e?Vt.create().superRefine((r,s)=>{let n=e(r);if(n instanceof Promise)return n.then(i=>{if(!i){let o=_u(A,r),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}});if(!n){let i=_u(A,r),o=i.fatal??t??!0;s.addIssue({code:"custom",...i,fatal:o})}}):Vt.create()}var MS={object:se.lazycreate},x;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(x||(x={}));var vS=(e,A={message:`Input not instance of ${e.name}`})=>Zu(t=>t instanceof e,A),ju=Gt.create,Xu=Qr.create,YS=Fs.create,TS=Cr.create,zu=Br.create,JS=hr.create,GS=Rs.create,VS=Ir.create,HS=lr.create,_S=Vt.create,qS=pt.create,OS=Te.create,WS=ks.create,PS=yt.create,ZS=se.create,jS=se.strictCreate,XS=ur.create,zS=Fo.create,KS=dr.create,$S=tt.create,AU=So.create,eU=bs.create,tU=Ns.create,rU=Uo.create,sU=fr.create,nU=pr.create,iU=yr.create,oU=wr.create,aU=Ht.create,gU=Se.create,cU=Ne.create,EU=rt.create,QU=Se.createWithPreprocess,CU=mn.create,BU=()=>ju().optional(),hU=()=>Xu().optional(),IU=()=>zu().optional(),lU={string:e=>Gt.create({...e,coerce:!0}),number:e=>Qr.create({...e,coerce:!0}),boolean:e=>Br.create({...e,coerce:!0}),bigint:e=>Cr.create({...e,coerce:!0}),date:e=>hr.create({...e,coerce:!0})};var uU=L;var kr=kn(pn(),1),nd=kn(pn(),1);var Ku=(e=0)=>A=>`\x1B[${A+e}m`,$u=(e=0)=>A=>`\x1B[${38+e};5;${A}m`,Ad=(e=0)=>(A,t,r)=>`\x1B[${38+e};2;${A};${t};${r}m`,gA={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},cM=Object.keys(gA.modifier),dU=Object.keys(gA.color),fU=Object.keys(gA.bgColor),EM=[...dU,...fU];function pU(){let e=new Map;for(let[A,t]of Object.entries(gA)){for(let[r,s]of Object.entries(t))gA[r]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[r]=gA[r],e.set(s[0],s[1]);Object.defineProperty(gA,A,{value:t,enumerable:!1})}return Object.defineProperty(gA,"codes",{value:e,enumerable:!1}),gA.color.close="\x1B[39m",gA.bgColor.close="\x1B[49m",gA.color.ansi=Ku(),gA.color.ansi256=$u(),gA.color.ansi16m=Ad(),gA.bgColor.ansi=Ku(10),gA.bgColor.ansi256=$u(10),gA.bgColor.ansi16m=Ad(10),Object.defineProperties(gA,{rgbToAnsi256:{value:(A,t,r)=>A===t&&t===r?A<8?16:A>248?231:Math.round((A-8)/247*24)+232:16+36*Math.round(A/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value:A=>{let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(A.toString(16));if(!t)return[0,0,0];let[r]=t;r.length===3&&(r=[...r].map(n=>n+n).join(""));let s=Number.parseInt(r,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:A=>gA.rgbToAnsi256(...gA.hexToRgb(A)),enumerable:!1},ansi256ToAnsi:{value:A=>{if(A<8)return 30+A;if(A<16)return 90+(A-8);let t,r,s;if(A>=232)t=((A-232)*10+8)/255,r=t,s=t;else{A-=16;let o=A%36;t=Math.floor(A/36)/5,r=Math.floor(o/6)/5,s=o%6/5}let n=Math.max(t,r,s)*2;if(n===0)return 30;let i=30+(Math.round(s)<<2|Math.round(r)<<1|Math.round(t));return n===2&&(i+=60),i},enumerable:!1},rgbToAnsi:{value:(A,t,r)=>gA.ansi256ToAnsi(gA.rgbToAnsi256(A,t,r)),enumerable:!1},hexToAnsi:{value:A=>gA.ansi256ToAnsi(gA.hexToAnsi256(A)),enumerable:!1}}),gA}var QM=pU();function ed(e){return kr.getInput(e,{trimWhitespace:!0})||null}function td(e){return kr.getBooleanInput(e,{trimWhitespace:!0})}function rd(e){return kr.getMultilineInput(e,{trimWhitespace:!0})}function sd(e){return Object.fromEntries(kr.getMultilineInput(e,{trimWhitespace:!0}).reduce((A,t)=>{let[,r,s]=t.match(/^(.+?):(.+)$/)||[];return r&&s&&A.push([r.trim(),s.trim()]),A},[]))}async function od(){try{let{container:e,experiments:A,templates:t,wpOptions:r}=await Je.group("Parsing inputs",yU);await Je.group("Validating wp-env installation",async()=>{await _t({container:e,command:["wp","core","version"],error:"Can't find a running `wp-env` instance. Please make sure it's running an accessible. (try using `setup-wp-env` action before this one)"})}),await Je.group("Validating elementor being activated",async()=>{await _t({container:e,command:["wp","plugin","is-active","elementor"],error:"Can't find an active Elementor installation. Please make sure it's installed and activated."})}),await Je.group("Setting WP Options",async()=>{for(let{key:s,value:n}of r)await _t({container:e,command:["wp","option","update",s,n],error:`Failed to set option: ${s} to ${n}`})}),A.on.length>0&&await Je.group("Activating Experiments",async()=>{await _t({container:e,command:["wp","--user=admin","elementor","experiments","activate",A.on.join(",")],error:`Failed to activate experiments: ${A.on.join(", ")}`})}),A.off.length>0&&await Je.group("Deactivating Experiments",async()=>{await _t({container:e,command:["wp","--user=admin","elementor","experiments","deactivate",A.off.join(",")],error:`Failed to deactivate experiments: ${A.off.join(", ")}`})}),t.length>0&&await Je.group("Importing Templates",async()=>{for(let s of t)await _t({container:e,command:["wp","--user=admin","elementor","library","import-dir",s],error:`Failed to import templates: ${s}`})}),await Je.group("Clearing Elementor and WP Cache",async()=>{await _t({container:e,command:["wp","cache","flush"],error:"Failed to flush wp cache"}),await _t({container:e,command:["wp","elementor","flush-css"],error:"Failed to flush elementor css cache"})})}catch(e){let A=e instanceof Error?e:new Error("An error occurred");Je.setFailed(A)}}async function yU(){try{let e=YA.object({env:YA.union([YA.literal("development"),YA.literal("testing")]),templates:YA.array(YA.string().regex(/^[a-z0-9-_./]+$/)),experiments:YA.record(YA.string().regex(/^[a-z0-9-_]+$/),YA.union([YA.literal("true"),YA.literal("false")])),enableSvgUpload:YA.boolean()}).parse({env:ed("env"),templates:rd("templates"),experiments:sd("experiments"),enableSvgUpload:td("enable-svg-upload")}),A=Object.entries(e.experiments);return{container:e.env==="development"?"cli":"tests-cli",templates:e.templates,wpOptions:wU({enableSvgUpload:e.enableSvgUpload}),experiments:{on:A.filter(([,t])=>t==="true").map(([t])=>t),off:A.filter(([,t])=>t==="false").map(([t])=>t)}}}catch(e){let A="Failed to parse inputs";throw e instanceof YA.ZodError&&(A=`${A}: ${e.errors.map(t=>`${t.path.join(", ")} - ${t.message}`).join(` +Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}D.getBooleanInput=ZF;function jF(e,A){if(process.env.GITHUB_OUTPUT||"")return(0,cr.issueFileCommand)("OUTPUT",(0,cr.prepareKeyValueMessage)(e,A));process.stdout.write(Yu.EOL),(0,be.issueCommand)("set-output",{name:e},(0,ys.toCommandValue)(A))}D.setOutput=jF;function XF(e){(0,be.issue)("echo",e?"on":"off")}D.setCommandEcho=XF;function zF(e){process.exitCode=rE.Failure,Tu(e)}D.setFailed=zF;function KF(){return process.env.RUNNER_DEBUG==="1"}D.isDebug=KF;function $F(e){(0,be.issueCommand)("debug",{},e)}D.debug=$F;function Tu(e,A={}){(0,be.issueCommand)("error",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.error=Tu;function AS(e,A={}){(0,be.issueCommand)("warning",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.warning=AS;function eS(e,A={}){(0,be.issueCommand)("notice",(0,ys.toCommandProperties)(A),e instanceof Error?e.toString():e)}D.notice=eS;function tS(e){process.stdout.write(e+Yu.EOL)}D.info=tS;function Ju(e){(0,be.issue)("group",e)}D.startGroup=Ju;function Gu(){(0,be.issue)("endgroup")}D.endGroup=Gu;function rS(e,A){return vu(this,void 0,void 0,function*(){Ju(e);let t;try{t=yield A()}finally{Gu()}return t})}D.group=rS;function sS(e,A){if(process.env.GITHUB_STATE||"")return(0,cr.issueFileCommand)("STATE",(0,cr.prepareKeyValueMessage)(e,A));(0,be.issueCommand)("save-state",{name:e},(0,ys.toCommandValue)(A))}D.saveState=sS;function nS(e){return process.env[`STATE_${e}`]||""}D.getState=nS;function iS(e){return vu(this,void 0,void 0,function*(){return yield _F.OidcClient.getIDToken(e)})}D.getIDToken=iS;var oS=Xc();Object.defineProperty(D,"summary",{enumerable:!0,get:function(){return oS.summary}});var aS=Xc();Object.defineProperty(D,"markdownSummary",{enumerable:!0,get:function(){return aS.markdownSummary}});var iE=hu();Object.defineProperty(D,"toPosixPath",{enumerable:!0,get:function(){return iE.toPosixPath}});Object.defineProperty(D,"toWin32Path",{enumerable:!0,get:function(){return iE.toWin32Path}});Object.defineProperty(D,"toPlatformPath",{enumerable:!0,get:function(){return iE.toPlatformPath}});D.platform=sE(Mu())});var Je=kn(pn()),id=kn(tE());var YA={};Bd(YA,{BRAND:()=>xS,DIRTY:()=>Er,EMPTY_PATH:()=>QS,INVALID:()=>L,NEVER:()=>uU,OK:()=>vA,ParseStatus:()=>NA,Schema:()=>V,ZodAny:()=>Vt,ZodArray:()=>yt,ZodBigInt:()=>Cr,ZodBoolean:()=>Br,ZodBranded:()=>wn,ZodCatch:()=>Dr,ZodDate:()=>hr,ZodDefault:()=>mr,ZodDiscriminatedUnion:()=>Fo,ZodEffects:()=>Se,ZodEnum:()=>yr,ZodError:()=>re,ZodFirstPartyTypeKind:()=>x,ZodFunction:()=>Uo,ZodIntersection:()=>dr,ZodIssueCode:()=>l,ZodLazy:()=>fr,ZodLiteral:()=>pr,ZodMap:()=>bs,ZodNaN:()=>Fs,ZodNativeEnum:()=>wr,ZodNever:()=>Te,ZodNull:()=>lr,ZodNullable:()=>rt,ZodNumber:()=>Qr,ZodObject:()=>se,ZodOptional:()=>Ne,ZodParsedType:()=>w,ZodPipeline:()=>mn,ZodPromise:()=>Ht,ZodReadonly:()=>Rr,ZodRecord:()=>So,ZodSchema:()=>V,ZodSet:()=>Ns,ZodString:()=>Gt,ZodSymbol:()=>Rs,ZodTransformer:()=>Se,ZodTuple:()=>tt,ZodType:()=>V,ZodUndefined:()=>Ir,ZodUnion:()=>ur,ZodUnknown:()=>pt,ZodVoid:()=>ks,addIssueToContext:()=>p,any:()=>_S,array:()=>PS,bigint:()=>TS,boolean:()=>zu,coerce:()=>lU,custom:()=>Zu,date:()=>JS,datetimeRegex:()=>Wu,defaultErrorMap:()=>dt,discriminatedUnion:()=>zS,effect:()=>gU,enum:()=>iU,function:()=>rU,getErrorMap:()=>ws,getParsedType:()=>et,instanceof:()=>vS,intersection:()=>KS,isAborted:()=>bo,isAsync:()=>ms,isDirty:()=>No,isValid:()=>Jt,late:()=>MS,lazy:()=>sU,literal:()=>nU,makeIssue:()=>yn,map:()=>eU,nan:()=>YS,nativeEnum:()=>oU,never:()=>OS,null:()=>HS,nullable:()=>EU,number:()=>Xu,object:()=>ZS,objectUtil:()=>oE,oboolean:()=>IU,onumber:()=>hU,optional:()=>cU,ostring:()=>BU,pipeline:()=>CU,preprocess:()=>QU,promise:()=>aU,quotelessJson:()=>gS,record:()=>AU,set:()=>tU,setErrorMap:()=>ES,strictObject:()=>jS,string:()=>ju,symbol:()=>GS,transformer:()=>gU,tuple:()=>$S,undefined:()=>VS,union:()=>XS,unknown:()=>qS,util:()=>q,void:()=>WS});var q;(function(e){e.assertEqual=s=>{};function A(s){}e.assertIs=A;function t(s){throw new Error}e.assertNever=t,e.arrayToEnum=s=>{let n={};for(let i of s)n[i]=i;return n},e.getValidEnumValues=s=>{let n=e.objectKeys(s).filter(o=>typeof s[s[o]]!="number"),i={};for(let o of n)i[o]=s[o];return e.objectValues(i)},e.objectValues=s=>e.objectKeys(s).map(function(n){return s[n]}),e.objectKeys=typeof Object.keys=="function"?s=>Object.keys(s):s=>{let n=[];for(let i in s)Object.prototype.hasOwnProperty.call(s,i)&&n.push(i);return n},e.find=(s,n)=>{for(let i of s)if(n(i))return i},e.isInteger=typeof Number.isInteger=="function"?s=>Number.isInteger(s):s=>typeof s=="number"&&Number.isFinite(s)&&Math.floor(s)===s;function r(s,n=" | "){return s.map(i=>typeof i=="string"?`'${i}'`:i).join(n)}e.joinValues=r,e.jsonStringifyReplacer=(s,n)=>typeof n=="bigint"?n.toString():n})(q||(q={}));var oE;(function(e){e.mergeShapes=(A,t)=>({...A,...t})})(oE||(oE={}));var w=q.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),et=e=>{switch(typeof e){case"undefined":return w.undefined;case"string":return w.string;case"number":return Number.isNaN(e)?w.nan:w.number;case"boolean":return w.boolean;case"function":return w.function;case"bigint":return w.bigint;case"symbol":return w.symbol;case"object":return Array.isArray(e)?w.array:e===null?w.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?w.promise:typeof Map<"u"&&e instanceof Map?w.map:typeof Set<"u"&&e instanceof Set?w.set:typeof Date<"u"&&e instanceof Date?w.date:w.object;default:return w.unknown}};var l=q.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),gS=e=>JSON.stringify(e,null,2).replace(/"([^"]+)":/g,"$1:"),re=class e extends Error{get errors(){return this.issues}constructor(A){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};let t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=A}format(A){let t=A||function(n){return n.message},r={_errors:[]},s=n=>{for(let i of n.issues)if(i.code==="invalid_union")i.unionErrors.map(s);else if(i.code==="invalid_return_type")s(i.returnTypeError);else if(i.code==="invalid_arguments")s(i.argumentsError);else if(i.path.length===0)r._errors.push(t(i));else{let o=r,a=0;for(;at.message){let t={},r=[];for(let s of this.issues)s.path.length>0?(t[s.path[0]]=t[s.path[0]]||[],t[s.path[0]].push(A(s))):r.push(A(s));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}};re.create=e=>new re(e);var cS=(e,A)=>{let t;switch(e.code){case l.invalid_type:e.received===w.undefined?t="Required":t=`Expected ${e.expected}, received ${e.received}`;break;case l.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(e.expected,q.jsonStringifyReplacer)}`;break;case l.unrecognized_keys:t=`Unrecognized key(s) in object: ${q.joinValues(e.keys,", ")}`;break;case l.invalid_union:t="Invalid input";break;case l.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${q.joinValues(e.options)}`;break;case l.invalid_enum_value:t=`Invalid enum value. Expected ${q.joinValues(e.options)}, received '${e.received}'`;break;case l.invalid_arguments:t="Invalid function arguments";break;case l.invalid_return_type:t="Invalid function return type";break;case l.invalid_date:t="Invalid date";break;case l.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(t=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?t=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?t=`Invalid input: must end with "${e.validation.endsWith}"`:q.assertNever(e.validation):e.validation!=="regex"?t=`Invalid ${e.validation}`:t="Invalid";break;case l.too_small:e.type==="array"?t=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?t=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?t=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?t=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:t="Invalid input";break;case l.too_big:e.type==="array"?t=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?t=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?t=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?t=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?t=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:t="Invalid input";break;case l.custom:t="Invalid input";break;case l.invalid_intersection_types:t="Intersection results could not be merged";break;case l.not_multiple_of:t=`Number must be a multiple of ${e.multipleOf}`;break;case l.not_finite:t="Number must be finite";break;default:t=A.defaultError,q.assertNever(e)}return{message:t}},dt=cS;var Vu=dt;function ES(e){Vu=e}function ws(){return Vu}var yn=e=>{let{data:A,path:t,errorMaps:r,issueData:s}=e,n=[...t,...s.path||[]],i={...s,path:n};if(s.message!==void 0)return{...s,path:n,message:s.message};let o="",a=r.filter(g=>!!g).slice().reverse();for(let g of a)o=g(i,{data:A,defaultError:o}).message;return{...s,path:n,message:o}},QS=[];function p(e,A){let t=ws(),r=yn({issueData:A,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,t,t===dt?void 0:dt].filter(s=>!!s)});e.common.issues.push(r)}var NA=class e{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(A,t){let r=[];for(let s of t){if(s.status==="aborted")return L;s.status==="dirty"&&A.dirty(),r.push(s.value)}return{status:A.value,value:r}}static async mergeObjectAsync(A,t){let r=[];for(let s of t){let n=await s.key,i=await s.value;r.push({key:n,value:i})}return e.mergeObjectSync(A,r)}static mergeObjectSync(A,t){let r={};for(let s of t){let{key:n,value:i}=s;if(n.status==="aborted"||i.status==="aborted")return L;n.status==="dirty"&&A.dirty(),i.status==="dirty"&&A.dirty(),n.value!=="__proto__"&&(typeof i.value<"u"||s.alwaysSet)&&(r[n.value]=i.value)}return{status:A.value,value:r}}},L=Object.freeze({status:"aborted"}),Er=e=>({status:"dirty",value:e}),vA=e=>({status:"valid",value:e}),bo=e=>e.status==="aborted",No=e=>e.status==="dirty",Jt=e=>e.status==="valid",ms=e=>typeof Promise<"u"&&e instanceof Promise;var k;(function(e){e.errToObj=A=>typeof A=="string"?{message:A}:A||{},e.toString=A=>typeof A=="string"?A:A?.message})(k||(k={}));var Fe=class{constructor(A,t,r,s){this._cachedPath=[],this.parent=A,this.data=t,this._path=r,this._key=s}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},Hu=(e,A)=>{if(Jt(A))return{success:!0,data:A.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let t=new re(e.common.issues);return this._error=t,this._error}}};function T(e){if(!e)return{};let{errorMap:A,invalid_type_error:t,required_error:r,description:s}=e;if(A&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return A?{errorMap:A,description:s}:{errorMap:(i,o)=>{let{message:a}=e;return i.code==="invalid_enum_value"?{message:a??o.defaultError}:typeof o.data>"u"?{message:a??r??o.defaultError}:i.code!=="invalid_type"?{message:o.defaultError}:{message:a??t??o.defaultError}},description:s}}var V=class{get description(){return this._def.description}_getType(A){return et(A.data)}_getOrReturnCtx(A,t){return t||{common:A.parent.common,data:A.data,parsedType:et(A.data),schemaErrorMap:this._def.errorMap,path:A.path,parent:A.parent}}_processInputParams(A){return{status:new NA,ctx:{common:A.parent.common,data:A.data,parsedType:et(A.data),schemaErrorMap:this._def.errorMap,path:A.path,parent:A.parent}}}_parseSync(A){let t=this._parse(A);if(ms(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(A){let t=this._parse(A);return Promise.resolve(t)}parse(A,t){let r=this.safeParse(A,t);if(r.success)return r.data;throw r.error}safeParse(A,t){let r={common:{issues:[],async:t?.async??!1,contextualErrorMap:t?.errorMap},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)},s=this._parseSync({data:A,path:r.path,parent:r});return Hu(r,s)}"~validate"(A){let t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)};if(!this["~standard"].async)try{let r=this._parseSync({data:A,path:[],parent:t});return Jt(r)?{value:r.value}:{issues:t.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:A,path:[],parent:t}).then(r=>Jt(r)?{value:r.value}:{issues:t.common.issues})}async parseAsync(A,t){let r=await this.safeParseAsync(A,t);if(r.success)return r.data;throw r.error}async safeParseAsync(A,t){let r={common:{issues:[],contextualErrorMap:t?.errorMap,async:!0},path:t?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:A,parsedType:et(A)},s=this._parse({data:A,path:r.path,parent:r}),n=await(ms(s)?s:Promise.resolve(s));return Hu(r,n)}refine(A,t){let r=s=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(s):t;return this._refinement((s,n)=>{let i=A(s),o=()=>n.addIssue({code:l.custom,...r(s)});return typeof Promise<"u"&&i instanceof Promise?i.then(a=>a?!0:(o(),!1)):i?!0:(o(),!1)})}refinement(A,t){return this._refinement((r,s)=>A(r)?!0:(s.addIssue(typeof t=="function"?t(r,s):t),!1))}_refinement(A){return new Se({schema:this,typeName:x.ZodEffects,effect:{type:"refinement",refinement:A}})}superRefine(A){return this._refinement(A)}constructor(A){this.spa=this.safeParseAsync,this._def=A,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return Ne.create(this,this._def)}nullable(){return rt.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return yt.create(this)}promise(){return Ht.create(this,this._def)}or(A){return ur.create([this,A],this._def)}and(A){return dr.create(this,A,this._def)}transform(A){return new Se({...T(this._def),schema:this,typeName:x.ZodEffects,effect:{type:"transform",transform:A}})}default(A){let t=typeof A=="function"?A:()=>A;return new mr({...T(this._def),innerType:this,defaultValue:t,typeName:x.ZodDefault})}brand(){return new wn({typeName:x.ZodBranded,type:this,...T(this._def)})}catch(A){let t=typeof A=="function"?A:()=>A;return new Dr({...T(this._def),innerType:this,catchValue:t,typeName:x.ZodCatch})}describe(A){let t=this.constructor;return new t({...this._def,description:A})}pipe(A){return mn.create(this,A)}readonly(){return Rr.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},CS=/^c[^\s-]{8,}$/i,BS=/^[0-9a-z]+$/,hS=/^[0-9A-HJKMNP-TV-Z]{26}$/i,IS=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,lS=/^[a-z0-9_-]{21}$/i,uS=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,dS=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,fS=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,pS="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",aE,yS=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,wS=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,mS=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,DS=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,RS=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,kS=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,qu="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",bS=new RegExp(`^${qu}$`);function Ou(e){let A="[0-5]\\d";e.precision?A=`${A}\\.\\d{${e.precision}}`:e.precision==null&&(A=`${A}(\\.\\d+)?`);let t=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${A})${t}`}function NS(e){return new RegExp(`^${Ou(e)}$`)}function Wu(e){let A=`${qu}T${Ou(e)}`,t=[];return t.push(e.local?"Z?":"Z"),e.offset&&t.push("([+-]\\d{2}:?\\d{2})"),A=`${A}(${t.join("|")})`,new RegExp(`^${A}$`)}function FS(e,A){return!!((A==="v4"||!A)&&yS.test(e)||(A==="v6"||!A)&&mS.test(e))}function SS(e,A){if(!uS.test(e))return!1;try{let[t]=e.split("."),r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),s=JSON.parse(atob(r));return!(typeof s!="object"||s===null||"typ"in s&&s?.typ!=="JWT"||!s.alg||A&&s.alg!==A)}catch{return!1}}function US(e,A){return!!((A==="v4"||!A)&&wS.test(e)||(A==="v6"||!A)&&DS.test(e))}var Gt=class e extends V{_parse(A){if(this._def.coerce&&(A.data=String(A.data)),this._getType(A)!==w.string){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.string,received:n.parsedType}),L}let r=new NA,s;for(let n of this._def.checks)if(n.kind==="min")A.data.lengthn.value&&(s=this._getOrReturnCtx(A,s),p(s,{code:l.too_big,maximum:n.value,type:"string",inclusive:!0,exact:!1,message:n.message}),r.dirty());else if(n.kind==="length"){let i=A.data.length>n.value,o=A.data.lengthA.test(s),{validation:t,code:l.invalid_string,...k.errToObj(r)})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}email(A){return this._addCheck({kind:"email",...k.errToObj(A)})}url(A){return this._addCheck({kind:"url",...k.errToObj(A)})}emoji(A){return this._addCheck({kind:"emoji",...k.errToObj(A)})}uuid(A){return this._addCheck({kind:"uuid",...k.errToObj(A)})}nanoid(A){return this._addCheck({kind:"nanoid",...k.errToObj(A)})}cuid(A){return this._addCheck({kind:"cuid",...k.errToObj(A)})}cuid2(A){return this._addCheck({kind:"cuid2",...k.errToObj(A)})}ulid(A){return this._addCheck({kind:"ulid",...k.errToObj(A)})}base64(A){return this._addCheck({kind:"base64",...k.errToObj(A)})}base64url(A){return this._addCheck({kind:"base64url",...k.errToObj(A)})}jwt(A){return this._addCheck({kind:"jwt",...k.errToObj(A)})}ip(A){return this._addCheck({kind:"ip",...k.errToObj(A)})}cidr(A){return this._addCheck({kind:"cidr",...k.errToObj(A)})}datetime(A){return typeof A=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:A}):this._addCheck({kind:"datetime",precision:typeof A?.precision>"u"?null:A?.precision,offset:A?.offset??!1,local:A?.local??!1,...k.errToObj(A?.message)})}date(A){return this._addCheck({kind:"date",message:A})}time(A){return typeof A=="string"?this._addCheck({kind:"time",precision:null,message:A}):this._addCheck({kind:"time",precision:typeof A?.precision>"u"?null:A?.precision,...k.errToObj(A?.message)})}duration(A){return this._addCheck({kind:"duration",...k.errToObj(A)})}regex(A,t){return this._addCheck({kind:"regex",regex:A,...k.errToObj(t)})}includes(A,t){return this._addCheck({kind:"includes",value:A,position:t?.position,...k.errToObj(t?.message)})}startsWith(A,t){return this._addCheck({kind:"startsWith",value:A,...k.errToObj(t)})}endsWith(A,t){return this._addCheck({kind:"endsWith",value:A,...k.errToObj(t)})}min(A,t){return this._addCheck({kind:"min",value:A,...k.errToObj(t)})}max(A,t){return this._addCheck({kind:"max",value:A,...k.errToObj(t)})}length(A,t){return this._addCheck({kind:"length",value:A,...k.errToObj(t)})}nonempty(A){return this.min(1,k.errToObj(A))}trim(){return new e({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new e({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(A=>A.kind==="datetime")}get isDate(){return!!this._def.checks.find(A=>A.kind==="date")}get isTime(){return!!this._def.checks.find(A=>A.kind==="time")}get isDuration(){return!!this._def.checks.find(A=>A.kind==="duration")}get isEmail(){return!!this._def.checks.find(A=>A.kind==="email")}get isURL(){return!!this._def.checks.find(A=>A.kind==="url")}get isEmoji(){return!!this._def.checks.find(A=>A.kind==="emoji")}get isUUID(){return!!this._def.checks.find(A=>A.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(A=>A.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(A=>A.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(A=>A.kind==="cuid2")}get isULID(){return!!this._def.checks.find(A=>A.kind==="ulid")}get isIP(){return!!this._def.checks.find(A=>A.kind==="ip")}get isCIDR(){return!!this._def.checks.find(A=>A.kind==="cidr")}get isBase64(){return!!this._def.checks.find(A=>A.kind==="base64")}get isBase64url(){return!!this._def.checks.find(A=>A.kind==="base64url")}get minLength(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxLength(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew Gt({checks:[],typeName:x.ZodString,coerce:e?.coerce??!1,...T(e)});function LS(e,A){let t=(e.toString().split(".")[1]||"").length,r=(A.toString().split(".")[1]||"").length,s=t>r?t:r,n=Number.parseInt(e.toFixed(s).replace(".","")),i=Number.parseInt(A.toFixed(s).replace(".",""));return n%i/10**s}var Qr=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(A){if(this._def.coerce&&(A.data=Number(A.data)),this._getType(A)!==w.number){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.number,received:n.parsedType}),L}let r,s=new NA;for(let n of this._def.checks)n.kind==="int"?q.isInteger(A.data)||(r=this._getOrReturnCtx(A,r),p(r,{code:l.invalid_type,expected:"integer",received:"float",message:n.message}),s.dirty()):n.kind==="min"?(n.inclusive?A.datan.value:A.data>=n.value)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.too_big,maximum:n.value,type:"number",inclusive:n.inclusive,exact:!1,message:n.message}),s.dirty()):n.kind==="multipleOf"?LS(A.data,n.value)!==0&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_multiple_of,multipleOf:n.value,message:n.message}),s.dirty()):n.kind==="finite"?Number.isFinite(A.data)||(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_finite,message:n.message}),s.dirty()):q.assertNever(n);return{status:s.value,value:A.data}}gte(A,t){return this.setLimit("min",A,!0,k.toString(t))}gt(A,t){return this.setLimit("min",A,!1,k.toString(t))}lte(A,t){return this.setLimit("max",A,!0,k.toString(t))}lt(A,t){return this.setLimit("max",A,!1,k.toString(t))}setLimit(A,t,r,s){return new e({...this._def,checks:[...this._def.checks,{kind:A,value:t,inclusive:r,message:k.toString(s)}]})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}int(A){return this._addCheck({kind:"int",message:k.toString(A)})}positive(A){return this._addCheck({kind:"min",value:0,inclusive:!1,message:k.toString(A)})}negative(A){return this._addCheck({kind:"max",value:0,inclusive:!1,message:k.toString(A)})}nonpositive(A){return this._addCheck({kind:"max",value:0,inclusive:!0,message:k.toString(A)})}nonnegative(A){return this._addCheck({kind:"min",value:0,inclusive:!0,message:k.toString(A)})}multipleOf(A,t){return this._addCheck({kind:"multipleOf",value:A,message:k.toString(t)})}finite(A){return this._addCheck({kind:"finite",message:k.toString(A)})}safe(A){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:k.toString(A)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:k.toString(A)})}get minValue(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxValue(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valueA.kind==="int"||A.kind==="multipleOf"&&q.isInteger(A.value))}get isFinite(){let A=null,t=null;for(let r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(A===null||r.valuenew Qr({checks:[],typeName:x.ZodNumber,coerce:e?.coerce||!1,...T(e)});var Cr=class e extends V{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(A){if(this._def.coerce)try{A.data=BigInt(A.data)}catch{return this._getInvalidInput(A)}if(this._getType(A)!==w.bigint)return this._getInvalidInput(A);let r,s=new NA;for(let n of this._def.checks)n.kind==="min"?(n.inclusive?A.datan.value:A.data>=n.value)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.too_big,type:"bigint",maximum:n.value,inclusive:n.inclusive,message:n.message}),s.dirty()):n.kind==="multipleOf"?A.data%n.value!==BigInt(0)&&(r=this._getOrReturnCtx(A,r),p(r,{code:l.not_multiple_of,multipleOf:n.value,message:n.message}),s.dirty()):q.assertNever(n);return{status:s.value,value:A.data}}_getInvalidInput(A){let t=this._getOrReturnCtx(A);return p(t,{code:l.invalid_type,expected:w.bigint,received:t.parsedType}),L}gte(A,t){return this.setLimit("min",A,!0,k.toString(t))}gt(A,t){return this.setLimit("min",A,!1,k.toString(t))}lte(A,t){return this.setLimit("max",A,!0,k.toString(t))}lt(A,t){return this.setLimit("max",A,!1,k.toString(t))}setLimit(A,t,r,s){return new e({...this._def,checks:[...this._def.checks,{kind:A,value:t,inclusive:r,message:k.toString(s)}]})}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}positive(A){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:k.toString(A)})}negative(A){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:k.toString(A)})}nonpositive(A){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:k.toString(A)})}nonnegative(A){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:k.toString(A)})}multipleOf(A,t){return this._addCheck({kind:"multipleOf",value:A,message:k.toString(t)})}get minValue(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A}get maxValue(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew Cr({checks:[],typeName:x.ZodBigInt,coerce:e?.coerce??!1,...T(e)});var Br=class extends V{_parse(A){if(this._def.coerce&&(A.data=!!A.data),this._getType(A)!==w.boolean){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.boolean,received:r.parsedType}),L}return vA(A.data)}};Br.create=e=>new Br({typeName:x.ZodBoolean,coerce:e?.coerce||!1,...T(e)});var hr=class e extends V{_parse(A){if(this._def.coerce&&(A.data=new Date(A.data)),this._getType(A)!==w.date){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_type,expected:w.date,received:n.parsedType}),L}if(Number.isNaN(A.data.getTime())){let n=this._getOrReturnCtx(A);return p(n,{code:l.invalid_date}),L}let r=new NA,s;for(let n of this._def.checks)n.kind==="min"?A.data.getTime()n.value&&(s=this._getOrReturnCtx(A,s),p(s,{code:l.too_big,message:n.message,inclusive:!0,exact:!1,maximum:n.value,type:"date"}),r.dirty()):q.assertNever(n);return{status:r.value,value:new Date(A.data.getTime())}}_addCheck(A){return new e({...this._def,checks:[...this._def.checks,A]})}min(A,t){return this._addCheck({kind:"min",value:A.getTime(),message:k.toString(t)})}max(A,t){return this._addCheck({kind:"max",value:A.getTime(),message:k.toString(t)})}get minDate(){let A=null;for(let t of this._def.checks)t.kind==="min"&&(A===null||t.value>A)&&(A=t.value);return A!=null?new Date(A):null}get maxDate(){let A=null;for(let t of this._def.checks)t.kind==="max"&&(A===null||t.valuenew hr({checks:[],coerce:e?.coerce||!1,typeName:x.ZodDate,...T(e)});var Rs=class extends V{_parse(A){if(this._getType(A)!==w.symbol){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.symbol,received:r.parsedType}),L}return vA(A.data)}};Rs.create=e=>new Rs({typeName:x.ZodSymbol,...T(e)});var Ir=class extends V{_parse(A){if(this._getType(A)!==w.undefined){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.undefined,received:r.parsedType}),L}return vA(A.data)}};Ir.create=e=>new Ir({typeName:x.ZodUndefined,...T(e)});var lr=class extends V{_parse(A){if(this._getType(A)!==w.null){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.null,received:r.parsedType}),L}return vA(A.data)}};lr.create=e=>new lr({typeName:x.ZodNull,...T(e)});var Vt=class extends V{constructor(){super(...arguments),this._any=!0}_parse(A){return vA(A.data)}};Vt.create=e=>new Vt({typeName:x.ZodAny,...T(e)});var pt=class extends V{constructor(){super(...arguments),this._unknown=!0}_parse(A){return vA(A.data)}};pt.create=e=>new pt({typeName:x.ZodUnknown,...T(e)});var Te=class extends V{_parse(A){let t=this._getOrReturnCtx(A);return p(t,{code:l.invalid_type,expected:w.never,received:t.parsedType}),L}};Te.create=e=>new Te({typeName:x.ZodNever,...T(e)});var ks=class extends V{_parse(A){if(this._getType(A)!==w.undefined){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.void,received:r.parsedType}),L}return vA(A.data)}};ks.create=e=>new ks({typeName:x.ZodVoid,...T(e)});var yt=class e extends V{_parse(A){let{ctx:t,status:r}=this._processInputParams(A),s=this._def;if(t.parsedType!==w.array)return p(t,{code:l.invalid_type,expected:w.array,received:t.parsedType}),L;if(s.exactLength!==null){let i=t.data.length>s.exactLength.value,o=t.data.lengths.maxLength.value&&(p(t,{code:l.too_big,maximum:s.maxLength.value,type:"array",inclusive:!0,exact:!1,message:s.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((i,o)=>s.type._parseAsync(new Fe(t,i,t.path,o)))).then(i=>NA.mergeArray(r,i));let n=[...t.data].map((i,o)=>s.type._parseSync(new Fe(t,i,t.path,o)));return NA.mergeArray(r,n)}get element(){return this._def.type}min(A,t){return new e({...this._def,minLength:{value:A,message:k.toString(t)}})}max(A,t){return new e({...this._def,maxLength:{value:A,message:k.toString(t)}})}length(A,t){return new e({...this._def,exactLength:{value:A,message:k.toString(t)}})}nonempty(A){return this.min(1,A)}};yt.create=(e,A)=>new yt({type:e,minLength:null,maxLength:null,exactLength:null,typeName:x.ZodArray,...T(A)});function Ds(e){if(e instanceof se){let A={};for(let t in e.shape){let r=e.shape[t];A[t]=Ne.create(Ds(r))}return new se({...e._def,shape:()=>A})}else return e instanceof yt?new yt({...e._def,type:Ds(e.element)}):e instanceof Ne?Ne.create(Ds(e.unwrap())):e instanceof rt?rt.create(Ds(e.unwrap())):e instanceof tt?tt.create(e.items.map(A=>Ds(A))):e}var se=class e extends V{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let A=this._def.shape(),t=q.objectKeys(A);return this._cached={shape:A,keys:t},this._cached}_parse(A){if(this._getType(A)!==w.object){let g=this._getOrReturnCtx(A);return p(g,{code:l.invalid_type,expected:w.object,received:g.parsedType}),L}let{status:r,ctx:s}=this._processInputParams(A),{shape:n,keys:i}=this._getCached(),o=[];if(!(this._def.catchall instanceof Te&&this._def.unknownKeys==="strip"))for(let g in s.data)i.includes(g)||o.push(g);let a=[];for(let g of i){let c=n[g],E=s.data[g];a.push({key:{status:"valid",value:g},value:c._parse(new Fe(s,E,s.path,g)),alwaysSet:g in s.data})}if(this._def.catchall instanceof Te){let g=this._def.unknownKeys;if(g==="passthrough")for(let c of o)a.push({key:{status:"valid",value:c},value:{status:"valid",value:s.data[c]}});else if(g==="strict")o.length>0&&(p(s,{code:l.unrecognized_keys,keys:o}),r.dirty());else if(g!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{let g=this._def.catchall;for(let c of o){let E=s.data[c];a.push({key:{status:"valid",value:c},value:g._parse(new Fe(s,E,s.path,c)),alwaysSet:c in s.data})}}return s.common.async?Promise.resolve().then(async()=>{let g=[];for(let c of a){let E=await c.key,Q=await c.value;g.push({key:E,value:Q,alwaysSet:c.alwaysSet})}return g}).then(g=>NA.mergeObjectSync(r,g)):NA.mergeObjectSync(r,a)}get shape(){return this._def.shape()}strict(A){return k.errToObj,new e({...this._def,unknownKeys:"strict",...A!==void 0?{errorMap:(t,r)=>{let s=this._def.errorMap?.(t,r).message??r.defaultError;return t.code==="unrecognized_keys"?{message:k.errToObj(A).message??s}:{message:s}}}:{}})}strip(){return new e({...this._def,unknownKeys:"strip"})}passthrough(){return new e({...this._def,unknownKeys:"passthrough"})}extend(A){return new e({...this._def,shape:()=>({...this._def.shape(),...A})})}merge(A){return new e({unknownKeys:A._def.unknownKeys,catchall:A._def.catchall,shape:()=>({...this._def.shape(),...A._def.shape()}),typeName:x.ZodObject})}setKey(A,t){return this.augment({[A]:t})}catchall(A){return new e({...this._def,catchall:A})}pick(A){let t={};for(let r of q.objectKeys(A))A[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new e({...this._def,shape:()=>t})}omit(A){let t={};for(let r of q.objectKeys(this.shape))A[r]||(t[r]=this.shape[r]);return new e({...this._def,shape:()=>t})}deepPartial(){return Ds(this)}partial(A){let t={};for(let r of q.objectKeys(this.shape)){let s=this.shape[r];A&&!A[r]?t[r]=s:t[r]=s.optional()}return new e({...this._def,shape:()=>t})}required(A){let t={};for(let r of q.objectKeys(this.shape))if(A&&!A[r])t[r]=this.shape[r];else{let n=this.shape[r];for(;n instanceof Ne;)n=n._def.innerType;t[r]=n}return new e({...this._def,shape:()=>t})}keyof(){return Pu(q.objectKeys(this.shape))}};se.create=(e,A)=>new se({shape:()=>e,unknownKeys:"strip",catchall:Te.create(),typeName:x.ZodObject,...T(A)});se.strictCreate=(e,A)=>new se({shape:()=>e,unknownKeys:"strict",catchall:Te.create(),typeName:x.ZodObject,...T(A)});se.lazycreate=(e,A)=>new se({shape:e,unknownKeys:"strip",catchall:Te.create(),typeName:x.ZodObject,...T(A)});var ur=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=this._def.options;function s(n){for(let o of n)if(o.result.status==="valid")return o.result;for(let o of n)if(o.result.status==="dirty")return t.common.issues.push(...o.ctx.common.issues),o.result;let i=n.map(o=>new re(o.ctx.common.issues));return p(t,{code:l.invalid_union,unionErrors:i}),L}if(t.common.async)return Promise.all(r.map(async n=>{let i={...t,common:{...t.common,issues:[]},parent:null};return{result:await n._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(s);{let n,i=[];for(let a of r){let g={...t,common:{...t.common,issues:[]},parent:null},c=a._parseSync({data:t.data,path:t.path,parent:g});if(c.status==="valid")return c;c.status==="dirty"&&!n&&(n={result:c,ctx:g}),g.common.issues.length&&i.push(g.common.issues)}if(n)return t.common.issues.push(...n.ctx.common.issues),n.result;let o=i.map(a=>new re(a));return p(t,{code:l.invalid_union,unionErrors:o}),L}}get options(){return this._def.options}};ur.create=(e,A)=>new ur({options:e,typeName:x.ZodUnion,...T(A)});var ft=e=>e instanceof fr?ft(e.schema):e instanceof Se?ft(e.innerType()):e instanceof pr?[e.value]:e instanceof yr?e.options:e instanceof wr?q.objectValues(e.enum):e instanceof mr?ft(e._def.innerType):e instanceof Ir?[void 0]:e instanceof lr?[null]:e instanceof Ne?[void 0,...ft(e.unwrap())]:e instanceof rt?[null,...ft(e.unwrap())]:e instanceof wn||e instanceof Rr?ft(e.unwrap()):e instanceof Dr?ft(e._def.innerType):[],Fo=class e extends V{_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.object)return p(t,{code:l.invalid_type,expected:w.object,received:t.parsedType}),L;let r=this.discriminator,s=t.data[r],n=this.optionsMap.get(s);return n?t.common.async?n._parseAsync({data:t.data,path:t.path,parent:t}):n._parseSync({data:t.data,path:t.path,parent:t}):(p(t,{code:l.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),L)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(A,t,r){let s=new Map;for(let n of t){let i=ft(n.shape[A]);if(!i.length)throw new Error(`A discriminator value for key \`${A}\` could not be extracted from all schema options`);for(let o of i){if(s.has(o))throw new Error(`Discriminator property ${String(A)} has duplicate value ${String(o)}`);s.set(o,n)}}return new e({typeName:x.ZodDiscriminatedUnion,discriminator:A,options:t,optionsMap:s,...T(r)})}};function gE(e,A){let t=et(e),r=et(A);if(e===A)return{valid:!0,data:e};if(t===w.object&&r===w.object){let s=q.objectKeys(A),n=q.objectKeys(e).filter(o=>s.indexOf(o)!==-1),i={...e,...A};for(let o of n){let a=gE(e[o],A[o]);if(!a.valid)return{valid:!1};i[o]=a.data}return{valid:!0,data:i}}else if(t===w.array&&r===w.array){if(e.length!==A.length)return{valid:!1};let s=[];for(let n=0;n{if(bo(n)||bo(i))return L;let o=gE(n.value,i.value);return o.valid?((No(n)||No(i))&&t.dirty(),{status:t.value,value:o.data}):(p(r,{code:l.invalid_intersection_types}),L)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([n,i])=>s(n,i)):s(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}};dr.create=(e,A,t)=>new dr({left:e,right:A,typeName:x.ZodIntersection,...T(t)});var tt=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.array)return p(r,{code:l.invalid_type,expected:w.array,received:r.parsedType}),L;if(r.data.lengththis._def.items.length&&(p(r,{code:l.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());let n=[...r.data].map((i,o)=>{let a=this._def.items[o]||this._def.rest;return a?a._parse(new Fe(r,i,r.path,o)):null}).filter(i=>!!i);return r.common.async?Promise.all(n).then(i=>NA.mergeArray(t,i)):NA.mergeArray(t,n)}get items(){return this._def.items}rest(A){return new e({...this._def,rest:A})}};tt.create=(e,A)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new tt({items:e,typeName:x.ZodTuple,rest:null,...T(A)})};var So=class e extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.object)return p(r,{code:l.invalid_type,expected:w.object,received:r.parsedType}),L;let s=[],n=this._def.keyType,i=this._def.valueType;for(let o in r.data)s.push({key:n._parse(new Fe(r,o,r.path,o)),value:i._parse(new Fe(r,r.data[o],r.path,o)),alwaysSet:o in r.data});return r.common.async?NA.mergeObjectAsync(t,s):NA.mergeObjectSync(t,s)}get element(){return this._def.valueType}static create(A,t,r){return t instanceof V?new e({keyType:A,valueType:t,typeName:x.ZodRecord,...T(r)}):new e({keyType:Gt.create(),valueType:A,typeName:x.ZodRecord,...T(t)})}},bs=class extends V{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.map)return p(r,{code:l.invalid_type,expected:w.map,received:r.parsedType}),L;let s=this._def.keyType,n=this._def.valueType,i=[...r.data.entries()].map(([o,a],g)=>({key:s._parse(new Fe(r,o,r.path,[g,"key"])),value:n._parse(new Fe(r,a,r.path,[g,"value"]))}));if(r.common.async){let o=new Map;return Promise.resolve().then(async()=>{for(let a of i){let g=await a.key,c=await a.value;if(g.status==="aborted"||c.status==="aborted")return L;(g.status==="dirty"||c.status==="dirty")&&t.dirty(),o.set(g.value,c.value)}return{status:t.value,value:o}})}else{let o=new Map;for(let a of i){let g=a.key,c=a.value;if(g.status==="aborted"||c.status==="aborted")return L;(g.status==="dirty"||c.status==="dirty")&&t.dirty(),o.set(g.value,c.value)}return{status:t.value,value:o}}}};bs.create=(e,A,t)=>new bs({valueType:A,keyType:e,typeName:x.ZodMap,...T(t)});var Ns=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.parsedType!==w.set)return p(r,{code:l.invalid_type,expected:w.set,received:r.parsedType}),L;let s=this._def;s.minSize!==null&&r.data.sizes.maxSize.value&&(p(r,{code:l.too_big,maximum:s.maxSize.value,type:"set",inclusive:!0,exact:!1,message:s.maxSize.message}),t.dirty());let n=this._def.valueType;function i(a){let g=new Set;for(let c of a){if(c.status==="aborted")return L;c.status==="dirty"&&t.dirty(),g.add(c.value)}return{status:t.value,value:g}}let o=[...r.data.values()].map((a,g)=>n._parse(new Fe(r,a,r.path,g)));return r.common.async?Promise.all(o).then(a=>i(a)):i(o)}min(A,t){return new e({...this._def,minSize:{value:A,message:k.toString(t)}})}max(A,t){return new e({...this._def,maxSize:{value:A,message:k.toString(t)}})}size(A,t){return this.min(A,t).max(A,t)}nonempty(A){return this.min(1,A)}};Ns.create=(e,A)=>new Ns({valueType:e,minSize:null,maxSize:null,typeName:x.ZodSet,...T(A)});var Uo=class e extends V{constructor(){super(...arguments),this.validate=this.implement}_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.function)return p(t,{code:l.invalid_type,expected:w.function,received:t.parsedType}),L;function r(o,a){return yn({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ws(),dt].filter(g=>!!g),issueData:{code:l.invalid_arguments,argumentsError:a}})}function s(o,a){return yn({data:o,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,ws(),dt].filter(g=>!!g),issueData:{code:l.invalid_return_type,returnTypeError:a}})}let n={errorMap:t.common.contextualErrorMap},i=t.data;if(this._def.returns instanceof Ht){let o=this;return vA(async function(...a){let g=new re([]),c=await o._def.args.parseAsync(a,n).catch(B=>{throw g.addIssue(r(a,B)),g}),E=await Reflect.apply(i,this,c);return await o._def.returns._def.type.parseAsync(E,n).catch(B=>{throw g.addIssue(s(E,B)),g})})}else{let o=this;return vA(function(...a){let g=o._def.args.safeParse(a,n);if(!g.success)throw new re([r(a,g.error)]);let c=Reflect.apply(i,this,g.data),E=o._def.returns.safeParse(c,n);if(!E.success)throw new re([s(c,E.error)]);return E.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...A){return new e({...this._def,args:tt.create(A).rest(pt.create())})}returns(A){return new e({...this._def,returns:A})}implement(A){return this.parse(A)}strictImplement(A){return this.parse(A)}static create(A,t,r){return new e({args:A||tt.create([]).rest(pt.create()),returns:t||pt.create(),typeName:x.ZodFunction,...T(r)})}},fr=class extends V{get schema(){return this._def.getter()}_parse(A){let{ctx:t}=this._processInputParams(A);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}};fr.create=(e,A)=>new fr({getter:e,typeName:x.ZodLazy,...T(A)});var pr=class extends V{_parse(A){if(A.data!==this._def.value){let t=this._getOrReturnCtx(A);return p(t,{received:t.data,code:l.invalid_literal,expected:this._def.value}),L}return{status:"valid",value:A.data}}get value(){return this._def.value}};pr.create=(e,A)=>new pr({value:e,typeName:x.ZodLiteral,...T(A)});function Pu(e,A){return new yr({values:e,typeName:x.ZodEnum,...T(A)})}var yr=class e extends V{_parse(A){if(typeof A.data!="string"){let t=this._getOrReturnCtx(A),r=this._def.values;return p(t,{expected:q.joinValues(r),received:t.parsedType,code:l.invalid_type}),L}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(A.data)){let t=this._getOrReturnCtx(A),r=this._def.values;return p(t,{received:t.data,code:l.invalid_enum_value,options:r}),L}return vA(A.data)}get options(){return this._def.values}get enum(){let A={};for(let t of this._def.values)A[t]=t;return A}get Values(){let A={};for(let t of this._def.values)A[t]=t;return A}get Enum(){let A={};for(let t of this._def.values)A[t]=t;return A}extract(A,t=this._def){return e.create(A,{...this._def,...t})}exclude(A,t=this._def){return e.create(this.options.filter(r=>!A.includes(r)),{...this._def,...t})}};yr.create=Pu;var wr=class extends V{_parse(A){let t=q.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(A);if(r.parsedType!==w.string&&r.parsedType!==w.number){let s=q.objectValues(t);return p(r,{expected:q.joinValues(s),received:r.parsedType,code:l.invalid_type}),L}if(this._cache||(this._cache=new Set(q.getValidEnumValues(this._def.values))),!this._cache.has(A.data)){let s=q.objectValues(t);return p(r,{received:r.data,code:l.invalid_enum_value,options:s}),L}return vA(A.data)}get enum(){return this._def.values}};wr.create=(e,A)=>new wr({values:e,typeName:x.ZodNativeEnum,...T(A)});var Ht=class extends V{unwrap(){return this._def.type}_parse(A){let{ctx:t}=this._processInputParams(A);if(t.parsedType!==w.promise&&t.common.async===!1)return p(t,{code:l.invalid_type,expected:w.promise,received:t.parsedType}),L;let r=t.parsedType===w.promise?t.data:Promise.resolve(t.data);return vA(r.then(s=>this._def.type.parseAsync(s,{path:t.path,errorMap:t.common.contextualErrorMap})))}};Ht.create=(e,A)=>new Ht({type:e,typeName:x.ZodPromise,...T(A)});var Se=class extends V{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===x.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(A){let{status:t,ctx:r}=this._processInputParams(A),s=this._def.effect||null,n={addIssue:i=>{p(r,i),i.fatal?t.abort():t.dirty()},get path(){return r.path}};if(n.addIssue=n.addIssue.bind(n),s.type==="preprocess"){let i=s.transform(r.data,n);if(r.common.async)return Promise.resolve(i).then(async o=>{if(t.value==="aborted")return L;let a=await this._def.schema._parseAsync({data:o,path:r.path,parent:r});return a.status==="aborted"?L:a.status==="dirty"?Er(a.value):t.value==="dirty"?Er(a.value):a});{if(t.value==="aborted")return L;let o=this._def.schema._parseSync({data:i,path:r.path,parent:r});return o.status==="aborted"?L:o.status==="dirty"?Er(o.value):t.value==="dirty"?Er(o.value):o}}if(s.type==="refinement"){let i=o=>{let a=s.refinement(o,n);if(r.common.async)return Promise.resolve(a);if(a instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(r.common.async===!1){let o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?L:(o.status==="dirty"&&t.dirty(),i(o.value),{status:t.value,value:o.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>o.status==="aborted"?L:(o.status==="dirty"&&t.dirty(),i(o.value).then(()=>({status:t.value,value:o.value}))))}if(s.type==="transform")if(r.common.async===!1){let i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Jt(i))return L;let o=s.transform(i.value,n);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:o}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>Jt(i)?Promise.resolve(s.transform(i.value,n)).then(o=>({status:t.value,value:o})):L);q.assertNever(s)}};Se.create=(e,A,t)=>new Se({schema:e,typeName:x.ZodEffects,effect:A,...T(t)});Se.createWithPreprocess=(e,A,t)=>new Se({schema:A,effect:{type:"preprocess",transform:e},typeName:x.ZodEffects,...T(t)});var Ne=class extends V{_parse(A){return this._getType(A)===w.undefined?vA(void 0):this._def.innerType._parse(A)}unwrap(){return this._def.innerType}};Ne.create=(e,A)=>new Ne({innerType:e,typeName:x.ZodOptional,...T(A)});var rt=class extends V{_parse(A){return this._getType(A)===w.null?vA(null):this._def.innerType._parse(A)}unwrap(){return this._def.innerType}};rt.create=(e,A)=>new rt({innerType:e,typeName:x.ZodNullable,...T(A)});var mr=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=t.data;return t.parsedType===w.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}};mr.create=(e,A)=>new mr({innerType:e,typeName:x.ZodDefault,defaultValue:typeof A.default=="function"?A.default:()=>A.default,...T(A)});var Dr=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r={...t,common:{...t.common,issues:[]}},s=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return ms(s)?s.then(n=>({status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})})):{status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new re(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}};Dr.create=(e,A)=>new Dr({innerType:e,typeName:x.ZodCatch,catchValue:typeof A.catch=="function"?A.catch:()=>A.catch,...T(A)});var Fs=class extends V{_parse(A){if(this._getType(A)!==w.nan){let r=this._getOrReturnCtx(A);return p(r,{code:l.invalid_type,expected:w.nan,received:r.parsedType}),L}return{status:"valid",value:A.data}}};Fs.create=e=>new Fs({typeName:x.ZodNaN,...T(e)});var xS=Symbol("zod_brand"),wn=class extends V{_parse(A){let{ctx:t}=this._processInputParams(A),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}},mn=class e extends V{_parse(A){let{status:t,ctx:r}=this._processInputParams(A);if(r.common.async)return(async()=>{let n=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return n.status==="aborted"?L:n.status==="dirty"?(t.dirty(),Er(n.value)):this._def.out._parseAsync({data:n.value,path:r.path,parent:r})})();{let s=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?L:s.status==="dirty"?(t.dirty(),{status:"dirty",value:s.value}):this._def.out._parseSync({data:s.value,path:r.path,parent:r})}}static create(A,t){return new e({in:A,out:t,typeName:x.ZodPipeline})}},Rr=class extends V{_parse(A){let t=this._def.innerType._parse(A),r=s=>(Jt(s)&&(s.value=Object.freeze(s.value)),s);return ms(t)?t.then(s=>r(s)):r(t)}unwrap(){return this._def.innerType}};Rr.create=(e,A)=>new Rr({innerType:e,typeName:x.ZodReadonly,...T(A)});function _u(e,A){let t=typeof e=="function"?e(A):typeof e=="string"?{message:e}:e;return typeof t=="string"?{message:t}:t}function Zu(e,A={},t){return e?Vt.create().superRefine((r,s)=>{let n=e(r);if(n instanceof Promise)return n.then(i=>{if(!i){let o=_u(A,r),a=o.fatal??t??!0;s.addIssue({code:"custom",...o,fatal:a})}});if(!n){let i=_u(A,r),o=i.fatal??t??!0;s.addIssue({code:"custom",...i,fatal:o})}}):Vt.create()}var MS={object:se.lazycreate},x;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(x||(x={}));var vS=(e,A={message:`Input not instance of ${e.name}`})=>Zu(t=>t instanceof e,A),ju=Gt.create,Xu=Qr.create,YS=Fs.create,TS=Cr.create,zu=Br.create,JS=hr.create,GS=Rs.create,VS=Ir.create,HS=lr.create,_S=Vt.create,qS=pt.create,OS=Te.create,WS=ks.create,PS=yt.create,ZS=se.create,jS=se.strictCreate,XS=ur.create,zS=Fo.create,KS=dr.create,$S=tt.create,AU=So.create,eU=bs.create,tU=Ns.create,rU=Uo.create,sU=fr.create,nU=pr.create,iU=yr.create,oU=wr.create,aU=Ht.create,gU=Se.create,cU=Ne.create,EU=rt.create,QU=Se.createWithPreprocess,CU=mn.create,BU=()=>ju().optional(),hU=()=>Xu().optional(),IU=()=>zu().optional(),lU={string:e=>Gt.create({...e,coerce:!0}),number:e=>Qr.create({...e,coerce:!0}),boolean:e=>Br.create({...e,coerce:!0}),bigint:e=>Cr.create({...e,coerce:!0}),date:e=>hr.create({...e,coerce:!0})};var uU=L;var kr=kn(pn(),1),nd=kn(pn(),1);var Ku=(e=0)=>A=>`\x1B[${A+e}m`,$u=(e=0)=>A=>`\x1B[${38+e};5;${A}m`,Ad=(e=0)=>(A,t,r)=>`\x1B[${38+e};2;${A};${t};${r}m`,gA={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},cM=Object.keys(gA.modifier),dU=Object.keys(gA.color),fU=Object.keys(gA.bgColor),EM=[...dU,...fU];function pU(){let e=new Map;for(let[A,t]of Object.entries(gA)){for(let[r,s]of Object.entries(t))gA[r]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[r]=gA[r],e.set(s[0],s[1]);Object.defineProperty(gA,A,{value:t,enumerable:!1})}return Object.defineProperty(gA,"codes",{value:e,enumerable:!1}),gA.color.close="\x1B[39m",gA.bgColor.close="\x1B[49m",gA.color.ansi=Ku(),gA.color.ansi256=$u(),gA.color.ansi16m=Ad(),gA.bgColor.ansi=Ku(10),gA.bgColor.ansi256=$u(10),gA.bgColor.ansi16m=Ad(10),Object.defineProperties(gA,{rgbToAnsi256:{value:(A,t,r)=>A===t&&t===r?A<8?16:A>248?231:Math.round((A-8)/247*24)+232:16+36*Math.round(A/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value:A=>{let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(A.toString(16));if(!t)return[0,0,0];let[r]=t;r.length===3&&(r=[...r].map(n=>n+n).join(""));let s=Number.parseInt(r,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:A=>gA.rgbToAnsi256(...gA.hexToRgb(A)),enumerable:!1},ansi256ToAnsi:{value:A=>{if(A<8)return 30+A;if(A<16)return 90+(A-8);let t,r,s;if(A>=232)t=((A-232)*10+8)/255,r=t,s=t;else{A-=16;let o=A%36;t=Math.floor(A/36)/5,r=Math.floor(o/6)/5,s=o%6/5}let n=Math.max(t,r,s)*2;if(n===0)return 30;let i=30+(Math.round(s)<<2|Math.round(r)<<1|Math.round(t));return n===2&&(i+=60),i},enumerable:!1},rgbToAnsi:{value:(A,t,r)=>gA.ansi256ToAnsi(gA.rgbToAnsi256(A,t,r)),enumerable:!1},hexToAnsi:{value:A=>gA.ansi256ToAnsi(gA.hexToAnsi256(A)),enumerable:!1}}),gA}var QM=pU();function ed(e){return kr.getInput(e,{trimWhitespace:!0})||null}function td(e){return kr.getBooleanInput(e,{trimWhitespace:!0})}function rd(e){return kr.getMultilineInput(e,{trimWhitespace:!0})}function sd(e){return Object.fromEntries(kr.getMultilineInput(e,{trimWhitespace:!0}).reduce((A,t)=>{let[,r,s]=t.match(/^(.+?):(.+)$/)||[];return r&&s&&A.push([r.trim(),s.trim()]),A},[]))}async function od(){try{let{container:e,experiments:A,templates:t,wpOptions:r}=await Je.group("Parsing inputs",yU);await Je.group("Validating wp-env installation",async()=>{await _t({container:e,command:["wp","core","version"],error:"Can't find a running `wp-env` instance. Please make sure it's running an accessible. (try using `setup-wp-env` action before this one)"})}),await Je.group("Activating Elementor",async()=>{await _t({container:e,command:["wp","plugin","activate","elementor"],error:"Can't activate Elementor. Please make sure it's installed."})}),await Je.group("Setting WP Options",async()=>{for(let{key:s,value:n}of r)await _t({container:e,command:["wp","option","update",s,n],error:`Failed to set option: ${s} to ${n}`})}),A.on.length>0&&await Je.group("Activating Experiments",async()=>{await _t({container:e,command:["wp","--user=admin","elementor","experiments","activate",A.on.join(",")],error:`Failed to activate experiments: ${A.on.join(", ")}`})}),A.off.length>0&&await Je.group("Deactivating Experiments",async()=>{await _t({container:e,command:["wp","--user=admin","elementor","experiments","deactivate",A.off.join(",")],error:`Failed to deactivate experiments: ${A.off.join(", ")}`})}),t.length>0&&await Je.group("Importing Templates",async()=>{for(let s of t)await _t({container:e,command:["wp","--user=admin","elementor","library","import-dir",s],error:`Failed to import templates: ${s}`})}),await Je.group("Clearing Elementor and WP Cache",async()=>{await _t({container:e,command:["wp","cache","flush"],error:"Failed to flush wp cache"}),await _t({container:e,command:["wp","elementor","flush-css"],error:"Failed to flush elementor css cache"})})}catch(e){let A=e instanceof Error?e:new Error("An error occurred");Je.setFailed(A)}}async function yU(){try{let e=YA.object({env:YA.union([YA.literal("development"),YA.literal("testing")]),templates:YA.array(YA.string().regex(/^[a-z0-9-_./]+$/)),experiments:YA.record(YA.string().regex(/^[a-z0-9-_]+$/),YA.union([YA.literal("true"),YA.literal("false")])),enableSvgUpload:YA.boolean()}).parse({env:ed("env"),templates:rd("templates"),experiments:sd("experiments"),enableSvgUpload:td("enable-svg-upload")}),A=Object.entries(e.experiments);return{container:e.env==="development"?"cli":"tests-cli",templates:e.templates,wpOptions:wU({enableSvgUpload:e.enableSvgUpload}),experiments:{on:A.filter(([,t])=>t==="true").map(([t])=>t),off:A.filter(([,t])=>t==="false").map(([t])=>t)}}}catch(e){let A="Failed to parse inputs";throw e instanceof YA.ZodError&&(A=`${A}: ${e.errors.map(t=>`${t.path.join(", ")} - ${t.message}`).join(` `)}`),new Error(A,{cause:e})}}function wU({enableSvgUpload:e}){let A=[];return e&&A.push({key:"elementor_unfiltered_files_upload",value:"1"}),A}async function _t({container:e,command:A,error:t}){try{await id.exec("npx",["wp-env","run",e,...A])}catch(r){throw new Error(t,{cause:r})}}od(); /*! Bundled license information: diff --git a/actions/setup-elementor-env/main.ts b/actions/setup-elementor-env/main.ts index f40cf60b8f..d43aa723a3 100644 --- a/actions/setup-elementor-env/main.ts +++ b/actions/setup-elementor-env/main.ts @@ -21,11 +21,11 @@ export async function run() { }); }); - await core.group('Validating elementor being activated', async () => { + await core.group('Activating Elementor', async () => { await runOnContainer({ container, - command: ['wp', 'plugin', 'is-active', 'elementor'], - error: "Can't find an active Elementor installation. Please make sure it's installed and activated.", + command: ['wp', 'plugin', 'activate', 'elementor'], + error: "Can't activate Elementor. Please make sure it's installed.", }); }); From 1432c8b3b15c03fda828ca4a12785b5a15440cad Mon Sep 17 00:00:00 2001 From: annab1 <8426574+annab1@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:39:26 +0300 Subject: [PATCH 8/8] fix(test-actions): bump pinned WordPress core to 7.0.1 Elementor's latest release requires WordPress 6.8+ ("Current WordPress version (6.6) does not meet minimum requirements for Elementor"), so the Performance flow job's plugin activation was silently failing even though wp-env reported the plugin as active. Pin to the current stable core (7.0.1) instead of the outdated 6.6. Co-authored-by: Cursor --- .github/workflows/test-actions.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-actions.yml b/.github/workflows/test-actions.yml index ba5cad5401..9db9e2db35 100644 --- a/.github/workflows/test-actions.yml +++ b/.github/workflows/test-actions.yml @@ -20,7 +20,7 @@ jobs: uses: ./actions/setup-wp-env with: php: '8.0' - wp: '6.6' + wp: '7.0.1' active-theme: 'hello-elementor' themes: |- https://downloads.wordpress.org/theme/hello-elementor.zip