36 Commits

Author SHA1 Message Date
Ryan Hamamura
30cc6d88e6 feat: add embedded NATS pub/sub support on Context
Define PubSub and Subscription interfaces in the core via package with
a vianats sub-package providing the embedded NATS + JetStream
implementation. Expose c.Publish() and c.Subscribe() on Context with
automatic subscription cleanup on session close. Refactor the NATS
chatroom example to use the built-in methods instead of manual
subscription tracking.
2026-01-26 08:06:50 -10:00
Ryan Hamamura
73f4e4009b Always sync full state when SSE connects
Previously only called Sync() on SSE reconnect (detected via last-event-id
header). This caused issues when application code registered contexts for
updates before the SSE connection was established - patches sent to
patchChan could be dropped.

Now always call Sync() when SSE connects, ensuring clients receive the
full current state regardless of what happened before the connection
was established.

Fixes #2
2026-01-14 19:02:44 -10:00
Ryan Hamamura
c77ccc0796 chore: rename module to github.com/ryanhamamura/via
Update module path and all internal imports to use the new repository location.
2026-01-14 10:47:11 -10:00
Ryan Hamamura
d4b831492e refactor: simplify Datastar configuration API
Flatten DatastarConfig struct into Options (DatastarContent, DatastarPath)
and replace datastarHandlerRegistered bool with sync.Once for thread safety.
2026-01-14 02:01:18 -10:00
Ryan Hamamura
ea7b9ad4a1 feat: add custom Datastar.js configuration support
Allow users to provide their own Datastar.js script (e.g., Datastar Pro
or custom builds) via Via's Options configuration. Adds DatastarConfig
struct with Content ([]byte) and Path (string) fields.
2026-01-14 01:47:39 -10:00
Ryan Hamamura
03b6d7453a feat: add Redirect and ReplaceURL methods for browser navigation
Add SSE-based navigation methods to Context:
- Redirect(url) / Redirectf() - navigate to new page
- ReplaceURL(url) / ReplaceURLf() - update URL without navigation

Update session example to demonstrate full login flow with redirects.
2026-01-12 00:47:52 -10:00
ryanhamamura
9a23188973 feat: add cookie-based session support using alexedwards/scs (#1)
- Add Session wrapper with typed getters (GetString, GetInt, GetBool, etc.)
- Add flash message support via Pop methods (PopString, PopInt, etc.)
- Add session utilities: Exists, Keys, ID, Clear, Destroy, RenewToken
- Create default session manager in New() for zero-config usage
- Allow custom session manager via Options.SessionManager
- Wrap mux with scs LoadAndSave middleware in Start()
- Add session example demonstrating login/logout with flash messages
2026-01-09 06:59:26 -10:00
Joao Goncalves
43495ccada feat: do full sync after sse reconnect 2025-12-17 23:11:19 -01:00
Joao Goncalves
20dad802a1 feat: replace Handler() method for HTTPServeMux() for better plugin and testing integration; remove via-plugin-picocss dependency from examples; add datastar h.H nodes for data-init, data-effect, and data-ignore-morph; update realtimechart example; other small improvements 2025-12-17 17:11:59 -01:00
Gerard Webb
6da518d990 feat: Add Handler() method and fix SSE closed pipe errors (#24)
* feat: add Handler() method for testing and custom server integration

Exposes the underlying http.Handler to enable:
- Integration testing with gost-dom/browser for SSE/Datastar testing
- Custom server setups (e.g., embedding Via in existing applications)
- Standard Go httptest patterns

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Suppress closed pipe errors when SSE connection closes

Don't log error when SSE fails to send patches if the connection was
already closed. This reduces noise in logs during shutdown and testing,
where browsers/clients close connections before server handlers finish.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: joeblew999 <joeblew999@users.noreply.github.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 08:51:16 -01:00
Joao Goncalves
81d44954a4 feat: add path params; add pathparams example 2025-12-04 17:53:06 -01:00
Joao Goncalves
26268f698a refactor: simplify oninterval routine; fix(runtime): session end handler; update realtime chart example 2025-12-04 12:40:36 -01:00
Joao Goncalves
51218e7a2a fix(runtime): sync on sse reconnect 2025-11-26 00:33:38 -01:00
Joao Goncalves
36c0fb9050 fix(runtime): solve chan blocks; other small improvements 2025-11-25 23:19:50 -01:00
Joao Goncalves
a71d6f0960 feat: introduce via routine; update realtime chart example 2025-11-25 22:56:21 -01:00
Joao Goncalves
6edace647e fix(via_test): remove signal sync test that was bocking test execution 2025-11-25 22:54:00 -01:00
Joao Goncalves
9776fe0a49 fix: shakespere example not compiling; remove sleep statements from patchChan loop 2025-11-18 13:03:21 -01:00
Joao Goncalves
0064150cbc fix: patchChan loop ending after switching browser tab; feat: improve realtime chart example 2025-11-18 11:17:06 -01:00
Joao Goncalves
f5a786730a fix: check for panics on page registration. Fix header append bug: was appending multiple ctx_id to the header; feat: handle complex signal init values as json; add tests; other small improvemnts 2025-11-17 16:46:33 -01:00
Joao Goncalves
472351d9a5 refactor: simplify signals; small optimizations 2025-11-16 19:53:51 -01:00
Jeff Winkler
2bb5d80502 Use beacon (#19)
Perfect. Tried with send beacon before. Dodn work for me. Because was using get instead o post.
2025-11-16 12:44:03 -01:00
Jeff Winkler
f7b5b24dd5 Script, GH action to check that all go files compile, and any tests pass. (#16) 2025-11-15 17:47:49 -01:00
Joao Goncalves
80879216b2 fix: components not using parent page patchShan; fix: chat example nil pointer error when sync outside action 2025-11-15 02:34:27 -01:00
Joao Goncalves
808d4dd0d1 fix: try solution for race conditions; use brotli included in datastar sdk; small improvements 2025-11-14 17:16:09 -01:00
Jeff Winkler
7670926733 Brotli Compression. (#12)
Co-authored-by: João Gonçalves <joao.goncalves01@gmail.com>
2025-11-13 14:03:45 -01:00
Joao Goncalves
f6c9990f38 feat: devmode removes the persist file after successful restore 2025-11-13 12:30:45 -01:00
Joao Goncalves
b9df99889e feat: introduce ctx close mechanism using beforeunload event; small fixes and improvements; improve live reload example 2025-11-13 12:11:26 -01:00
Joao Goncalves
d282773379 fix: auto reload on multiple browser windows/tabs closes #6; fix: chatroom example not compiling 2025-11-12 02:33:22 -01:00
Joao Goncalves
03ce9808e6 feat: add devmode flag; introduce live reload support; update examples 2025-11-11 00:15:44 -01:00
Joao Goncalves
9f9e4eb568 refactor: move document head includes out of via configuration into their own append funcs; update examples 2025-11-09 03:17:03 -01:00
Jeff Winkler
3b658ed7d0 LiveReload 2025-11-08 13:05:23 -05:00
Joao Goncalves
a46c06b467 feat: introduce support for plugins 2025-11-07 02:45:58 -01:00
Joao Goncalves
798f024743 feat: improve real-time chart example; add small refinements to via core files 2025-11-07 00:44:48 -01:00
Joao Goncalves
c167f0c74f feat: add real-time chart example 2025-11-05 17:29:29 -01:00
Joao Goncalves
23aebf73f2 feat: improve component support 2025-11-03 00:41:05 -01:00
Joao Goncalves
eb20a2a0a9 feat: add working prototype for via 2025-10-31 00:58:53 -01:00