@absolutejs/absolute 0.20.0-beta.140 → 0.20.0-beta.143
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 +23 -0
- package/changelog.json +37 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/build.js +887 -704
- package/dist/build.js.map +19 -15
- package/dist/cli/{buildDepVendor-bpac1bhq.js → buildDepVendor-e2zz9x78.js} +5 -4
- package/dist/cli/{dev-4ps2yg1z.js → dev-e4w5nq6y.js} +21 -8
- package/dist/cli/index-6vpdsqa1.js +50 -0
- package/dist/cli/index.js +1 -1
- package/dist/dev/serverBootstrap.js +63 -30
- package/dist/index.js +1050 -853
- package/dist/index.js.map +21 -16
- package/dist/src/build/importFromProject.d.ts +1 -0
- package/dist/src/build/workspacePackages.d.ts +2 -0
- package/dist/src/core/precompressed.d.ts +23 -0
- package/dist/src/dev/hot/plugin.d.ts +5 -0
- package/dist/src/dev/srcPath.d.ts +4 -0
- package/dist/src/plugins/headFallback.d.ts +11 -0
- package/package.json +2 -2
- package/dist/cli/index-65kqn88a.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,29 @@ 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.143 — 2026-10-22
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **Browser test recordings and reports no longer restart absolute dev**
|
|
14
|
+
Running a visible Playwright test with screenshots, video or tracing caused absolute dev to repeatedly restart the application: test-results, playwright-report, blob-report and .playwright-mcp were treated as source changes. These generated directories, including their creation and removal, are now ignored by the shared watcher. Atomic-write recovery also honors ignored paths, so temporary trace writes cannot reintroduce generated files into the rebuild queue. Real test source and application assets remain watched.
|
|
15
|
+
- **`absolute dev` runs apps that import their own workspace packages, under Bun's isolated or hoisted linker, with hot reload**
|
|
16
|
+
An app that imports one of its own workspace packages (`"@acme/core": "workspace:*"`) did not run under `absolute dev`. With Bun's isolated linker, the default for a workspace, the dev build imported the package from the framework's own folder, could not find it, and the server crash-looped. With the hoisted linker the page rendered but never hydrated: modules outside the app's folder were addressed as `/@src/../…`, which a browser collapses before asking, so they 404ed. Now a package that resolves to source outside node_modules is the app's own code: served and transpiled like the app's files rather than vendored, its folder watched, and an edit to it hot-reloads in place (server and browser) instead of restarting the server or reloading the page. Packages are read from the app's folder, so any dependency only the app declares also works under the isolated linker, and the dev server serves files outside the app folder (a workspace package, a node_modules hoisted to the workspace root) through `/@src/@up/…`. A `dev.watchDirs` entry or a symlink written to work around this is no longer needed.
|
|
17
|
+
- **Fresh installs declare the Elysia API version this release supports**
|
|
18
|
+
The broad prerelease peer range allowed Elysia 2.0.0-rc.0 and beta.32, which removed the request lifecycle method used by this framework release. The Elysia peer now requires 2.0.0-beta.21, matching the version used and verified by the framework. Fresh-package acceptance reads that peer contract instead of maintaining a separate stale Elysia range.
|
|
19
|
+
|
|
20
|
+
## 0.20.0-beta.141 — 2026-10-19
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Production serves brotli and gzip copies of static text assets, written at build time**
|
|
25
|
+
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.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **HEAD requests answer like GET (status and headers, no body) instead of 404**
|
|
30
|
+
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.
|
|
31
|
+
|
|
9
32
|
## 0.20.0-beta.140 — 2026-10-18
|
|
10
33
|
|
|
11
34
|
### Fixed
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,43 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "Running a visible Playwright test with screenshots, video or tracing caused absolute dev to repeatedly restart the application: test-results, playwright-report, blob-report and .playwright-mcp were treated as source changes. These generated directories, including their creation and removal, are now ignored by the shared watcher. Atomic-write recovery also honors ignored paths, so temporary trace writes cannot reintroduce generated files into the rebuild queue. Real test source and application assets remain watched.",
|
|
9
|
+
"kind": "fixed",
|
|
10
|
+
"summary": "Browser test recordings and reports no longer restart absolute dev"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"detail": "An app that imports one of its own workspace packages (`\"@acme/core\": \"workspace:*\"`) did not run under `absolute dev`. With Bun's isolated linker, the default for a workspace, the dev build imported the package from the framework's own folder, could not find it, and the server crash-looped. With the hoisted linker the page rendered but never hydrated: modules outside the app's folder were addressed as `/@src/../…`, which a browser collapses before asking, so they 404ed. Now a package that resolves to source outside node_modules is the app's own code: served and transpiled like the app's files rather than vendored, its folder watched, and an edit to it hot-reloads in place (server and browser) instead of restarting the server or reloading the page. Packages are read from the app's folder, so any dependency only the app declares also works under the isolated linker, and the dev server serves files outside the app folder (a workspace package, a node_modules hoisted to the workspace root) through `/@src/@up/…`. A `dev.watchDirs` entry or a symlink written to work around this is no longer needed.",
|
|
14
|
+
"kind": "fixed",
|
|
15
|
+
"summary": "`absolute dev` runs apps that import their own workspace packages, under Bun's isolated or hoisted linker, with hot reload"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"detail": "The broad prerelease peer range allowed Elysia 2.0.0-rc.0 and beta.32, which removed the request lifecycle method used by this framework release. The Elysia peer now requires 2.0.0-beta.21, matching the version used and verified by the framework. Fresh-package acceptance reads that peer contract instead of maintaining a separate stale Elysia range.",
|
|
19
|
+
"kind": "fixed",
|
|
20
|
+
"summary": "Fresh installs declare the Elysia API version this release supports"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"date": "2026-10-22",
|
|
24
|
+
"version": "0.20.0-beta.143"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"changes": [
|
|
28
|
+
{
|
|
29
|
+
"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.",
|
|
30
|
+
"kind": "fixed",
|
|
31
|
+
"summary": "HEAD requests answer like GET (status and headers, no body) instead of 404"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"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.",
|
|
35
|
+
"kind": "added",
|
|
36
|
+
"summary": "Production serves brotli and gzip copies of static text assets, written at build time"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"date": "2026-10-19",
|
|
40
|
+
"version": "0.20.0-beta.141"
|
|
41
|
+
},
|
|
5
42
|
{
|
|
6
43
|
"changes": [
|
|
7
44
|
{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// .angular-partial-tmp-
|
|
2
|
+
// .angular-partial-tmp-hyLGHB/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-
|
|
2
|
+
// .angular-partial-tmp-hyLGHB/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-
|
|
49
|
+
// .angular-partial-tmp-hyLGHB/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";
|