@absolutejs/absolute 0.20.0-beta.140 → 0.20.0-beta.141

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.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,18 @@ This file is generated by `absolute-changelog` from the entries in
6
6
  `changelog/`. Edit an entry, not this file — and add new ones under
7
7
  `changelog/unreleased/`.
8
8
 
9
+ ## 0.20.0-beta.141 — 2026-10-19
10
+
11
+ ### Added
12
+
13
+ - **Production serves brotli and gzip copies of static text assets, written at build time**
14
+ Production served every asset uncompressed, so browsers downloaded scripts, stylesheets and HTML files at full size: about three times the bytes, which on a slow network is most of the wait. Production builds now write brotli (quality 9) and gzip copies beside each text asset that compression shrinks by at least a tenth (about a second for the example app), and the production server sends a copy to a browser that accepts it, with `Content-Encoding`, the original `Content-Type`, `Vary: Accept-Encoding` and the asset's cache policy. React's vendor bundle goes from 181 KB to 53 KB. Nothing is compressed on the fly, so streamed responses (server-sent events, streamed pages) are untouched.
15
+
16
+ ### Fixed
17
+
18
+ - **HEAD requests answer like GET (status and headers, no body) instead of 404**
19
+ Elysia 2 no longer answers HEAD for a GET route, so every AbsoluteJS app answered HEAD with 404 while GET answered 200, pages and static files alike. Uptime monitors, link checkers, crawlers and validators ask with HEAD and read that as down. `networking()` now adds a HEAD fallback that runs the request as GET and returns its status and headers without a body, compiled executables included. A route the app declares with `.head()` still wins.
20
+
9
21
  ## 0.20.0-beta.140 — 2026-10-18
10
22
 
11
23
  ### Fixed
package/changelog.json CHANGED
@@ -2,6 +2,22 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "detail": "Elysia 2 no longer answers HEAD for a GET route, so every AbsoluteJS app answered HEAD with 404 while GET answered 200, pages and static files alike. Uptime monitors, link checkers, crawlers and validators ask with HEAD and read that as down. `networking()` now adds a HEAD fallback that runs the request as GET and returns its status and headers without a body, compiled executables included. A route the app declares with `.head()` still wins.",
9
+ "kind": "fixed",
10
+ "summary": "HEAD requests answer like GET (status and headers, no body) instead of 404"
11
+ },
12
+ {
13
+ "detail": "Production served every asset uncompressed, so browsers downloaded scripts, stylesheets and HTML files at full size: about three times the bytes, which on a slow network is most of the wait. Production builds now write brotli (quality 9) and gzip copies beside each text asset that compression shrinks by at least a tenth (about a second for the example app), and the production server sends a copy to a browser that accepts it, with `Content-Encoding`, the original `Content-Type`, `Vary: Accept-Encoding` and the asset's cache policy. React's vendor bundle goes from 181 KB to 53 KB. Nothing is compressed on the fly, so streamed responses (server-sent events, streamed pages) are untouched.",
14
+ "kind": "added",
15
+ "summary": "Production serves brotli and gzip copies of static text assets, written at build time"
16
+ }
17
+ ],
18
+ "date": "2026-10-19",
19
+ "version": "0.20.0-beta.141"
20
+ },
5
21
  {
6
22
  "changes": [
7
23
  {
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-UKvYic/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-SRuGx7/src/core/streamingSlotRegistrar.ts
3
3
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
4
4
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
5
5
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-UKvYic/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-SRuGx7/src/core/streamingSlotRegistrar.ts
3
3
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
4
4
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
5
5
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -46,7 +46,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
46
46
  getWarningController()?.maybeWarn(primitiveName);
47
47
  };
48
48
 
49
- // .angular-partial-tmp-UKvYic/src/core/streamingSlotRegistry.ts
49
+ // .angular-partial-tmp-SRuGx7/src/core/streamingSlotRegistry.ts
50
50
  var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
51
51
  var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
52
52
  var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";