@absolutejs/absolute 0.20.0-beta.179 → 0.20.0-beta.180
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 +45 -0
- package/dist/angular/browser.js +2 -2
- package/dist/angular/browser.js.map +3 -3
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +21 -6
- package/dist/angular/index.js.map +6 -6
- package/dist/angular/server.js +21 -6
- package/dist/angular/server.js.map +6 -6
- package/dist/build.js +5357 -4945
- package/dist/build.js.map +27 -24
- package/dist/cli/build-fntmf42w.js +495 -0
- package/dist/cli/{buildDepVendor-qvsh6dsj.js → buildDepVendor-qnwfct22.js} +5 -3
- package/dist/cli/buildReactServerComponents-fq6mw10d.js +13 -0
- package/dist/cli/{compile-p5yv6ecp.js → compile-54rb8szn.js} +94 -125
- package/dist/cli/config/server.js +10 -5
- package/dist/cli/{dev-2hbcsvkp.js → dev-6s6g5tnk.js} +13 -14
- package/dist/cli/{expoProject-1qtw97js.js → expoProject-acgfaj3f.js} +2 -1
- package/dist/cli/generatedDir-239r7csr.js +9 -0
- package/dist/cli/{index-cksezef8.js → index-0gd30trc.js} +105 -851
- package/dist/cli/index-2wvysvjc.js +40 -0
- package/dist/cli/index-42xjh6gg.js +282 -0
- package/dist/cli/{index-qw98g1p6.js → index-47e8fwha.js} +4 -1
- package/dist/cli/index-65kqn88a.js +8 -0
- package/dist/cli/{index-2bxfhs32.js → index-6f448d7m.js} +0 -26
- package/dist/cli/index-972xxwgj.js +16 -0
- package/dist/cli/index-aqe25w4h.js +39 -0
- package/dist/cli/index-assqancr.js +51 -0
- package/dist/cli/{index-2shf4aya.js → index-c8rcfe5a.js} +4 -6
- package/dist/cli/index-cba1cemz.js +8 -0
- package/dist/cli/{index-3ff5ztt3.js → index-djkrb7pc.js} +1 -7
- package/dist/cli/index-dkfwkpc8.js +138 -0
- package/dist/cli/{index-92g14j47.js → index-dw44xa4x.js} +2 -1
- package/dist/cli/index-evsnq0n2.js +17 -0
- package/dist/cli/index-fxwf3n2v.js +224 -0
- package/dist/cli/{index-zyd80s3h.js → index-js2hksgv.js} +21 -295
- package/dist/cli/{index-bp60baze.js → index-jyap0bhv.js} +1 -1
- package/dist/cli/{index-9dzdbbfc.js → index-kx2d067c.js} +8 -6
- package/dist/cli/index-pb31zan6.js +9 -0
- package/dist/cli/index-sq0478b0.js +281 -0
- package/dist/cli/index-va274tsf.js +7 -0
- package/dist/cli/{index-yd672jyq.js → index-w6xsk8cv.js} +4 -1
- package/dist/cli/index-w79snsxv.js +461 -0
- package/dist/cli/index-x1vvn549.js +835 -0
- package/dist/cli/index-xf9sfr8a.js +243 -0
- package/dist/cli/index-ycqdxy55.js +754 -0
- package/dist/cli/index-z74cqxz0.js +131 -0
- package/dist/cli/index.js +10 -9
- package/dist/cli/{islands-6zgb7501.js → islands-17tfx8jf.js} +6 -17
- package/dist/cli/{ls-0hfx323m.js → ls-0wr74w0b.js} +10 -58
- package/dist/cli/{mobile-93vaawcz.js → mobile-hpqpy61f.js} +11 -8
- package/dist/cli/{prerender-010z771p.js → prerender-w65xp6h8.js} +2 -1
- package/dist/cli/{rewriteImports-z6629aww.js → rewriteImports-np2d2kvc.js} +4 -11
- package/dist/cli/rewriteImportsPlugin-c6hcb3x6.js +12 -0
- package/dist/cli/{start-asxb79rc.js → start-mbn2zgs2.js} +6 -4
- package/dist/cli/staticAnalyzeSpaRoutes-2nev05m1.js +8 -0
- package/dist/cli/staticAnalyzeSpaRoutes-6vgzp0rs.js +8 -0
- package/dist/cli/staticAnalyzeSpaRoutes-f85q9dqk.js +8 -0
- package/dist/cli/staticAnalyzeSpaRoutes-yakmg22g.js +7 -0
- package/dist/cli/{typecheck-m2j4tkdk.js → typecheck-488txsfc.js} +92 -18
- package/dist/cli/vueCompiler-8bzdmf08.js +7 -0
- package/dist/client/chunks/{react-khr6ewhr.js → react-g8r290b8.js} +37 -2
- package/dist/client/chunks/react-g8r290b8.js.map +10 -0
- package/dist/client/chunks/vue-zcpmka32.js +85 -0
- package/dist/client/chunks/vue-zcpmka32.js.map +10 -0
- package/dist/client/index.js +58 -10
- package/dist/client/index.js.map +4 -4
- package/dist/dev/client/handlers/vue.ts +116 -0
- package/dist/index.js +2472 -2058
- package/dist/index.js.map +26 -23
- package/dist/islands/browser.js +2 -2
- package/dist/islands/browser.js.map +3 -3
- package/dist/islands/index.js +2 -2
- package/dist/islands/index.js.map +3 -3
- package/dist/react/browser.js +2 -2
- package/dist/react/browser.js.map +3 -3
- package/dist/react/index.js +42 -11
- package/dist/react/index.js.map +10 -10
- package/dist/react/server.js +42 -11
- package/dist/react/server.js.map +10 -10
- package/dist/src/angular/ssrRender.d.ts +2 -2
- package/dist/src/angular/staticAnalyzeSpaRoutes.d.ts +6 -1
- package/dist/src/build/generateManifest.d.ts +15 -0
- package/dist/src/build/manifestKeys.d.ts +22 -0
- package/dist/src/cli/add/dependencies.d.ts +1 -1
- package/dist/src/cli/scripts/typecheck.d.ts +11 -0
- package/dist/src/client/hydrators/react.d.ts +10 -0
- package/dist/src/client/hydrators/vue.d.ts +13 -0
- package/dist/src/client/islandRuntime.d.ts +1 -1
- package/dist/src/core/islandManifest.d.ts +4 -0
- package/dist/src/core/islandPageContext.d.ts +8 -2
- package/dist/src/core/lookup.d.ts +16 -1
- package/dist/src/dev/importCost/instrument.d.ts +1 -1
- package/dist/src/dev/manifestKeysRefresher.d.ts +6 -0
- package/dist/src/dev/spaRouteRefresh.d.ts +13 -0
- package/dist/src/mobile/androidConformance.d.ts +1 -1
- package/dist/src/react/staticAnalyzeSpaRoutes.d.ts +6 -1
- package/dist/src/svelte/staticAnalyzeSpaRoutes.d.ts +1 -0
- package/dist/src/utils/logger.d.ts +5 -0
- package/dist/src/utils/spaRouteManifest.d.ts +1 -0
- package/dist/src/vue/components/Image.d.ts +4 -4
- package/dist/src/vue/components/StreamSlot.d.ts +1 -1
- package/dist/src/vue/components/SuspenseSlot.d.ts +2 -2
- package/dist/src/vue/staticAnalyzeSpaRoutes.d.ts +4 -0
- package/dist/svelte/browser.js +2 -2
- package/dist/svelte/browser.js.map +3 -3
- package/dist/svelte/index.js +25 -9
- package/dist/svelte/index.js.map +8 -8
- package/dist/svelte/server.js +25 -9
- package/dist/svelte/server.js.map +8 -8
- package/dist/types/globals.d.ts +4 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/island.d.ts +1 -1
- package/dist/types/manifest.d.ts +25 -0
- package/dist/vue/browser.js +2 -2
- package/dist/vue/browser.js.map +3 -3
- package/dist/vue/index.js +21 -6
- package/dist/vue/index.js.map +6 -6
- package/dist/vue/server.js +21 -6
- package/dist/vue/server.js.map +6 -6
- package/package.json +1 -1
- package/dist/client/chunks/react-khr6ewhr.js.map +0 -10
- package/dist/client/chunks/vue-db6ppn1f.js +0 -32
- package/dist/client/chunks/vue-db6ppn1f.js.map +0 -10
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.180 — 2026-11-14
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`asset(manifest, key)` rejects keys the build does not write; `assetUnchecked` takes computed keys** (`asset`, `assetUnchecked`, `AbsoluteManifestKeys`, `ManifestKey`)
|
|
14
|
+
`asset(manifest, key)` accepted any string, so a misspelled key passed typecheck and failed at runtime. `absolute dev`, `absolute build` and `absolute typecheck` now derive the project's manifest keys from its pages, file routes, stylesheets and island registry, without building, and write `.absolutejs/types/manifest.d.ts`, which adds them to the new `AbsoluteManifestKeys` interface. `asset` takes a `ManifestKey`: one of those keys, or any string when the project has no generated file. The dev server rewrites the file when a page, stylesheet or island is added or removed. Keys that depend on bundling (a page's stylesheet, an island's stylesheet, a worker) are accepted whenever the build may write them, and shared chunks and self-hosted fonts are typed by pattern. For a key computed at runtime, use the new `assetUnchecked`: the same lookup without the check. `absolute typecheck` always reads the generated file; add `.absolutejs/types/manifest.d.ts` to `include` in tsconfig.json for the same check in your editor.
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
|
|
18
|
+
- **React pages with islands update on every edit and respond to clicks, and island edits keep island state**
|
|
19
|
+
On a React page that renders `<Island>`, edits to the page or to a component it imports logged "react component … applied" in `absolute dev` and changed nothing on screen. Beta.175 and beta.178 fixed real problems on that path (a missing island update, then two React updates per save), but not this one, and their tests passed because their pages loaded the page's own script before the islands bootstrap. In a real project it is usually the other way round: the bootstrap is one prebuilt file, while the page's script waits on every component the dev server transpiles. The bootstrap imports React DOM, and React DOM looks for the DevTools hook that Fast Refresh uses only once, when it loads. The page installed that hook afterwards, so Fast Refresh never found React DOM, and every refresh did nothing. The same ordering also broke clicks on the page (and can in production, where the scripts race the same way): React listens for events once per document, the first island root claimed that, and the page's root, created afterwards on the document, got no event listeners, so nothing outside the islands responded. In dev, pages with islands now install a stand-in DevTools hook before the bootstrap runs, so Fast Refresh finds React DOM whichever script loads first. Islands on a React page now wait for the page's root before they hydrate. Editing an island also no longer resets its state where the framework's own HMR keeps it: React islands use Fast Refresh, which keeps hook state unless the hooks changed, and Vue islands re-render in place after a template or style edit (a script edit reloads the component). Svelte islands still start over when edited, because Svelte's HMR recreates the component it swaps.
|
|
20
|
+
- **Dev React Server Components pages no longer send file paths or server function source to the browser**
|
|
21
|
+
Under `absolute dev`, the Flight payload inlined into a React Server Components page (`self.__absoluteReactServerPayload`) carried React's development debug info: per server component its stack frames with absolute source paths (the project's and the framework's), its props, including the source text of function props such as a SuspenseSlot `resolve` callback, and timing rows. Dev renders now give React's Flight server a debug channel, so that info goes to a second stream that only the server-side HTML renderer reads; the payload sent to the browser keeps only references to it, which the Flight client skips. Stack frames are also dropped from error rows, so a server component error reaches the browser as its message, while the terminal still logs the full error. The page renders, streams and hydrates as before. In the browser, server components no longer appear in React DevTools or owner stacks, and server `console` calls are no longer replayed in the browser console; they still print in the terminal. Production payloads are unchanged.
|
|
22
|
+
- **Dev picks up added and removed page routes without a restart**
|
|
23
|
+
The table of SPA routes the server answers (a path no page's router declares is a 404) was computed only by a full build, which `absolute dev` skips for page edits. A route added to a Vue page's `export const routes = defineRoutes([...])` kept answering 404 until dev restarted, a removed route kept rendering, and nothing was logged. The same was true of React `createBrowserRouter`, Svelte `<Router>` and Angular `provideRouter` route tables. Dev now re-reads an edited page's routes, updates the server's table and logs a `routes update` line naming the added and removed paths. A browser already on a Vue page swaps the new routes into its live router, so it can navigate to an added route without a full reload; if the route it is on was removed, it reloads and shows the 404. The route reader now also finds `defineRoutes` in a `<script>` block that follows `<script setup>`, which it previously missed.
|
|
24
|
+
- **`absolute typecheck` passes with Vue and Svelte islands outside the framework directories, and checks their props**
|
|
25
|
+
`absolute typecheck` only knew about the `.vue` files under `vueDirectory` and generated Svelte declarations only for `svelteDirectory`, so a clean project whose island registry imports `./VueCounter.vue` or `./SvelteCounter.svelte` from `src/islands/` failed with TS2307 (Cannot find module). Every `.vue` and `.svelte` file in the project is now covered: Vue islands resolve for the plain checker and their props are checked by vue-check, Svelte islands get generated declarations and run through svelte-check, and a `.svelte` import no longer fails vue-check. Svelte 5 island props were also typed as `never` by `IslandRegistryProps` (and so by `createTypedIsland`); they are now the component's own props, so a wrong prop on a Svelte island is reported and a correct one passes.
|
|
26
|
+
|
|
27
|
+
### Internal
|
|
28
|
+
|
|
29
|
+
- **`startIslands` declares its options as a single parameter** (`startIslands`)
|
|
30
|
+
`startIslands` takes the same `StartIslandsOptions` object as before; its parameter is now declared as one `options` value instead of a destructured object, so on a React page it can wait for the page root before scheduling islands.
|
|
31
|
+
|
|
9
32
|
## 0.20.0-beta.179 — 2026-11-14
|
|
10
33
|
|
|
11
34
|
### Fixed
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,51 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "On a React page that renders `<Island>`, edits to the page or to a component it imports logged \"react component … applied\" in `absolute dev` and changed nothing on screen. Beta.175 and beta.178 fixed real problems on that path (a missing island update, then two React updates per save), but not this one, and their tests passed because their pages loaded the page's own script before the islands bootstrap. In a real project it is usually the other way round: the bootstrap is one prebuilt file, while the page's script waits on every component the dev server transpiles. The bootstrap imports React DOM, and React DOM looks for the DevTools hook that Fast Refresh uses only once, when it loads. The page installed that hook afterwards, so Fast Refresh never found React DOM, and every refresh did nothing. The same ordering also broke clicks on the page (and can in production, where the scripts race the same way): React listens for events once per document, the first island root claimed that, and the page's root, created afterwards on the document, got no event listeners, so nothing outside the islands responded. In dev, pages with islands now install a stand-in DevTools hook before the bootstrap runs, so Fast Refresh finds React DOM whichever script loads first. Islands on a React page now wait for the page's root before they hydrate. Editing an island also no longer resets its state where the framework's own HMR keeps it: React islands use Fast Refresh, which keeps hook state unless the hooks changed, and Vue islands re-render in place after a template or style edit (a script edit reloads the component). Svelte islands still start over when edited, because Svelte's HMR recreates the component it swaps.",
|
|
9
|
+
"kind": "fixed",
|
|
10
|
+
"summary": "React pages with islands update on every edit and respond to clicks, and island edits keep island state"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"detail": "Under `absolute dev`, the Flight payload inlined into a React Server Components page (`self.__absoluteReactServerPayload`) carried React's development debug info: per server component its stack frames with absolute source paths (the project's and the framework's), its props, including the source text of function props such as a SuspenseSlot `resolve` callback, and timing rows. Dev renders now give React's Flight server a debug channel, so that info goes to a second stream that only the server-side HTML renderer reads; the payload sent to the browser keeps only references to it, which the Flight client skips. Stack frames are also dropped from error rows, so a server component error reaches the browser as its message, while the terminal still logs the full error. The page renders, streams and hydrates as before. In the browser, server components no longer appear in React DevTools or owner stacks, and server `console` calls are no longer replayed in the browser console; they still print in the terminal. Production payloads are unchanged.",
|
|
14
|
+
"kind": "fixed",
|
|
15
|
+
"summary": "Dev React Server Components pages no longer send file paths or server function source to the browser"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"detail": "The table of SPA routes the server answers (a path no page's router declares is a 404) was computed only by a full build, which `absolute dev` skips for page edits. A route added to a Vue page's `export const routes = defineRoutes([...])` kept answering 404 until dev restarted, a removed route kept rendering, and nothing was logged. The same was true of React `createBrowserRouter`, Svelte `<Router>` and Angular `provideRouter` route tables. Dev now re-reads an edited page's routes, updates the server's table and logs a `routes update` line naming the added and removed paths. A browser already on a Vue page swaps the new routes into its live router, so it can navigate to an added route without a full reload; if the route it is on was removed, it reloads and shows the 404. The route reader now also finds `defineRoutes` in a `<script>` block that follows `<script setup>`, which it previously missed.",
|
|
19
|
+
"kind": "fixed",
|
|
20
|
+
"summary": "Dev picks up added and removed page routes without a restart"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"detail": "`startIslands` takes the same `StartIslandsOptions` object as before; its parameter is now declared as one `options` value instead of a destructured object, so on a React page it can wait for the page root before scheduling islands.",
|
|
24
|
+
"kind": "internal",
|
|
25
|
+
"summary": "`startIslands` declares its options as a single parameter",
|
|
26
|
+
"symbols": [
|
|
27
|
+
"startIslands"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"detail": "`absolute typecheck` only knew about the `.vue` files under `vueDirectory` and generated Svelte declarations only for `svelteDirectory`, so a clean project whose island registry imports `./VueCounter.vue` or `./SvelteCounter.svelte` from `src/islands/` failed with TS2307 (Cannot find module). Every `.vue` and `.svelte` file in the project is now covered: Vue islands resolve for the plain checker and their props are checked by vue-check, Svelte islands get generated declarations and run through svelte-check, and a `.svelte` import no longer fails vue-check. Svelte 5 island props were also typed as `never` by `IslandRegistryProps` (and so by `createTypedIsland`); they are now the component's own props, so a wrong prop on a Svelte island is reported and a correct one passes.",
|
|
32
|
+
"kind": "fixed",
|
|
33
|
+
"summary": "`absolute typecheck` passes with Vue and Svelte islands outside the framework directories, and checks their props"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"detail": "`asset(manifest, key)` accepted any string, so a misspelled key passed typecheck and failed at runtime. `absolute dev`, `absolute build` and `absolute typecheck` now derive the project's manifest keys from its pages, file routes, stylesheets and island registry, without building, and write `.absolutejs/types/manifest.d.ts`, which adds them to the new `AbsoluteManifestKeys` interface. `asset` takes a `ManifestKey`: one of those keys, or any string when the project has no generated file. The dev server rewrites the file when a page, stylesheet or island is added or removed. Keys that depend on bundling (a page's stylesheet, an island's stylesheet, a worker) are accepted whenever the build may write them, and shared chunks and self-hosted fonts are typed by pattern. For a key computed at runtime, use the new `assetUnchecked`: the same lookup without the check. `absolute typecheck` always reads the generated file; add `.absolutejs/types/manifest.d.ts` to `include` in tsconfig.json for the same check in your editor.",
|
|
37
|
+
"kind": "added",
|
|
38
|
+
"summary": "`asset(manifest, key)` rejects keys the build does not write; `assetUnchecked` takes computed keys",
|
|
39
|
+
"symbols": [
|
|
40
|
+
"asset",
|
|
41
|
+
"assetUnchecked",
|
|
42
|
+
"AbsoluteManifestKeys",
|
|
43
|
+
"ManifestKey"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"date": "2026-11-14",
|
|
48
|
+
"version": "0.20.0-beta.180"
|
|
49
|
+
},
|
|
5
50
|
{
|
|
6
51
|
"changes": [
|
|
7
52
|
{
|
package/dist/angular/browser.js
CHANGED
|
@@ -88,7 +88,7 @@ var ABSOLUTE_HTTP_TRANSFER_CACHE_SKIP_HEADER = "x-skip-transfer-cache", buildAbs
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
// src/core/islandManifest.ts
|
|
91
|
-
var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOOTSTRAP_MANIFEST_KEY = "BootstrapClient", toIslandFrameworkSegment = (framework) => framework[0]?.toUpperCase() + framework.slice(1), collectFrameworkIslands = (manifest, prefix) => {
|
|
91
|
+
var ISLAND_BOOTSTRAP_MANIFEST_KEY = "AbsoluteIslandBootstrap", LEGACY_ISLAND_BOOTSTRAP_MANIFEST_KEY = "BootstrapClient", REACT_PAGE_ROOT_EVENT = "absolute:react-page-root", toIslandFrameworkSegment = (framework) => framework[0]?.toUpperCase() + framework.slice(1), collectFrameworkIslands = (manifest, prefix) => {
|
|
92
92
|
const entries = {};
|
|
93
93
|
let found = false;
|
|
94
94
|
for (const [key, value] of Object.entries(manifest)) {
|
|
@@ -10383,5 +10383,5 @@ export {
|
|
|
10383
10383
|
withPendingTask
|
|
10384
10384
|
};
|
|
10385
10385
|
|
|
10386
|
-
//# debugId=
|
|
10386
|
+
//# debugId=6ABD5809EADF708164756E2164756E21
|
|
10387
10387
|
//# sourceMappingURL=browser.js.map
|