hydraline_server 0.0.12
hydraline_server: ^0.0.12 copied to clipboard
SSR server for Hydraline: streaming, caching, HTMX helpers. Shelf/Dart Frog middleware, bot-aware transport, ETag/304, anti-cloaking byte-identical bodies. Pairs with hydraline.
0.0.12 #
- Further shortened pubspec description; added AGENTS.md hard rules.
0.0.11 #
- Shortened pubspec description to pass pub.dev 180-char limit.
0.0.10 #
- Added "Why" section to README: anti-cloaking, ETag/304, bot-aware transport.
0.0.8 #
- Cross-link banner at top of README: shows all three packages.
0.0.7 #
- Better package description with cross-links; CHANGELOG references current version.
0.0.6 #
- Publisher verification: homepage switched to verified domain.
0.0.5 #
- Polished README: automatic behaviours list, proven metrics with test counts.
0.0.4 #
HEADrequests now return the response headers with an empty body instead of a full rendered body.DocumentBuilderreceives the matchedRouteEntryas itsdataargument, so builders can read route metadata and the concrete path without re-parsing.InMemoryCachegained an optionalmaxEntryBytescap: oversized pages are not stored, bounding worst-case memory.- HTMX helpers (
HtmxResponse,Htmx.redirect) reject header values containing CR/LF (response-splitting defense). Assets.injectFlutterAssetsescapesbaseHrefbefore embedding it in the injected<script>tags.- Redirect handling unified through
Http.redirect/Http.gone; cached-response headers emitted lowercase for HTTP/2 friendliness.
0.0.3 #
- Fixed: route patterns with a trailing slash in the manifest (e.g.
/about/) now match, because route paths are canonicalised during matching. Http.redirectpreserves an explicit status (301/302/303/307/308) instead of coercing everything non-301 to 302.approutes now emitnofollowfrom route metadata (previously onlynoindexwas honoured on app routes).- The cache key canonicalises query-parameter order, so
?a=1&b=2and?b=2&a=1share one cache entry. - The ETag hash applies an explicit 64-bit mask, making it independent of the platform's int-overflow behaviour.
- Removed a dead
deliveryparameter from the cached-response path. - Added
issue_trackerto the package metadata.
0.0.2 #
- Fixed: builders registered under dynamic route patterns
(
/product/:id) are now invoked for matching concrete paths; previously dynamic routes silently rendered empty pages. - Fixed: the HTML cache key now includes the query string;
/page?a=1and/page?a=2no longer share one entry. - Request paths are canonicalised (duplicate/trailing slashes) before route matching and cache lookup.
- ETag upgraded to 64-bit FNV-1a;
If-None-Matchhandles ETag lists, weak validators (W/) and*per RFC 9110. - Cacheable responses carry
Vary: Accept-Encoding. - Breaking:
HydralineCache.setlost its unusedetagparameter. X-Robots-Tagheader name is emitted lowercase consistently.
0.0.1 #
Initial release.
hydralineMiddleware- shelf middleware: route matching against theRouteManifest, SSR fordocument/hybridroutes via pure-DartDocumentBuilders, pass-through forapproutes.- UA-blind builder contract -
DocumentBuilder(Request, Object?)cannot see theUser-Agent; cloaking is prevented architecturally. - Bot-aware transport - buffered (
Content-Length) for bots, chunked streaming for users; byte-identical bodies. - Automatic
X-Robots-Tag- emitted fornoindex/nofollowroutes and forapproutes (which default to noindex). RedirectException- 301/302/custom statuses and.gone()for 410 from inside builders.HydralineCache- pluggable cache withHydralineCache.inMemory()(max-size eviction, TTL); middleware integration withETag,If-None-Match→ 304 andCache-Control.Htmxhelpers -renderFragment,response(withHX-Triggermap),trigger,redirect(HX-Redirect), plusHtmxResponsewith retarget/reswap headers.Assets.serveCoreAssets- robots.txt, sitemap.xml and the first-party L0-L1 JS bundles (vanilla-islands.js,htmx-glue.js).Assets.injectFlutterAssets- Flutter script injection for island routes.Http- status helpers, path canonicalization,withRobots.DartFrogAdapter- Dart Frog integration.