Skip to content

Add Gea (geajs.com) framework to the benchmark suite - #1

Closed
rlorenzo wants to merge 1 commit into
mainfrom
claude/add-geajs-test-ch2sr4
Closed

Add Gea (geajs.com) framework to the benchmark suite#1
rlorenzo wants to merge 1 commit into
mainfrom
claude/add-geajs-test-ch2sr4

Conversation

@rlorenzo

@rlorenzo rlorenzo commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

Adds Gea — a compiler-first reactive UI framework — as the 14th framework in the benchmark suite, implementing the shared weather app with identical functionality and behavior to the existing apps.

What's included

New app (apps/geajs/)

  • Singleton WeatherStore extending Gea's Store — state lives in plain class fields made reactive via a deep Proxy; mutations are ordinary assignments
  • Computed values as plain JavaScript getters (forecastDays, locationLabel, formatted temperature/humidity/wind/pressure, etc.)
  • JSX class components (SearchForm, WeatherDisplay, CurrentWeather, Forecast, ForecastItem, ErrorState) plus a function component (LoadingState), compiled by @geajs/vite-plugin (Vite 8) into surgical DOM patches — no virtual DOM
  • Shared weather service/utils mirror the other implementations: mock mode, geolocation fallback, localStorage persistence, one-at-a-time forecast expansion with smooth scroll-into-view, keyboard accessibility

Behavioral parity with the other apps

  • Pressure is read from current.pressure_msl like react/vanjs/svelte/vanilla — including the NaN hPa reading in mock mode, where the shared mock data only provides surface_pressure. Kept intentionally so the benchmark compares like-for-like; a fix would belong in a separate cross-framework PR.
  • Forecast expansion state persists across searches (matching vanjs); smooth scroll-into-view on expand matches the pattern used by most existing apps; forecast list is capped at 7 days like solid/svelte.

Tooling registration

  • frameworks.json: new geajs entry (build/test/lint config + website metadata)
  • tests/config/playwright-geajs.config.js + entry in playwright.config.base.js
  • Root package.json scripts (dev:geajs, build:geajs, test:geajs, lint:geajs)
  • eslint.config.mjs: override for JSX-only component references in apps/geajs (same pattern as React/Solid)
  • .github/docs/apps.md: added Gea and corrected the framework count to 14 (also restored the previously-missing Lume.js entry so the list matches the count)

Testing

All checks pass locally:

  • npm run test:geajs: 22/22 Playwright tests pass — the full shared suite (10 core + 12 advanced/perf E2E), run repeatedly with no flakiness and no retries.
  • npm run lint:geajs: clean
  • npm run build:geajs: production build succeeds (~9.7 kB gzipped JS)

Note on the earlier "19/22": the three previously-failing tests (invalid location, network errors, API rate limiting) were an environment limitation in the original web sandbox — no network access to install @geajs/core/@geajs/vite-plugin, download the Playwright browser, or reach the geocoding API — not a code issue. With the app dependencies installed, shared assets synced into apps/geajs/public/, and Chromium installed, all 22 pass. CI reproduces exactly this setup (npm ciplaywright install --with-depspython scripts/setup/main.py).

Branch history was squashed to a single commit, so review comments anchored to the earlier commits may now show as outdated.

🤖 Generated with Claude Code

@socket-security

socket-security Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​geajs/​core@​1.4.07410010093100
Addednpm/​@​geajs/​vite-plugin@​1.4.1781009994100
Addednpm/​vite@​8.1.5981008298100

View full report

@socket-security

socket-security Bot commented Jul 17, 2026

Copy link
Copy Markdown

Warning

Review the following alerts detected in dependencies.

According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @emnapi/runtime is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: apps/geajs/package-lock.jsonnpm/vite@8.1.5npm/@emnapi/runtime@1.11.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@emnapi/runtime@1.11.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

@rlorenzo

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@rlorenzo
rlorenzo force-pushed the claude/add-geajs-test-ch2sr4 branch from 2a0b6a1 to 85b60b8 Compare July 17, 2026 17:33
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a complete Gea.js weather app with reactive state, Open-Meteo and mock data services, weather components, Vite setup, styling, repository scripts, framework metadata, Playwright configuration, lint configuration, and documentation.

Changes

Gea.js weather application

Layer / File(s) Summary
Weather data and reactive state
apps/geajs/src/services/weather-service.js, apps/geajs/src/utils/weather-utils.js, apps/geajs/src/weather-store.js
Implements mock and Open-Meteo weather retrieval, formatting helpers, derived reactive state, searches, initialization, persistence, and forecast selection.
Weather interface components
apps/geajs/src/app.jsx, apps/geajs/src/components/*, apps/geajs/styles.css
Adds the application shell, search form, loading/error/content states, current weather metrics, keyed forecast items, keyboard interaction, and Gea-specific styling.
Application runtime and packaging
apps/geajs/index.html, apps/geajs/package.json, apps/geajs/vite.config.js, apps/geajs/src/main.js
Adds the HTML mount point, package scripts and dependencies, Vite configuration, and application bootstrap.
Framework registry and validation integration
frameworks.json, package.json, tests/config/*geajs*, tests/config/playwright.config.base.js, eslint.config.mjs, .github/docs/apps.md, apps/geajs/README.md
Registers Gea.js with build, test, lint, and development workflows; adds Playwright and lint configuration; and updates framework documentation.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Browser
  participant App
  participant WeatherStore
  participant WeatherService
  participant OpenMeteo
  Browser->>App: mount into `#app`
  Browser->>WeatherStore: init()
  WeatherStore->>WeatherService: getWeatherByCity(city)
  WeatherService->>OpenMeteo: geocode and request forecast
  OpenMeteo-->>WeatherService: weather response
  WeatherService-->>WeatherStore: normalized weather data
  WeatherStore-->>App: reactive state update
Loading
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly summarizes the main change: adding the Gea framework to the benchmark suite.
Description check ✅ Passed The description is closely related to the changeset and accurately discusses the new Gea app and tooling updates.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6181e2f7-5a2c-42e4-8d30-126f26b502fa

📥 Commits

Reviewing files that changed from the base of the PR and between d3f0dcd and 2a0b6a1.

⛔ Files ignored due to path filters (1)
  • apps/geajs/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (24)
  • .github/docs/apps.md
  • apps/geajs/README.md
  • apps/geajs/index.html
  • apps/geajs/package.json
  • apps/geajs/src/app.jsx
  • apps/geajs/src/components/CurrentWeather.jsx
  • apps/geajs/src/components/ErrorState.jsx
  • apps/geajs/src/components/Forecast.jsx
  • apps/geajs/src/components/ForecastItem.jsx
  • apps/geajs/src/components/LoadingState.jsx
  • apps/geajs/src/components/SearchForm.jsx
  • apps/geajs/src/components/WeatherContent.jsx
  • apps/geajs/src/components/WeatherDisplay.jsx
  • apps/geajs/src/main.js
  • apps/geajs/src/services/weather-service.js
  • apps/geajs/src/utils/weather-utils.js
  • apps/geajs/src/weather-store.js
  • apps/geajs/styles.css
  • apps/geajs/vite.config.js
  • eslint.config.mjs
  • frameworks.json
  • package.json
  • tests/config/playwright-geajs.config.js
  • tests/config/playwright.config.base.js

Comment thread apps/geajs/src/components/ForecastItem.jsx
Comment thread apps/geajs/src/services/weather-service.js
Comment thread apps/geajs/src/utils/weather-utils.js
Comment thread apps/geajs/src/weather-store.js
Comment thread apps/geajs/src/weather-store.js
Comment thread apps/geajs/styles.css

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new Gea (geajs.com) implementation of the shared weather app and wires it into the repo’s framework registry, linting, and Playwright E2E configuration so it can be developed, built, linted, and tested alongside the existing framework apps.

Changes:

  • Registers the new geajs framework across frameworks.json, root scripts, ESLint overrides, and Playwright configs.
  • Adds the full Gea weather app implementation (store/services/utils + JSX components) under apps/geajs/.
  • Updates framework documentation to reflect the expanded framework set.

Reviewed changes

Copilot reviewed 24 out of 25 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tests/config/playwright.config.base.js Adds geajs to the shared Playwright config map (baseURL + webServer command).
tests/config/playwright-geajs.config.js New Playwright entrypoint config for running tests against Gea.
package.json Adds dev/build/test/lint scripts for Gea and includes it in the *:all script chains.
frameworks.json Registers Gea as a framework entry with build/dev/test metadata and website info.
eslint.config.mjs Adds Gea-specific no-unused-vars override for JSX-only component references.
apps/geajs/vite.config.js New Vite config using @geajs/vite-plugin for compiling Gea JSX.
apps/geajs/styles.css Adds Gea-specific app-shell / forecast styles.
apps/geajs/src/weather-store.js Implements the Gea WeatherStore (state + derived getters + actions).
apps/geajs/src/utils/weather-utils.js Adds the WeatherUtils helper (formatting/icons/dates/etc.) for Gea app parity.
apps/geajs/src/services/weather-service.js Implements Gea’s weather/geocoding service (mock + real API behavior).
apps/geajs/src/main.js App bootstrap: mounts root component and triggers initial store init.
apps/geajs/src/components/WeatherDisplay.jsx Conditional rendering wrapper for loading/error/content states.
apps/geajs/src/components/WeatherContent.jsx Layout container for current weather + forecast sections.
apps/geajs/src/components/SearchForm.jsx Search form component wired to the store (input + submit).
apps/geajs/src/components/LoadingState.jsx Loading UI component used during data fetch.
apps/geajs/src/components/ForecastItem.jsx Forecast row + expandable details with keyboard support.
apps/geajs/src/components/Forecast.jsx 7-day forecast list rendering.
apps/geajs/src/components/ErrorState.jsx Error UI component displaying store error message.
apps/geajs/src/components/CurrentWeather.jsx Current conditions UI bound to store-derived fields.
apps/geajs/src/app.jsx Root app shell (header/main/footer) composing Gea components.
apps/geajs/README.md Documents the Gea app’s usage and architecture choices.
apps/geajs/package.json Defines Gea app dependencies (Gea core + Vite + Gea Vite plugin).
apps/geajs/package-lock.json Locks Gea app dependency tree for reproducible installs.
apps/geajs/index.html Gea app HTML entrypoint linking shared styles and Gea bootstrap module.
.github/docs/apps.md Updates framework count/list and adds Gea (and Lume.js entry restoration).
Files not reviewed (1)
  • apps/geajs/package-lock.json: Generated file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Implements the shared weather app in Gea, a compiler-first reactive UI
framework, and wires it into the existing test/lint/build tooling.

- apps/geajs: weather app using @geajs/core with a proxy-based Store,
  getter-derived computed values, and class/function JSX components
  compiled by @geajs/vite-plugin (Vite 8)
- frameworks.json: register geajs with build, test, and meta config
- tests/config: add playwright-geajs.config.js and base config entry
- package.json: add dev/build/test/lint scripts for geajs
- eslint.config.mjs: ignore JSX-only component references in apps/geajs
- .github/docs/apps.md: add Gea (and the previously missing Lume.js) to
  the framework list and correct the count to 14

Behavior matches the reference implementations (react/vue/svelte/preact/
solid), including reading pressure from pressure_msl and single-item
forecast expansion with scroll-into-view. The page uses the shared soft
background like the majority of apps rather than painting the app
container near-white. Full Playwright suite passes locally (22/22).

Co-Authored-By: Claude <noreply@anthropic.com>
@rlorenzo
rlorenzo force-pushed the claude/add-geajs-test-ch2sr4 branch from ba54727 to 4a9d348 Compare July 17, 2026 20:52
@rlorenzo

Copy link
Copy Markdown
Owner Author

Superseded by the upstream PR against lissy93/framework-benchmarks: lissy93#26 (same branch, now a single squashed commit). Closing this fork PR.

@rlorenzo rlorenzo closed this Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants