@postxl/generators 1.16.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,221 @@
1
+ # Run E2E Tests
2
+
3
+ You are tasked with helping the user run end-to-end (E2E) tests in the Claude Code environment (VS Code with Claude assistance).
4
+
5
+ ## Overview
6
+
7
+ The E2E tests use Playwright to verify that the application works as expected from the user's perspective. This command works for the <% schema.slug %> project.
8
+
9
+ **Tests always run inside a Docker container** to ensure snapshot consistency across different developer machines and CI. Docker guarantees identical rendering (fonts, DPI, browser version) so snapshot comparisons are deterministic regardless of the host OS.
10
+
11
+ > **⚠️ TERMINAL MANAGEMENT IN CLAUDE CODE**: When running commands through Claude, terminal reuse can cause background services to be interrupted. To avoid this, manually open separate terminal windows using the VS Code Terminal menu before starting each service (Backend, Frontend, Tests). This ensures each service runs in its own isolated terminal.
12
+
13
+ ## E2E Test Modes
14
+
15
+ The project supports two types of E2E tests:
16
+
17
+ - **Stateful**: Tests that can change data. Each test runs a data reset before execution. Slower, uses limited seed data.
18
+ - **Stateless**: Tests that don't alter server data, only test views. Faster, can use larger/more complex seed data.
19
+
20
+ **For Claude Code environment, use stateless mode** as the default.
21
+
22
+ ## Prerequisites
23
+
24
+ Before running E2E tests, ensure:
25
+
26
+ 1. **Docker is running** on the host machine
27
+ 2. **Backend is running** in E2E stateless mode (or let the script start it)
28
+ 3. **Frontend is built and running** in E2E mode with Docker URLs (or let the script build it)
29
+
30
+ ## Running E2E Tests
31
+
32
+ ### Option 1: Automated Script (Recommended)
33
+
34
+ The easiest way to run E2E tests is using the automated script:
35
+
36
+ ```bash
37
+ <% cdProjectDir %>./scripts/e2e.sh
38
+ ```
39
+
40
+ **What the script does:**
41
+
42
+ 1. ✅ Auto-detects pnpm and activates Node.js 24+ (via nvm/fnm/volta)
43
+ 2. ✅ Checks if backend/frontend are already running (reuses them if available)
44
+ 3. 🚀 Starts backend in E2E stateless mode (if needed)
45
+ 4. 🏗️ Builds frontend with Docker URLs and starts preview server (if needed)
46
+ 5. 🧪 Runs E2E tests inside a Docker container
47
+ 6. 🧹 Cleans up only script-started processes on exit (Ctrl+C safe)
48
+
49
+ **Benefits:**
50
+
51
+ - Single command to run everything
52
+ - Automatic service detection and reuse
53
+ - Only cleans up processes it started (your manually-started services are preserved)
54
+ - Detailed logs saved to `.e2e-backend.log` and `.e2e-frontend.log`
55
+ - Works great with Claude Code
56
+
57
+ ```bash
58
+ # Run E2E tests (Docker mode)
59
+ <% cdProjectDir %>./scripts/e2e.sh
60
+
61
+ # Just build the Docker image
62
+ <% cdProjectDir %>./scripts/e2e.sh --build-image
63
+ ```
64
+
65
+ ### Option 2: Manual Step-by-Step Process
66
+
67
+ If you prefer to start services manually before running the script:
68
+
69
+ #### 1. Start Backend in E2E Stateless Mode
70
+
71
+ **Open a new terminal** and run:
72
+
73
+ ```bash
74
+ cd <% backendPath %>
75
+ pnpm e2e:stateless
76
+ ```
77
+
78
+ **Note**: Keep this terminal running.
79
+
80
+ #### 2. Build and Start Frontend in E2E Mode
81
+
82
+ **Open a new terminal** and run:
83
+
84
+ ```bash
85
+ cd <% frontendPath %>
86
+ pnpm e2e:build
87
+ ```
88
+
89
+ **Note**: This builds the production version with `host.docker.internal` URLs required for Docker-based testing. Keep this terminal running.
90
+
91
+ **Important**: Do NOT use `pnpm dev` for E2E tests — the Vite dev server uses `localhost` URLs which are not reachable from inside the Docker container.
92
+
93
+ #### 3. Run E2E Tests
94
+
95
+ **Open a new terminal** and run:
96
+
97
+ ```bash
98
+ <% cdProjectDir %>./scripts/e2e.sh
99
+ ```
100
+
101
+ The script will detect the running backend and frontend, skip starting them, and run the Docker test container directly.
102
+
103
+ ## Test Results and Reports
104
+
105
+ ### View Test Results
106
+
107
+ - Detailed test results are saved in the `test-results/` directory
108
+ - HTML report available in `playwright-report/`
109
+ - Test coverage data in `monocart-report/`
110
+
111
+ ## Investigating Test Failures
112
+
113
+ When tests fail, follow this investigation workflow **automatically** before asking the user for help.
114
+
115
+ ### Step 1: Identify Failed Tests
116
+
117
+ 1. Parse the test runner output to identify which tests failed and their error messages
118
+ 2. Read the last run status file for a quick summary:
119
+ ```bash
120
+ cat e2e/test-results/.last-run.json
121
+ ```
122
+ 3. Read the monocart report for detailed structured results (flaky detection, retry info):
123
+ ```bash
124
+ cat e2e/monocart-report/index.json
125
+ ```
126
+
127
+ ### Step 2: Analyze Failure Type
128
+
129
+ Determine the failure category:
130
+
131
+ - **Snapshot mismatch**: Expected vs actual screenshot differs. Look for `toHaveScreenshot` errors and compare images in `e2e/test-results/` and `e2e/specs/*-snapshots/`
132
+ - **Element not found / Timeout**: A locator couldn't find an element or an action timed out. Usually indicates a selector change, missing wait, or race condition
133
+ - **Assertion failure**: A `toEqual`, `toContain`, `toBeVisible` etc. check failed. Check if the expected value or app behavior changed
134
+ - **Network/Connection error**: Backend or frontend unreachable. See Troubleshooting section below
135
+ - **Flaky test**: Test passed on retry (monocart marks these as `caseType: "flaky"`). Needs stabilization
136
+
137
+ ### Step 3: Read Source Code and Artifacts
138
+
139
+ 1. **Read the failing spec file** to understand what the test does:
140
+ ```
141
+ e2e/specs/<test-file>.spec.ts
142
+ ```
143
+ 2. **Check screenshots** for visual context — read any `.png` files in `e2e/test-results/` to see what the page actually looked like
144
+ 3. **Check trace files** if available (captured on first retry): `e2e/test-results/*/trace.zip`
145
+ 4. **Read related page/component code** if the test interacts with specific frontend components or backend endpoints
146
+
147
+ ### Step 4: Fix and Re-run
148
+
149
+ Based on the failure type:
150
+
151
+ **For snapshot mismatches:**
152
+ - If the visual change is intentional (e.g., you modified a component), update the snapshot:
153
+ ```bash
154
+ <% cdProjectDir %>./scripts/e2e.sh # re-run — snapshots update inside Docker for consistency
155
+ ```
156
+ - If unintentional, investigate what caused the rendering difference
157
+
158
+ **For flaky tests (timing/race conditions):**
159
+ - Add explicit waits using the project's `waitForPageLoaded()` utility or `page.waitForSelector()`
160
+ - Replace `page.waitForTimeout()` with condition-based waits (e.g., `expect(locator).toBeVisible()`)
161
+ - Use the `pageStability` fixture to wait for API requests to complete
162
+ - Check if animations or transitions need to be disabled (the fixture auto-disables them, but custom CSS animations may need attention)
163
+
164
+ **For element not found errors:**
165
+ - Verify the selector matches the current DOM structure
166
+ - Check if a data-testid was renamed or removed
167
+ - Add a `waitForPageLoaded()` call before interacting with the element
168
+
169
+ **For assertion failures:**
170
+ - Check if the expected values need updating due to intentional code changes
171
+ - Verify test data setup (seed data, mocked data) is correct
172
+
173
+ ### Step 5: Verify the Fix
174
+
175
+ After applying fixes, re-run the tests:
176
+ ```bash
177
+ <% cdProjectDir %>./scripts/e2e.sh
178
+ ```
179
+
180
+ If a test was flaky, consider running it multiple times to confirm stability. You can run a single test file:
181
+ ```bash
182
+ # Inside the Docker container or via the script, target specific tests
183
+ <% cdProjectDir %>./scripts/e2e.sh # full suite to confirm no regressions
184
+ ```
185
+
186
+ ## Troubleshooting
187
+
188
+ ### Connection Refused Errors
189
+
190
+ If tests fail with connection errors like "connect ECONNREFUSED":
191
+
192
+ 1. **Verify Docker is running**: The test container needs Docker to be available
193
+ 2. **Verify backend is running**: Check that the backend is listening on port 4000 and E2E helper on port 3001
194
+ 3. **Verify frontend is running**: Check that the frontend preview server is on port 3000
195
+ 4. **Verify frontend was built with Docker URLs**: The frontend must be built with `VITE_PUBLIC_API_URL=http://host.docker.internal:3001`. If you started it with `pnpm dev`, restart with `pnpm e2e:build`
196
+
197
+ ### Greeting Test Shows "Hi !" (Empty User)
198
+
199
+ This means the frontend cannot reach the backend API from inside the Docker container. The frontend was likely built with `localhost` URLs instead of `host.docker.internal`. Fix by:
200
+
201
+ 1. Stopping the frontend
202
+ 2. Rebuilding with `pnpm e2e:build` (uses Docker URLs)
203
+ 3. Or let `./scripts/e2e.sh` handle everything automatically
204
+
205
+ ### Database Connection Issues
206
+
207
+ If tests fail with database authentication errors:
208
+
209
+ 1. Ensure your local database is running
210
+ 2. Check database credentials in the backend configuration
211
+ 3. Verify the database exists and migrations have been run
212
+
213
+ ## Important Notes
214
+
215
+ - **Tests always run in Docker** for consistent snapshots and CI parity
216
+ - **The script preserves your services**: Cleanup only kills processes the script started
217
+ - **Frontend must use Docker URLs**: Built with `host.docker.internal` (via `pnpm e2e:build` or the script)
218
+ - **Keep backend and frontend running** while executing tests
219
+ - **Use stateless mode** as default for better performance
220
+ - **Test results** are saved in `test-results/` directory
221
+ - **CRITICAL**: Always run tests in a NEW terminal separate from backend and frontend terminals to avoid interrupting the servers
@@ -0,0 +1,399 @@
1
+ #!/bin/bash
2
+
3
+ # E2E Test Runner Script
4
+ # This script starts backend, frontend, and runs E2E tests in Docker automatically.
5
+ #
6
+ # The script auto-detects pnpm and Node.js 24+ regardless of how it's invoked
7
+ # (interactive shell, non-interactive subprocess, CI, Claude Code, etc.)
8
+
9
+ set -e # Exit on error
10
+
11
+ # Colors for output
12
+ RED='\033[0;31m'
13
+ GREEN='\033[0;32m'
14
+ YELLOW='\033[1;33m'
15
+ BLUE='\033[0;34m'
16
+ NC='\033[0m' # No Color
17
+
18
+ # Get the directory where this script is located
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
21
+ MONOREPO_ROOT=<% monorepoRootExpr %>
22
+
23
+ # Ports
24
+ BACKEND_PORT=3001
25
+ FRONTEND_PORT=3000
26
+ BACKEND_MAIN_PORT=4000
27
+
28
+ # PID file paths
29
+ BACKEND_PID_FILE="$PROJECT_DIR/.e2e-backend.pid"
30
+ FRONTEND_PID_FILE="$PROJECT_DIR/.e2e-frontend.pid"
31
+
32
+ # Docker image name
33
+ DOCKER_IMAGE="e2e-pxl-env"
34
+
35
+ # --------------------------------------------------------------------------
36
+ # Environment setup: resolve pnpm and Node.js 24+
37
+ # --------------------------------------------------------------------------
38
+ # This section ensures pnpm and the correct Node.js version are available
39
+ # even in non-interactive shells (e.g., Claude Code, CI, cron, subprocesses).
40
+
41
+ setup_environment() {
42
+ # Common paths where pnpm might be installed
43
+ local search_paths=(
44
+ "$HOME/.local/share/pnpm"
45
+ "$HOME/.pnpm"
46
+ "/opt/homebrew/bin"
47
+ "/usr/local/bin"
48
+ "$HOME/.corepack/bin"
49
+ )
50
+
51
+ # Add search paths to PATH if they exist and aren't already in PATH
52
+ for p in "${search_paths[@]}"; do
53
+ if [[ -d "$p" ]] && [[ ":$PATH:" != *":$p:"* ]]; then
54
+ export PATH="$p:$PATH"
55
+ fi
56
+ done
57
+
58
+ # Resolve pnpm
59
+ PNPM_BIN=$(command -v pnpm 2>/dev/null || true)
60
+ if [[ -z "$PNPM_BIN" ]]; then
61
+ echo -e "${RED}❌ pnpm not found. Please install pnpm (https://pnpm.io/installation)${NC}"
62
+ exit 1
63
+ fi
64
+
65
+ # Check current Node.js version - we need 24+ for ESM require() support
66
+ local node_version
67
+ node_version=$(node --version 2>/dev/null | sed 's/^v//' | cut -d. -f1)
68
+
69
+ if [[ -n "$node_version" ]] && [[ "$node_version" -ge 24 ]]; then
70
+ echo -e "${GREEN}✅ Node.js $(node --version) detected${NC}"
71
+ return 0
72
+ fi
73
+
74
+ # Try to activate Node.js 24+ via nvm
75
+ if [[ -s "$HOME/.nvm/nvm.sh" ]]; then
76
+ export NVM_DIR="$HOME/.nvm"
77
+ # shellcheck source=/dev/null
78
+ source "$NVM_DIR/nvm.sh" 2>/dev/null
79
+
80
+ # Find a Node.js 24+ version installed via nvm
81
+ local nvm_node
82
+ nvm_node=$(nvm ls --no-alias --no-colors 2>/dev/null | grep -oE 'v2[4-9]\.[0-9]+\.[0-9]+|v[3-9][0-9]\.[0-9]+\.[0-9]+' | sort -V | tail -1 || true)
83
+
84
+ if [[ -n "$nvm_node" ]]; then
85
+ echo -e "${BLUE}🔄 Activating $nvm_node via nvm...${NC}"
86
+ nvm use "$nvm_node" >/dev/null 2>&1
87
+ # Ensure nvm's bin dir is first in PATH so pnpm picks it up
88
+ export PATH="$NVM_BIN:$PATH"
89
+ echo -e "${GREEN}✅ Node.js $(node --version) activated via nvm${NC}"
90
+ return 0
91
+ fi
92
+ fi
93
+
94
+ # Try to activate Node.js 24+ via fnm
95
+ if command -v fnm >/dev/null 2>&1; then
96
+ local fnm_node
97
+ fnm_node=$(fnm list 2>/dev/null | grep -oE 'v2[4-9]\.[0-9]+\.[0-9]+|v[3-9][0-9]\.[0-9]+\.[0-9]+' | sort -V | tail -1 || true)
98
+
99
+ if [[ -n "$fnm_node" ]]; then
100
+ echo -e "${BLUE}🔄 Activating $fnm_node via fnm...${NC}"
101
+ eval "$(fnm env)" 2>/dev/null
102
+ fnm use "$fnm_node" >/dev/null 2>&1
103
+ echo -e "${GREEN}✅ Node.js $(node --version) activated via fnm${NC}"
104
+ return 0
105
+ fi
106
+ fi
107
+
108
+ # Try to activate Node.js 24+ via volta
109
+ if command -v volta >/dev/null 2>&1; then
110
+ echo -e "${BLUE}🔄 Using volta for Node.js management...${NC}"
111
+ # volta manages node automatically based on package.json
112
+ local volta_node
113
+ volta_node=$(node --version 2>/dev/null | sed 's/^v//' | cut -d. -f1)
114
+ if [[ "$volta_node" -ge 24 ]]; then
115
+ echo -e "${GREEN}✅ Node.js $(node --version) via volta${NC}"
116
+ return 0
117
+ fi
118
+ fi
119
+
120
+ # Node.js 24+ not found - warn but don't fail (pnpm devEngines might handle it)
121
+ echo -e "${YELLOW}⚠️ Node.js 24+ not found (current: $(node --version 2>/dev/null || echo 'none')).${NC}"
122
+ echo -e "${YELLOW} The project requires Node.js 24+ for ESM support.${NC}"
123
+ echo -e "${YELLOW} Install via: nvm install 24 / fnm install 24 / volta install node@24${NC}"
124
+ echo -e "${YELLOW} Continuing anyway (pnpm devEngines.runtime may auto-download it)...${NC}"
125
+ }
126
+
127
+ # Kill a process and all its descendants (children, grandchildren, etc.)
128
+ kill_tree() {
129
+ local pid=$1
130
+ local children
131
+ children=$(pgrep -P "$pid" 2>/dev/null || true)
132
+ for child in $children; do
133
+ kill_tree "$child"
134
+ done
135
+ kill "$pid" 2>/dev/null || true
136
+ }
137
+
138
+ # Kill any remaining process listening on a port
139
+ kill_port() {
140
+ local port=$1
141
+ local pids
142
+ pids=$(lsof -Pi :"$port" -sTCP:LISTEN -t 2>/dev/null || true)
143
+ if [[ -n "$pids" ]]; then
144
+ echo -e "${BLUE} Killing remaining process(es) on port $port...${NC}"
145
+ echo "$pids" | xargs kill 2>/dev/null || true
146
+ fi
147
+ }
148
+
149
+ # Cleanup function
150
+ cleanup() {
151
+ echo -e "\n${YELLOW}🧹 Cleaning up...${NC}"
152
+
153
+ # Kill backend if we started it
154
+ if [[ -f "$BACKEND_PID_FILE" ]]; then
155
+ BACKEND_PID=$(cat "$BACKEND_PID_FILE")
156
+ if ps -p "$BACKEND_PID" > /dev/null 2>&1; then
157
+ echo -e "${BLUE}⏹️ Stopping backend (PID: $BACKEND_PID)...${NC}"
158
+ kill_tree "$BACKEND_PID"
159
+ fi
160
+ rm -f "$BACKEND_PID_FILE"
161
+ # Ensure ports are fully released
162
+ sleep 0.5
163
+ kill_port $BACKEND_PORT
164
+ kill_port $BACKEND_MAIN_PORT
165
+ fi
166
+
167
+ # Kill frontend if we started it
168
+ if [[ -f "$FRONTEND_PID_FILE" ]]; then
169
+ FRONTEND_PID=$(cat "$FRONTEND_PID_FILE")
170
+ if ps -p "$FRONTEND_PID" > /dev/null 2>&1; then
171
+ echo -e "${BLUE}⏹️ Stopping frontend (PID: $FRONTEND_PID)...${NC}"
172
+ kill_tree "$FRONTEND_PID"
173
+ fi
174
+ rm -f "$FRONTEND_PID_FILE"
175
+ # Ensure port is fully released
176
+ sleep 0.5
177
+ kill_port $FRONTEND_PORT
178
+ fi
179
+
180
+ echo -e "${GREEN}✅ Cleanup complete${NC}"
181
+ }
182
+
183
+ # Register cleanup on script exit
184
+ trap cleanup EXIT INT TERM
185
+
186
+ # Check if services are already running
187
+ check_services() {
188
+ echo -e "${BLUE}🔍 Checking for existing services...${NC}"
189
+
190
+ BACKEND_RUNNING=false
191
+ FRONTEND_RUNNING=false
192
+
193
+ if lsof -Pi :$BACKEND_PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
194
+ echo -e "${YELLOW}⚠️ Backend already running on port $BACKEND_PORT${NC}"
195
+ BACKEND_RUNNING=true
196
+ fi
197
+
198
+ if lsof -Pi :$FRONTEND_PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
199
+ echo -e "${YELLOW}⚠️ Frontend already running on port $FRONTEND_PORT${NC}"
200
+ FRONTEND_RUNNING=true
201
+ fi
202
+ }
203
+
204
+ # Wait for a service to be ready
205
+ wait_for_service() {
206
+ local port=$1
207
+ local service_name=$2
208
+ local max_attempts=60 # 60 seconds timeout
209
+ local attempt=0
210
+
211
+ echo -e "${BLUE}⏳ Waiting for $service_name to be ready on port $port...${NC}"
212
+
213
+ while ! lsof -Pi :$port -sTCP:LISTEN -t >/dev/null 2>&1; do
214
+ attempt=$((attempt + 1))
215
+ if [[ $attempt -gt $max_attempts ]]; then
216
+ echo -e "${RED}❌ Timeout waiting for $service_name to start${NC}"
217
+ return 1
218
+ fi
219
+ sleep 1
220
+ done
221
+
222
+ echo -e "${GREEN}✅ $service_name is ready${NC}"
223
+ return 0
224
+ }
225
+
226
+ # Start backend
227
+ start_backend() {
228
+ if [[ "$BACKEND_RUNNING" == "true" ]]; then
229
+ echo -e "${GREEN}✅ Using existing backend on port $BACKEND_PORT${NC}"
230
+ return 0
231
+ fi
232
+
233
+ echo -e "${BLUE}🚀 Starting backend in E2E stateless mode...${NC}"
234
+ cd "$PROJECT_DIR/backend"
235
+
236
+ # Start backend in background and save PID
237
+ "$PNPM_BIN" e2e:stateless > "$PROJECT_DIR/.e2e-backend.log" 2>&1 &
238
+ echo $! > "$BACKEND_PID_FILE"
239
+
240
+ # Wait for backend to be ready
241
+ if ! wait_for_service $BACKEND_PORT "Backend"; then
242
+ echo -e "${RED}❌ Failed to start backend${NC}"
243
+ echo -e "${YELLOW}📋 Backend log (last 20 lines):${NC}"
244
+ tail -n 20 "$PROJECT_DIR/.e2e-backend.log"
245
+ return 1
246
+ fi
247
+ }
248
+
249
+ # Build and start frontend
250
+ start_frontend() {
251
+ if [[ "$FRONTEND_RUNNING" == "true" ]]; then
252
+ echo -e "${GREEN}✅ Using existing frontend on port $FRONTEND_PORT${NC}"
253
+ return 0
254
+ fi
255
+
256
+ echo -e "${BLUE}🏗️ Building frontend for E2E...${NC}"
257
+ cd "$PROJECT_DIR/frontend"
258
+
259
+ # Build frontend with Docker URLs (tests run inside Docker container accessing host services)
260
+ if ! VITE_PUBLIC_API_URL=http://host.docker.internal:3001 VITE_PUBLIC_BASE_URL=http://host.docker.internal:3000 NODE_V8_COVERAGE=.v8-coverage VITE_PUBLIC_USE_TEST_ASSETS=true VITE_AUTH=false "$PNPM_BIN" exec vite build; then
261
+ echo -e "${RED}❌ Failed to build frontend${NC}"
262
+ return 1
263
+ fi
264
+
265
+ echo -e "${BLUE}🚀 Starting frontend preview server...${NC}"
266
+
267
+ # Start frontend preview server in background and save PID
268
+ "$PNPM_BIN" exec vite preview --port 3000 > "$PROJECT_DIR/.e2e-frontend.log" 2>&1 &
269
+ echo $! > "$FRONTEND_PID_FILE"
270
+
271
+ # Wait for frontend to be ready
272
+ if ! wait_for_service $FRONTEND_PORT "Frontend"; then
273
+ echo -e "${RED}❌ Failed to start frontend${NC}"
274
+ echo -e "${YELLOW}📋 Frontend log (last 20 lines):${NC}"
275
+ tail -n 20 "$PROJECT_DIR/.e2e-frontend.log"
276
+ return 1
277
+ fi
278
+ }
279
+
280
+ # Build Docker image
281
+ build_docker_image() {
282
+ echo -e "${BLUE}🐳 Building Docker image...${NC}"
283
+ cd "$PROJECT_DIR"
284
+
285
+ if docker build -t $DOCKER_IMAGE ./e2e/; then
286
+ echo -e "${GREEN}✅ Docker image built successfully${NC}"
287
+ return 0
288
+ else
289
+ echo -e "${RED}❌ Failed to build Docker image${NC}"
290
+ return 1
291
+ fi
292
+ }
293
+
294
+ # Run E2E tests in Docker
295
+ run_tests() {
296
+ echo -e "${BLUE}🧪 Running E2E tests in Docker...${NC}"
297
+
298
+ # Build Docker image if it doesn't exist
299
+ if ! docker image inspect $DOCKER_IMAGE >/dev/null 2>&1; then
300
+ echo -e "${YELLOW}Docker image not found, building...${NC}"
301
+ if ! build_docker_image; then
302
+ return 1
303
+ fi
304
+ fi
305
+
306
+ echo -e "${BLUE}📦 Running tests in Docker container...${NC}"
307
+
308
+ # Clean test output directories so they can be recreated with correct permissions
309
+ rm -rf "$MONOREPO_ROOT<% e2eArtifactsPath %>/test-results" "$MONOREPO_ROOT<% e2eArtifactsPath %>/playwright-report" "$MONOREPO_ROOT<% e2eArtifactsPath %>/monocart-report"
310
+
311
+ # Run tests in Docker with proper volume mounting
312
+ # Use host user ID to avoid permission issues with mounted volumes
313
+ docker run --rm \
314
+ --user "$(id -u):$(id -g)" \
315
+ -v "$MONOREPO_ROOT:/pxl" \
316
+ -w <% dockerWorkDir %> \
317
+ --add-host=host.docker.internal:host-gateway \
318
+ $DOCKER_IMAGE \
319
+ /bin/bash -c "<% nodeShimsCleanup %>; pnpm e2e"
320
+
321
+ local test_exit_code=$?
322
+
323
+ if [[ $test_exit_code -eq 0 ]]; then
324
+ echo -e "${GREEN}✅ All tests passed!${NC}"
325
+ else
326
+ echo -e "${RED}❌ Tests failed with exit code $test_exit_code${NC}"
327
+ fi
328
+
329
+ return $test_exit_code
330
+ }
331
+
332
+ # Main execution
333
+ main() {
334
+ echo -e "${GREEN}╔═══════════════════╗${NC}"
335
+ echo -e "${GREEN}║ E2E Test Runner ║${NC}"
336
+ echo -e "${GREEN}╚═══════════════════╝${NC}\n"
337
+
338
+ echo -e "${BLUE}🐳 Running in Docker mode${NC}\n"
339
+
340
+ # Setup environment (resolve pnpm, activate Node.js 24+)
341
+ setup_environment
342
+
343
+ # Check for existing services
344
+ check_services
345
+
346
+ # Start backend
347
+ if ! start_backend; then
348
+ echo -e "${RED}❌ Failed to start backend. Exiting.${NC}"
349
+ exit 1
350
+ fi
351
+
352
+ # Start frontend
353
+ if ! start_frontend; then
354
+ echo -e "${RED}❌ Failed to start frontend. Exiting.${NC}"
355
+ exit 1
356
+ fi
357
+
358
+ # Run tests in Docker
359
+ run_tests
360
+ local exit_code=$?
361
+
362
+ exit $exit_code
363
+ }
364
+
365
+ # Parse command line arguments
366
+ case "${1:-}" in
367
+ --help|-h)
368
+ echo "Usage: $0 [OPTIONS]"
369
+ echo ""
370
+ echo "Options:"
371
+ echo " --help, -h Show this help message"
372
+ echo " --build-image Build Docker image and exit"
373
+ echo ""
374
+ echo "This script automatically:"
375
+ echo " 1. Detects pnpm and activates Node.js 24+ (via nvm/fnm/volta)"
376
+ echo " 2. Checks if backend/frontend are already running (reuses them)"
377
+ echo " 3. Starts backend in E2E stateless mode (if needed)"
378
+ echo " 4. Builds and starts frontend preview server (if needed)"
379
+ echo " 5. Runs E2E tests in Docker"
380
+ echo " 6. Cleans up all processes on exit (Ctrl+C safe)"
381
+ echo ""
382
+ echo "Examples:"
383
+ echo " $0 # Run E2E tests"
384
+ echo " $0 --build-image # Just build the Docker image"
385
+ echo ""
386
+ echo "Logs:"
387
+ echo " Backend log: .e2e-backend.log"
388
+ echo " Frontend log: .e2e-frontend.log"
389
+ exit 0
390
+ ;;
391
+ --build-image)
392
+ setup_environment
393
+ build_docker_image
394
+ exit $?
395
+ ;;
396
+ *)
397
+ main
398
+ ;;
399
+ esac
@@ -119,11 +119,11 @@ exports.base = {
119
119
  { name: 'dev:noAuth', command: 'VITE_AUTH=false VITE_ENABLE_DEV_TOOLS=true vite' },
120
120
  {
121
121
  name: 'e2e:build',
122
- command: 'VITE_PUBLIC_API_URL=http://host.docker.internal:3001 VITE_PUBLIC_BASE_URL=http://host.docker.internal:3000 NODE_V8_COVERAGE=.v8-coverage VITE_PUBLIC_MAPBOX_DISABLE_TRANSITIONS=true VITE_PUBLIC_USE_TEST_ASSETS=true VITE_AUTH=false vite build && vite preview --port 3000',
122
+ command: 'VITE_PUBLIC_API_URL=http://host.docker.internal:3001 VITE_PUBLIC_BASE_URL=http://host.docker.internal:3000 NODE_V8_COVERAGE=.v8-coverage VITE_PUBLIC_USE_TEST_ASSETS=true VITE_AUTH=false vite build && vite preview --port 3000',
123
123
  },
124
124
  {
125
125
  name: 'e2e:ci',
126
- command: 'NODE_V8_COVERAGE=.v8-coverage VITE_PUBLIC_MAPBOX_DISABLE_TRANSITIONS=true VITE_PUBLIC_USE_TEST_ASSETS=true VITE_AUTH=false vite build && vite preview --port 3000',
126
+ command: 'NODE_V8_COVERAGE=.v8-coverage VITE_PUBLIC_USE_TEST_ASSETS=true VITE_AUTH=false vite build && vite preview --port 3000',
127
127
  },
128
128
  { name: 'lint', command: 'eslint .' },
129
129
  { name: 'preview', command: 'vite preview' },
@@ -1 +1 @@
1
- {"version":3,"file":"frontend.generator.js","sourceRoot":"","sources":["../../src/frontend-core/frontend.generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend.generator.js","sourceRoot":"","sources":["../../src/frontend-core/frontend.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAiC;AAEjC,6DAA8C;AAC9C,iDAAiH;AAKjH,wEAAkE;AAGlE,MAAM,mBAAmB,GAAG,YAAY,CAAA;AAIxC,gFAAgF;AAEnE,QAAA,IAAI,GAAyB;IACxC,UAAU,EAAE,CAAC,mBAAmB,CAAC;IACjC,KAAK,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;IACpG,gBAAgB,EAAE,CAAC,2BAA2B,EAAE,4BAA4B,CAAC;IAC7E,WAAW,EAAE;QACX,+HAA+H;QAC/H,IAAI,EAAE,IAAA,+BAAmB,EAAC,2BAA2B,CAAC;QACtD,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,QAAQ;QAEd,YAAY,EAAE;YACZ,EAAE,WAAW,EAAE,SAAS,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,EAAE;YACvE,EAAE,WAAW,EAAE,SAAS,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE;YAC/D,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE;YAC1D,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACvD,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,EAAE,WAAW,EAAE,wBAAwB,EAAE,OAAO,EAAE,UAAU,EAAE;YAC9D,EAAE,WAAW,EAAE,iCAAiC,EAAE,OAAO,EAAE,UAAU,EAAE;YACvE,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC3D,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACtD,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;YACzC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7C,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;YACjD,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;YACnD,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC3C,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACtD,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC/C,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;YAC3C,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC/C,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE;YACnD,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE;YACjD,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE;YACnD,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC7D,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC/D,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;SACzC;QACD,eAAe,EAAE;YACf,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE;YAChD,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACzD,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC3D,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,QAAQ,EAAE;YACjE,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC7D,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC3D,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE;YAC1D,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC7D,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,UAAU,EAAE;YAC/D,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,UAAU,EAAE;YAC5D,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE;YACvD,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;YACnD,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACtD,EAAE,WAAW,EAAE,0BAA0B,EAAE,OAAO,EAAE,OAAO,EAAE;YAC7D,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE;YACzD,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE;YACpD,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;YACxD,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC5C,EAAE,WAAW,EAAE,2BAA2B,EAAE,OAAO,EAAE,OAAO,EAAE;YAC9D,EAAE,WAAW,EAAE,6BAA6B,EAAE,OAAO,EAAE,QAAQ,EAAE;YACjE,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC7C,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE;YAChD,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC/C,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE;YAChD,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACvD,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;YAC1C,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE;YACzD,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,QAAQ,EAAE;YACzD,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE;YACrD,EAAE,WAAW,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,EAAE;YACxD,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;YAC3C,EAAE,WAAW,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,EAAE;SAC1D;QACD,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,+BAA+B,EAAE;YAC3D,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE;YAChD,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE;YACrD,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,iCAAiC,EAAE;YAC3D,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,iDAAiD,EAAE;YAClF;gBACE,IAAI,EAAE,WAAW;gBACjB,OAAO,EACL,kOAAkO;aACrO;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,OAAO,EACL,uHAAuH;aAC1H;YACD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;YACrC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE;YAC5C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,EAAE;YACvD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,uBAAuB,EAAE;YAC7D,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,gCAAgC,EAAE;YACrE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,+BAA+B,EAAE;YAChE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE;SAChD;KACF;IACD,kBAAkB,EAAE,IAAI,GAAG,EAAE;CAC9B,CAAA;AAED;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB,UAAU,EAAE,CAAC,OAAO,CAAC;IACrB,WAAW,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE;CACpC,CAAA;AAEhC,QAAA,WAAW,GAAG;IACzB,UAAU,EAAE,CAAC,aAAa,CAAC;IAC3B,WAAW,EAAE;QACX,YAAY,EAAE,EAAE;KACjB;CAC0C,CAAA;AAC7C;;GAEG;AACI,MAAM,GAAG,GAAG,CAAC,MAA2C,EAAuC,EAAE;IACtG,OAAO,CACL,MAAM;QACJ,EAAE;SACD,IAAI,CAAC,cAAM,CAAC;SACZ,IAAI,CAAC,mBAAW,CAAC,CACrB,CAAA;AACH,CAAC,CAAA;AAPY,QAAA,GAAG,OAOf;AAED,gFAAgF;AAEzE,MAAM,iBAAiB,GAAG,CAAC,IAAe,EAAE,QAAkB,EAAE,EAAE,CACvE,QAAQ,CAAC,MAAM,KAAK,CAAC;IACnB,CAAC,CAAC,eAAe,IAAI;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,sBAAsB,IAAI,GAAG;IAC1C,CAAC,CAAC,YAAY,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,IAAI,IAAI,IAAI,GAAG,CAAA;AANlE,QAAA,iBAAiB,qBAMiD;AAElE,QAAA,mBAAmB,GAAG,SAAS,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAA;AAE7E,MAAM,0BAA0B,GAAG,CACxC,IAA2F,EAC7D,EAAE,CAAC,CAAC;IAClC,EAAE,EAAE,2BAAmB;IACvB,mBAAmB,EAAE,CAAC,2BAAmB,CAAC;IAC1C,QAAQ,EAAE,EAAE;IAEZ,QAAQ,EAAE,CAAC,OAA4B,EAAE,EAAE;QACzC,MAAM,WAAW,GAAG,IAAA,+BAAmB,EAAC,WAAW,OAAO,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,CAAA;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,yBAAa,CAAC,YAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAI,CAAA;QACnE,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,WAAW,CAAA;QACvC,QAAQ,CAAC,WAAW,CAAC,WAAW,GAAG,oBAAoB,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAA;QACpF,QAAQ,CAAC,WAAW,CAAC,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAA;QACrF,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;QAEpF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;YACpC,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,iBAAiB,WAAW,oBAAoB;SAC1D,CAAC,CAAA;QACF,uDAAuD;QACvD,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAA;QAClG,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,OAAO,IAAI,2BAA2B,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAA;QACvG,CAAC;QAED,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAA;IACjC,CAAC;IAED,yFAAyF;IACzF,kBAAkB,EAAE,CAAC,OAAY,EAAQ,EAAE;QACzC,KAAK,MAAM,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACpD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC1D,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,sBAAsB,aAAa,CAAC,IAAI,MAAM,CAAC;gBAC9E,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,KAAK;aAC1C,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,QAAQ,EAAE,KAAK,EAAqC,OAA8B,EAAE,EAAE;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QACnD,MAAM,MAAM,GAAG,WAAW,CAAA;QAC1B,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;YAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;QACjC,CAAC,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,IAAA,+BAAmB,EAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAA;QAEvG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACnF,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC9D,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAA;QAClE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAEpF,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAA;QACjE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YAC3B,GAAG,sBAAsB,CAAC,YAAY,CAAC;YACvC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;SAC9D,CAAC,CAAA;QAEF,6DAA6D;QAC7D,MAAM,gBAAgB,GAAG,MAAM,IAAA,gCAAoB,EAAC;YAClD,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,mBAAmB,CAAC;YAC5D,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;SACpC,CAAC,CAAA;QACF,IAAI,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,sBAAsB,mBAAmB,KAAK,gBAAgB,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,CAAA;QACvG,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAA;QAElG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAA;QACnE,mEAAmE;QACnE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAA;QAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAAA;QAElE,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAA;QACzE,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,CAAC,CAAA;QAE5E,KAAK,MAAM,SAAS,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,qBAAqB,SAAS,EAAE,CAAC,CAAC,CAAA;QACxF,CAAC;QAED,KAAK,MAAM,eAAe,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACzE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,yBAAyB,eAAe,EAAE,CAAC,CAAC,CAAA;QAChG,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,IAAA,qCAAgB,EAAC,OAAO,CAAC,CAAC,CAAA;QAEhF,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAC,CAAA;AAjGW,QAAA,0BAA0B,8BAiGrC"}