@absolutejs/absolute 0.20.0-beta.175 → 0.20.0-beta.177

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,22 @@ 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.177 — 2026-11-14
10
+
11
+ ### Fixed
12
+
13
+ - **A hot swap keeps shared resources open wherever `.use(networking)` sits in the app chain**
14
+ beta.176 kept an unchanged app's `onStop` from running on a hot swap, but only when `networking` was the last thing chained onto the app. `networking` swaps apps while the statement that builds the app is still running, so in `app.use(networking).onStop(shutdown)` the new app did not have its `onStop` yet when the hooks were compared. The swap decided the hooks had changed and shut the replaced app down, closing the database pool, audit log and queues the new app keeps. The swap now waits for that statement to finish before comparing, so the order of `.use(networking)` and the app's lifecycle hooks no longer matters.
15
+
16
+ ## 0.20.0-beta.176 — 2026-11-14
17
+
18
+ ### Fixed
19
+
20
+ - **Deleting a server module no longer reports a failed hot update**
21
+ Deleting a server module logged "failed to update; the previous version keeps serving" with an ENOENT error, though nothing failed: there is nothing to apply, and the modules that imported it change through their own edits. A deleted module is now an unchanged outcome and logs nothing. Recreating it still applies as an edit.
22
+ - **A hot swap no longer runs the app's shutdown hooks against resources the new app still uses**
23
+ Editing server code that rebuilds the app used to run the replaced app's `onStop` hooks on every hot swap. An `onStop` is usually the app's shutdown: it closes the database pool, the audit log and the queues, which unchanged top-level statements created and the new app keeps. After the swap the new app held closed resources, so routes that used them failed until the dev server was restarted. Lifecycle hooks are now treated like statements: when the new app's `onStart`/`onStop` hooks are the same code as the replaced app's, their effect carries across the swap and neither runs. Editing a hook still stops the old app and starts the new one, once each.
24
+
9
25
  ## 0.20.0-beta.175 — 2026-11-14
10
26
 
11
27
  ### Fixed
package/changelog.json CHANGED
@@ -2,6 +2,33 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "detail": "beta.176 kept an unchanged app's `onStop` from running on a hot swap, but only when `networking` was the last thing chained onto the app. `networking` swaps apps while the statement that builds the app is still running, so in `app.use(networking).onStop(shutdown)` the new app did not have its `onStop` yet when the hooks were compared. The swap decided the hooks had changed and shut the replaced app down, closing the database pool, audit log and queues the new app keeps. The swap now waits for that statement to finish before comparing, so the order of `.use(networking)` and the app's lifecycle hooks no longer matters.",
9
+ "kind": "fixed",
10
+ "summary": "A hot swap keeps shared resources open wherever `.use(networking)` sits in the app chain"
11
+ }
12
+ ],
13
+ "date": "2026-11-14",
14
+ "version": "0.20.0-beta.177"
15
+ },
16
+ {
17
+ "changes": [
18
+ {
19
+ "detail": "Deleting a server module logged \"failed to update; the previous version keeps serving\" with an ENOENT error, though nothing failed: there is nothing to apply, and the modules that imported it change through their own edits. A deleted module is now an unchanged outcome and logs nothing. Recreating it still applies as an edit.",
20
+ "kind": "fixed",
21
+ "summary": "Deleting a server module no longer reports a failed hot update"
22
+ },
23
+ {
24
+ "detail": "Editing server code that rebuilds the app used to run the replaced app's `onStop` hooks on every hot swap. An `onStop` is usually the app's shutdown: it closes the database pool, the audit log and the queues, which unchanged top-level statements created and the new app keeps. After the swap the new app held closed resources, so routes that used them failed until the dev server was restarted. Lifecycle hooks are now treated like statements: when the new app's `onStart`/`onStop` hooks are the same code as the replaced app's, their effect carries across the swap and neither runs. Editing a hook still stops the old app and starts the new one, once each.",
25
+ "kind": "fixed",
26
+ "summary": "A hot swap no longer runs the app's shutdown hooks against resources the new app still uses"
27
+ }
28
+ ],
29
+ "date": "2026-11-14",
30
+ "version": "0.20.0-beta.176"
31
+ },
5
32
  {
6
33
  "changes": [
7
34
  {
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-0UabK1/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-DPRYTw/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-0UabK1/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-DPRYTw/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-0UabK1/src/core/streamingSlotRegistry.ts
49
+ // .angular-partial-tmp-DPRYTw/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";
package/dist/build.js CHANGED
@@ -38031,7 +38031,7 @@ var MAX_PROPAGATION_STEPS = 500, realPath4 = (path) => {
38031
38031
  if (typeof namespace !== "object" || namespace === null)
38032
38032
  throw new Error(`${path} did not evaluate to a module`);
38033
38033
  return Object.fromEntries(Object.entries(namespace));
38034
- }, display = (path) => relative34(process.cwd(), path) || path, SLOW_UPDATE_MS = 500, SLOWEST_SHOWN = 3, statementLabel = (id) => {
38034
+ }, isMissingFile3 = (error) => error instanceof Error && ("code" in error) && error.code === "ENOENT", display = (path) => relative34(process.cwd(), path) || path, SLOW_UPDATE_MS = 500, SLOWEST_SHOWN = 3, statementLabel = (id) => {
38035
38035
  const name = id.slice(id.indexOf(":") + 1);
38036
38036
  return /^\d+$/.test(name) ? `statement #${name}` : name;
38037
38037
  }, slowestStatements = (modules) => modules.flatMap((module) => [...moduleRecord(module)?.lastTimings ?? []].map(([id, duration]) => ({
@@ -38074,6 +38074,8 @@ var MAX_PROPAGATION_STEPS = 500, realPath4 = (path) => {
38074
38074
  try {
38075
38075
  source = readFileSync56(path, "utf-8");
38076
38076
  } catch (error) {
38077
+ if (isMissingFile3(error))
38078
+ return { status: "unchanged" };
38077
38079
  reportFailure(path, error);
38078
38080
  return { error, status: "failed" };
38079
38081
  }
@@ -42094,5 +42096,5 @@ export {
42094
42096
  devBuild
42095
42097
  };
42096
42098
 
42097
- //# debugId=70F4989EE77A073A64756E2164756E21
42099
+ //# debugId=2C9457EC4704C29664756E2164756E21
42098
42100
  //# sourceMappingURL=build.js.map