@absolutejs/absolute 0.20.0-beta.172 → 0.20.0-beta.173
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 +32 -0
- package/README.md +3 -2
- package/changelog.json +57 -0
- package/dist/angular/browser.js +12 -12
- package/dist/angular/browser.js.map +6 -7
- package/dist/angular/components/core/streamingSlotRegistrar.js +2 -6
- package/dist/angular/components/core/streamingSlotRegistry.js +3 -7
- package/dist/angular/components/defer-slot.component.js +12 -7
- package/dist/angular/components/stream-slot.component.js +3 -1
- package/dist/angular/index.js +40 -13
- package/dist/angular/index.js.map +7 -7
- package/dist/angular/server.js +39 -12
- package/dist/angular/server.js.map +6 -6
- package/dist/build/buildWorker.js +135 -57
- package/dist/build.js +1183 -1011
- package/dist/build.js.map +16 -15
- package/dist/cli/config/server.js +43 -12
- package/dist/cli/{doctor-repprx92.js → doctor-m36tmx4d.js} +70 -15
- package/dist/cli/index.js +1 -1
- package/dist/core/streamingSlotRegistrar.js +2 -5
- package/dist/core/streamingSlotRegistrar.js.map +4 -5
- package/dist/core/streamingSlotRegistry.js +2 -5
- package/dist/core/streamingSlotRegistry.js.map +4 -5
- package/dist/dev/serverBootstrap.js +2 -1
- package/dist/index.js +1116 -940
- package/dist/index.js.map +18 -17
- package/dist/islands/index.js +2 -2
- package/dist/islands/index.js.map +3 -3
- package/dist/mobile/browser.js +2 -2
- package/dist/mobile/browser.js.map +3 -3
- package/dist/mobile/index.js +2 -2
- package/dist/mobile/index.js.map +3 -3
- package/dist/react/components/index.js +2 -5
- package/dist/react/components/index.js.map +5 -6
- package/dist/react/index.js +45 -16
- package/dist/react/index.js.map +8 -8
- package/dist/react/router/browser.js.map +2 -2
- package/dist/react/router/index.js.map +2 -2
- package/dist/react/server.js +45 -16
- package/dist/react/server.js.map +8 -8
- package/dist/src/angular/components/defer-slot.component.d.ts +1 -0
- package/dist/src/build/missingReactRouter.d.ts +8 -0
- package/dist/src/build/vueModuleOutputPath.d.ts +10 -6
- package/dist/src/cli/scripts/doctor.d.ts +10 -0
- package/dist/src/core/streamingSlotWarningScope.d.ts +3 -0
- package/dist/src/dev/hot/reload.d.ts +5 -0
- package/dist/src/dev/hot/runtime.d.ts +2 -0
- package/dist/src/dev/srcPath.d.ts +2 -1
- package/dist/src/react/pageHandler.d.ts +5 -0
- package/dist/src/react/router/Link.d.ts +6 -1
- package/dist/src/react/serverComponents/pageHandler.d.ts +2 -0
- package/dist/src/utils/portInUse.d.ts +16 -0
- package/dist/svelte/index.js +39 -12
- package/dist/svelte/index.js.map +6 -6
- package/dist/svelte/server.js +39 -12
- package/dist/svelte/server.js.map +6 -6
- package/dist/vue/components/index.js +2 -5
- package/dist/vue/components/index.js.map +4 -5
- package/dist/vue/index.js +39 -12
- package/dist/vue/index.js.map +6 -6
- package/dist/vue/server.js +39 -12
- package/dist/vue/server.js.map +6 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,38 @@ 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.173 — 2026-11-14
|
|
10
|
+
|
|
11
|
+
### Security
|
|
12
|
+
|
|
13
|
+
- **Island pages no longer expose server file paths in production**
|
|
14
|
+
In production, a React page that rendered an <Island> could put absolute paths from the server’s disk (server-rendered pages, server bundles and static HTML pages) into the manifest it embeds for the browser, exposing the server’s file layout. The manifest embedded in island pages now contains only browser URLs, whichever framework renders the page. No code changes are needed; rebuild and redeploy to pick up the fix.
|
|
15
|
+
- **Vue lazy route components no longer reveal the build machine’s file paths**
|
|
16
|
+
A Vue page that exports `routes` and lazily loads a route component shipped the build machine’s absolute project path to every browser: the lazy component’s file name, and the imports of it in the router page and a shared chunk, read like `vue/client/sources/%2F/home/you/app/src/frontend/vue/components/Lazy.<hash>.js`. Compiled Vue files are now named by their path inside the project, such as `vue/client/sources/src/frontend/vue/components/Lazy.<hash>.js`, in both the browser and the server build. A Vue file outside the project, such as a package in a parent `node_modules` or a sibling workspace, is placed under `_external/` and named only by its path below the folder it shares with the project, or by a hash when that folder is the filesystem root. Rebuild and redeploy to stop serving the old paths.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **React pages stream SuspenseSlot and StreamSlot content without opting in** (`handleReactPageRequest`)
|
|
21
|
+
A React page that rendered a `<SuspenseSlot>` or `<StreamSlot>` only streamed when its handler passed `collectStreamingSlots: true`. Without it the slot stayed on its fallback forever, and production logged nothing. `handleReactPageRequest` and the React Server Components page handler now collect streaming slots by default, so the shell arrives first and each slot's content streams in when it resolves. A page that renders no slot gets the same bytes and headers as before, with no measurable extra work. Pass `collectStreamingSlots: false` to turn collection off for a route; a slot rendered there logs a warning naming that option, once per render in development and once per process in production. Svelte, Vue and Angular handlers still need `collectStreamingSlots: true`, and their warning about the missing option now shows in production too.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- **Angular `@defer` sections stay on the page after hydration**
|
|
26
|
+
An Angular page with `@defer` blocks streamed its deferred sections correctly, then lost them once the browser hydrated the page, in dev and in production. The browser logged `ReferenceError: process is not defined` from the defer slot, and dev also logged an NG0100 error. The defer slot no longer runs its server-only streaming setup in the browser, and the NODE_ENV check that streaming slots share no longer throws where there is no `process`, which also protects Svelte and Vue streaming slots that reach the browser. Deferred sections now stay resolved after hydration, with no console errors.
|
|
27
|
+
- **Editing a module server.ts imports updates the dev server again**
|
|
28
|
+
In dev, editing a server module that server.ts imports, such as the api.ts a create-absolutejs app passes to .use(), updates the running server in place again: the new route responses are served without a restart, and scopedState keeps every visitor’s state. Before, when the project’s folder path contained "angular" (or "ember"), the edit was mistaken for an Angular component and sent to Angular HMR, or silently dropped when Angular was not configured, and the old response kept being served until dev restarted, even after later server.ts edits. A .ts file outside every configured framework directory is now always treated as server or shared code, and a server.ts edit also applies any imported module whose file changed but whose update never arrived.
|
|
29
|
+
- **Dev serves source files whose paths contain spaces**
|
|
30
|
+
The dev module server now decodes the percent-encoding a browser adds to module URLs. Before, a source file whose path contained a space or another encoded character, such as a project or linked package inside a folder named "Local Documents", was requested as `%20` and answered with a 500, so the page failed to hydrate in `absolute dev`.
|
|
31
|
+
- **absolute doctor reports a busy dev port as in use**
|
|
32
|
+
absolute doctor could say the dev port was free while another server was listening on it, most visibly on macOS, where its process lookup failed silently and found no listeners. It now checks the port directly: it tries to connect over IPv4 and IPv6 loopback and to bind the IPv4 and IPv6 wildcard addresses separately, so a listener on either family or on both is reported as in use. The port it checks is resolved the same way as absolute dev (ABSOLUTE_PORT, then PORT, then dev.port in absolute.config.ts, then the default), and the check also runs when the config file cannot be loaded.
|
|
33
|
+
- **Builds that import react/router without react-router installed explain why, and point to a Link that needs no router**
|
|
34
|
+
Importing `<Link>` from `@absolutejs/absolute/react/router` in a project without the optional `react-router` package failed the build with a bare `Could not resolve: "react-router"`. That entry also exports `<UniversalRouter>`, which is built on react-router, so it does need the package. The build now says so, tells you to install react-router for `<UniversalRouter>`, and points to `import { Link } from '@absolutejs/absolute/react/components'`: the same `<Link>`, with no react-router dependency, whose clicks `enableNavigation()` turns into soft page navigations. A react-router import in your own code without the package installed gets the same advice.
|
|
35
|
+
|
|
36
|
+
### Internal
|
|
37
|
+
|
|
38
|
+
- **DeferSlotComponent’s declaration gains a private member** (`DeferSlotComponent`)
|
|
39
|
+
The published type declaration of `DeferSlotComponent` lists a new private member, used to tell the server render from the browser. Nothing about how the component is used in templates changed.
|
|
40
|
+
|
|
9
41
|
## 0.20.0-beta.172 — 2026-11-13
|
|
10
42
|
|
|
11
43
|
### Changed
|
package/README.md
CHANGED
|
@@ -165,8 +165,9 @@ the dynamic slots are rendered and streamed into it:
|
|
|
165
165
|
/>
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
In Svelte, use the `dynamic` prop or `<!-- absolute:stream dynamic -->`.
|
|
169
|
-
|
|
168
|
+
In Svelte, use the `dynamic` prop or `<!-- absolute:stream dynamic -->`. Svelte
|
|
169
|
+
pages need `collectStreamingSlots: true`; React pages collect streaming slots
|
|
170
|
+
by default (pass `collectStreamingSlots: false` to turn it off). The shell's page props are captured
|
|
170
171
|
at build time, so per-user data belongs in dynamic slots. Works for React
|
|
171
172
|
and Svelte pages today. See `docs/PARTIAL_PRERENDERING_PLAN.md`.
|
|
172
173
|
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,63 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "An Angular page with `@defer` blocks streamed its deferred sections correctly, then lost them once the browser hydrated the page, in dev and in production. The browser logged `ReferenceError: process is not defined` from the defer slot, and dev also logged an NG0100 error. The defer slot no longer runs its server-only streaming setup in the browser, and the NODE_ENV check that streaming slots share no longer throws where there is no `process`, which also protects Svelte and Vue streaming slots that reach the browser. Deferred sections now stay resolved after hydration, with no console errors.",
|
|
9
|
+
"kind": "fixed",
|
|
10
|
+
"summary": "Angular `@defer` sections stay on the page after hydration"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"detail": "In dev, editing a server module that server.ts imports, such as the api.ts a create-absolutejs app passes to .use(), updates the running server in place again: the new route responses are served without a restart, and scopedState keeps every visitor’s state. Before, when the project’s folder path contained \"angular\" (or \"ember\"), the edit was mistaken for an Angular component and sent to Angular HMR, or silently dropped when Angular was not configured, and the old response kept being served until dev restarted, even after later server.ts edits. A .ts file outside every configured framework directory is now always treated as server or shared code, and a server.ts edit also applies any imported module whose file changed but whose update never arrived.",
|
|
14
|
+
"kind": "fixed",
|
|
15
|
+
"summary": "Editing a module server.ts imports updates the dev server again"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"detail": "The published type declaration of `DeferSlotComponent` lists a new private member, used to tell the server render from the browser. Nothing about how the component is used in templates changed.",
|
|
19
|
+
"kind": "internal",
|
|
20
|
+
"summary": "DeferSlotComponent’s declaration gains a private member",
|
|
21
|
+
"symbols": [
|
|
22
|
+
"DeferSlotComponent"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"detail": "The dev module server now decodes the percent-encoding a browser adds to module URLs. Before, a source file whose path contained a space or another encoded character, such as a project or linked package inside a folder named \"Local Documents\", was requested as `%20` and answered with a 500, so the page failed to hydrate in `absolute dev`.",
|
|
27
|
+
"kind": "fixed",
|
|
28
|
+
"summary": "Dev serves source files whose paths contain spaces"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"detail": "absolute doctor could say the dev port was free while another server was listening on it, most visibly on macOS, where its process lookup failed silently and found no listeners. It now checks the port directly: it tries to connect over IPv4 and IPv6 loopback and to bind the IPv4 and IPv6 wildcard addresses separately, so a listener on either family or on both is reported as in use. The port it checks is resolved the same way as absolute dev (ABSOLUTE_PORT, then PORT, then dev.port in absolute.config.ts, then the default), and the check also runs when the config file cannot be loaded.",
|
|
32
|
+
"kind": "fixed",
|
|
33
|
+
"summary": "absolute doctor reports a busy dev port as in use"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"detail": "In production, a React page that rendered an <Island> could put absolute paths from the server’s disk (server-rendered pages, server bundles and static HTML pages) into the manifest it embeds for the browser, exposing the server’s file layout. The manifest embedded in island pages now contains only browser URLs, whichever framework renders the page. No code changes are needed; rebuild and redeploy to pick up the fix.",
|
|
37
|
+
"kind": "security",
|
|
38
|
+
"summary": "Island pages no longer expose server file paths in production"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"detail": "Importing `<Link>` from `@absolutejs/absolute/react/router` in a project without the optional `react-router` package failed the build with a bare `Could not resolve: \"react-router\"`. That entry also exports `<UniversalRouter>`, which is built on react-router, so it does need the package. The build now says so, tells you to install react-router for `<UniversalRouter>`, and points to `import { Link } from '@absolutejs/absolute/react/components'`: the same `<Link>`, with no react-router dependency, whose clicks `enableNavigation()` turns into soft page navigations. A react-router import in your own code without the package installed gets the same advice.",
|
|
42
|
+
"kind": "fixed",
|
|
43
|
+
"summary": "Builds that import react/router without react-router installed explain why, and point to a Link that needs no router"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"detail": "A React page that rendered a `<SuspenseSlot>` or `<StreamSlot>` only streamed when its handler passed `collectStreamingSlots: true`. Without it the slot stayed on its fallback forever, and production logged nothing. `handleReactPageRequest` and the React Server Components page handler now collect streaming slots by default, so the shell arrives first and each slot's content streams in when it resolves. A page that renders no slot gets the same bytes and headers as before, with no measurable extra work. Pass `collectStreamingSlots: false` to turn collection off for a route; a slot rendered there logs a warning naming that option, once per render in development and once per process in production. Svelte, Vue and Angular handlers still need `collectStreamingSlots: true`, and their warning about the missing option now shows in production too.",
|
|
47
|
+
"kind": "changed",
|
|
48
|
+
"summary": "React pages stream SuspenseSlot and StreamSlot content without opting in",
|
|
49
|
+
"symbols": [
|
|
50
|
+
"handleReactPageRequest"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"detail": "A Vue page that exports `routes` and lazily loads a route component shipped the build machine’s absolute project path to every browser: the lazy component’s file name, and the imports of it in the router page and a shared chunk, read like `vue/client/sources/%2F/home/you/app/src/frontend/vue/components/Lazy.<hash>.js`. Compiled Vue files are now named by their path inside the project, such as `vue/client/sources/src/frontend/vue/components/Lazy.<hash>.js`, in both the browser and the server build. A Vue file outside the project, such as a package in a parent `node_modules` or a sibling workspace, is placed under `_external/` and named only by its path below the folder it shares with the project, or by a hash when that folder is the filesystem root. Rebuild and redeploy to stop serving the old paths.",
|
|
55
|
+
"kind": "security",
|
|
56
|
+
"summary": "Vue lazy route components no longer reveal the build machine’s file paths"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"date": "2026-11-14",
|
|
60
|
+
"version": "0.20.0-beta.173"
|
|
61
|
+
},
|
|
5
62
|
{
|
|
6
63
|
"changes": [
|
|
7
64
|
{
|
package/dist/angular/browser.js
CHANGED
|
@@ -9088,9 +9088,6 @@ var require_cjs = __commonJS(function(exports) {
|
|
|
9088
9088
|
} });
|
|
9089
9089
|
});
|
|
9090
9090
|
|
|
9091
|
-
// src/utils/runtimeMode.ts
|
|
9092
|
-
var ENV_VAR = "NODE_ENV", getNodeEnv = () => process.env[ENV_VAR], isDevelopmentRuntime = () => process.env[ENV_VAR] === "development", isProductionRuntime = () => process.env[ENV_VAR] === "production";
|
|
9093
|
-
|
|
9094
9091
|
// src/constants.ts
|
|
9095
9092
|
var ANGULAR_INIT_TIMEOUT_MS = 500, ANSI_ESCAPE_CODE = 27, ANSI_ESCAPE_LENGTH = 3, ASCII_SPACE = 32, BASE_36_RADIX = 36, BUN_BUILD_WARNING_SUPPRESSION = "wildcard sideEffects are not supported yet", TAILWIND_BUN_CSS_WARNING_PATTERN, BODY_SLICE_LENGTH = 2000, BYTES_PER_KILOBYTE = 1024, CLI_ARGS_OFFSET = 3, CSS_ERROR_RESOLVE_DELAY_MS = 50, CSS_MAX_CHECK_ATTEMPTS = 10, CSS_MAX_PARSE_TIMEOUT_MS = 500, CSS_RELOAD_BACKOFF_BASE_MS = 1000, CSS_RELOAD_BACKOFF_MAX_MS = 60000, CSS_SHEET_READY_TIMEOUT_MS = 100, DEFAULT_CHUNK_SIZE = 16384, DEFAULT_DEBOUNCE_MS = 15, DEFAULT_PORT = 3000, DEV_SERVER_RESTART_DEBOUNCE_MS = 100, DOM_UPDATE_DELAY_MS = 50, FILE_PROTOCOL_PREFIX_LENGTH = 7, FOCUS_ID_PREFIX_LENGTH = 3, FOCUS_IDX_PREFIX_LENGTH = 4, FOCUS_NAME_PREFIX_LENGTH = 5, ESLINT_STUDIO_DEFAULT_HOST = "eslint.absolute.localhost", ESLINT_STUDIO_DEFAULT_PORT = 4099, CONFIG_DEFAULT_HOST = "config.absolute.localhost", CONFIG_DEFAULT_PORT = 4099, HMR_UPDATE_TIMEOUT_MS = 2000, HOOK_SIGNATURE_LENGTH = 12, EXCLUDE_LAST_OFFSET = -1, HTTP_STATUS_OK = 200, HTTP_STATUS_BAD_REQUEST = 400, HTTP_STATUS_NOT_FOUND = 404, HTTP_STATUS_GONE = 410, HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, HOURS_IN_DAY = 24, HOURS_IN_HALF_DAY = 12, IMAGE_DEFAULT_DEVICE_SIZES, IMAGE_DEFAULT_IMAGE_SIZES, IMAGE_DEFAULT_QUALITY = 75, IMAGE_GLOB_SUFFIX_LENGTH = 2, INSTANCE_PROBE_TIMEOUT_MS = 250, MAX_ERROR_LENGTH = 200, MAX_RECONNECT_ATTEMPTS = 60, MILLISECONDS_IN_A_SECOND = 1000, MINUTES_IN_AN_HOUR = 60, SECONDS_IN_A_MINUTE = 60, MILLISECONDS_IN_A_MINUTE, MILLISECONDS_IN_A_DAY, OVERLAY_FADE_DURATION_MS = 150, PING_INTERVAL_MS = 30000, LIST_LOG_TAIL_MAX_BYTES = 65536, LIST_TUI_COLUMN_GAP = 2, LIST_TUI_DEFAULT_HEIGHT = 28, LIST_TUI_DEFAULT_WIDTH = 100, LIST_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30, LIST_TUI_FOOTER_LINE_COUNT = 2, LIST_TUI_MARKER_WIDTH = 2, LIST_TUI_MIN_LOG_HEIGHT = 3, LIST_TUI_MIN_URL_WIDTH = 16, LIST_TUI_RENDER_DEBOUNCE_MS = 16, LIST_TUI_STATUS_MESSAGE_TIMEOUT_MS = 4000, LIST_WATCH_REFRESH_MS = 1000, RAF_BATCH_COUNT = 3, RANDOM_ID_END_INDEX = 11, REBUILD_BATCH_DELAY_MS = 10, REBUILD_RELOAD_DELAY_MS = 200, RECONNECT_INITIAL_DELAY_MS = 500, RECONNECT_POLL_INTERVAL_MS = 300, REACT_STREAM_SLOT_FAST_DELAY_MS = 5, REACT_STREAM_SLOT_SLOW_DELAY_MS = 20, SIGINT_EXIT_CODE = 130, SIGTERM_EXIT_CODE = 143, SVELTE_CSS_LOAD_TIMEOUT_MS = 500, TIME_PRECISION = 2, TWO_THIRDS, UNFOUND_INDEX = -1, WEBSOCKET_NORMAL_CLOSURE = 1000, DEFAULT_WEBSOCKET_IDLE_TIMEOUT_SECONDS = 240, DEFAULT_HTTP_IDLE_TIMEOUT_SECONDS = 240, MAX_HTTP_IDLE_TIMEOUT_SECONDS = 255, WORKSPACE_COMMAND_ARGS_OFFSET = 3, WORKSPACE_FAILURE_LOG_PRINT_LIMIT = 30, WORKSPACE_FAILURE_RECENT_LOG_LIMIT = 60, WORKSPACE_READY_ATTEMPT_TIMEOUT_MS = 5000, WORKSPACE_READY_PROBE_INTERVAL_MS = 250, WORKSPACE_READY_TIMEOUT_MS = 30000, WORKSPACE_SHUTDOWN_TIMEOUT_MS = 1e4, WORKSPACE_TUI_DEFAULT_HEIGHT = 28, WORKSPACE_TUI_DEFAULT_WIDTH = 100, WORKSPACE_TUI_ESCAPE_SEQUENCE_TIMEOUT_MS = 30, WORKSPACE_TUI_FOOTER_LINE_COUNT = 3, WORKSPACE_TUI_MIN_LOG_HEIGHT = 3, WORKSPACE_TUI_MIN_SERVICE_NAME_WIDTH = 7, WORKSPACE_TUI_MIN_TARGET_WIDTH = 8, WORKSPACE_TUI_MIN_WRAP_WIDTH = 12, WORKSPACE_TUI_PROMPT_CURSOR_OFFSET = 3, WORKSPACE_TUI_RECENT_LOG_LIMIT = 40, WORKSPACE_TUI_RENDER_DEBOUNCE_MS = 16, WORKSPACE_TUI_STATUS_WIDTH = 10, WORKSPACE_TUI_TARGET_PADDING_WIDTH = 6, WORKSPACE_TUI_VISIBILITY_WIDTH = 8;
|
|
9096
9093
|
var init_constants = __esm(() => {
|
|
@@ -9832,9 +9829,10 @@ import {
|
|
|
9832
9829
|
ContentChild,
|
|
9833
9830
|
Input as Input2,
|
|
9834
9831
|
inject as inject8,
|
|
9832
|
+
PLATFORM_ID,
|
|
9835
9833
|
signal as signal2
|
|
9836
9834
|
} from "@angular/core";
|
|
9837
|
-
import { NgTemplateOutlet } from "@angular/common";
|
|
9835
|
+
import { isPlatformServer, NgTemplateOutlet } from "@angular/common";
|
|
9838
9836
|
|
|
9839
9837
|
// src/core/streamingSlotRegistrar.ts
|
|
9840
9838
|
var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
|
|
@@ -9877,7 +9875,7 @@ var setStreamingSlotWarningController = (controller) => {
|
|
|
9877
9875
|
Reflect.set(globalThis, STREAMING_SLOT_WARNING_STORAGE_KEY, controller);
|
|
9878
9876
|
};
|
|
9879
9877
|
var warnMissingStreamingSlotCollector = (primitiveName) => {
|
|
9880
|
-
if (
|
|
9878
|
+
if (isStreamingSlotCollectionActive()) {
|
|
9881
9879
|
return;
|
|
9882
9880
|
}
|
|
9883
9881
|
getWarningController()?.maybeWarn(primitiveName);
|
|
@@ -9936,6 +9934,7 @@ DeferResolvedTemplateDirective = __legacyDecorateClassTS([
|
|
|
9936
9934
|
class DeferSlotComponent {
|
|
9937
9935
|
constructor() {
|
|
9938
9936
|
this.cdr = inject8(ChangeDetectorRef2);
|
|
9937
|
+
this.isServer = isPlatformServer(inject8(PLATFORM_ID));
|
|
9939
9938
|
this.runtimeReady = signal2(false);
|
|
9940
9939
|
this.serverSlotRegistered = false;
|
|
9941
9940
|
this.id = "";
|
|
@@ -9962,7 +9961,8 @@ class DeferSlotComponent {
|
|
|
9962
9961
|
const { id } = this;
|
|
9963
9962
|
if (!id)
|
|
9964
9963
|
return;
|
|
9965
|
-
if (this.
|
|
9964
|
+
if (this.isServer) {
|
|
9965
|
+
this.registerServerSlot();
|
|
9966
9966
|
return;
|
|
9967
9967
|
}
|
|
9968
9968
|
const absoluteWindow = window;
|
|
@@ -9975,10 +9975,10 @@ class DeferSlotComponent {
|
|
|
9975
9975
|
};
|
|
9976
9976
|
}
|
|
9977
9977
|
ngAfterViewInit() {
|
|
9978
|
-
if (this.
|
|
9979
|
-
|
|
9980
|
-
if (typeof window === "undefined")
|
|
9978
|
+
if (this.isServer) {
|
|
9979
|
+
this.registerServerSlot();
|
|
9981
9980
|
return;
|
|
9981
|
+
}
|
|
9982
9982
|
requestAnimationFrame(() => {
|
|
9983
9983
|
this.runtimeReady.set(true);
|
|
9984
9984
|
this.cdr.markForCheck();
|
|
@@ -9987,7 +9987,7 @@ class DeferSlotComponent {
|
|
|
9987
9987
|
});
|
|
9988
9988
|
}
|
|
9989
9989
|
ngOnDestroy() {
|
|
9990
|
-
if (
|
|
9990
|
+
if (this.isServer)
|
|
9991
9991
|
return;
|
|
9992
9992
|
const { id } = this;
|
|
9993
9993
|
if (!id)
|
|
@@ -10261,8 +10261,8 @@ class StreamSlotComponent {
|
|
|
10261
10261
|
});
|
|
10262
10262
|
return;
|
|
10263
10263
|
}
|
|
10264
|
-
warnMissingStreamingSlotCollector("StreamSlot");
|
|
10265
10264
|
if (typeof window === "undefined") {
|
|
10265
|
+
warnMissingStreamingSlotCollector("StreamSlot");
|
|
10266
10266
|
this.currentHtml.set(this.sanitizer.bypassSecurityTrustHtml(this.fallbackHtml));
|
|
10267
10267
|
return;
|
|
10268
10268
|
}
|
|
@@ -10357,5 +10357,5 @@ export {
|
|
|
10357
10357
|
withPendingTask
|
|
10358
10358
|
};
|
|
10359
10359
|
|
|
10360
|
-
//# debugId=
|
|
10360
|
+
//# debugId=51CF21EE181EB84C64756E2164756E21
|
|
10361
10361
|
//# sourceMappingURL=browser.js.map
|