@absolutejs/absolute 0.20.0-beta.123 → 0.20.0-beta.124

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,15 @@ 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.124 — 2026-09-28
10
+
11
+ ### Fixed
12
+
13
+ - **Projects on a current `@absolutejs/auth` no longer get a second, older copy**
14
+ AbsoluteJS accepted `@absolutejs/auth` only below 0.77, so a project that added a current auth (0.77 to 0.96) got two copies: its own, plus 0.76.3 nested under AbsoluteJS for the mobile shell. The duplicate also doubled the auth type declarations TypeScript loads. AbsoluteJS now accepts auth up to 0.96. The `@absolutejs/auth/client/mobile` API it uses is byte-identical from 0.76.3 to 0.96.0, in both its declarations and its runtime.
15
+ - **`/hmr-status` no longer counts closed or duplicate HMR clients** (`HMRWebSocket`)
16
+ Elysia 2 hands every open, message and close event of a WebSocket a new wrapper object. The dev server tracked HMR clients by that wrapper, so a closed browser tab was never removed (it stayed until a broadcast send threw) and each `ready` message counted the same tab again under `connectedTargets`, so `/hmr-status` reported clients that were gone and more web targets than open sockets. Clients are now tracked by the underlying socket.
17
+
9
18
  ## 0.20.0-beta.123 — 2026-09-28
10
19
 
11
20
  ### Added
package/changelog.json CHANGED
@@ -2,6 +2,25 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "detail": "AbsoluteJS accepted `@absolutejs/auth` only below 0.77, so a project that added a current auth (0.77 to 0.96) got two copies: its own, plus 0.76.3 nested under AbsoluteJS for the mobile shell. The duplicate also doubled the auth type declarations TypeScript loads. AbsoluteJS now accepts auth up to 0.96. The `@absolutejs/auth/client/mobile` API it uses is byte-identical from 0.76.3 to 0.96.0, in both its declarations and its runtime.",
9
+ "kind": "fixed",
10
+ "summary": "Projects on a current `@absolutejs/auth` no longer get a second, older copy"
11
+ },
12
+ {
13
+ "detail": "Elysia 2 hands every open, message and close event of a WebSocket a new wrapper object. The dev server tracked HMR clients by that wrapper, so a closed browser tab was never removed (it stayed until a broadcast send threw) and each `ready` message counted the same tab again under `connectedTargets`, so `/hmr-status` reported clients that were gone and more web targets than open sockets. Clients are now tracked by the underlying socket.",
14
+ "kind": "fixed",
15
+ "summary": "`/hmr-status` no longer counts closed or duplicate HMR clients",
16
+ "symbols": [
17
+ "HMRWebSocket"
18
+ ]
19
+ }
20
+ ],
21
+ "date": "2026-09-28",
22
+ "version": "0.20.0-beta.124"
23
+ },
5
24
  {
6
25
  "changes": [
7
26
  {
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-TZvQHy/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-VA5kAM/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  var __require = import.meta.require;
3
3
 
4
- // .angular-partial-tmp-TZvQHy/src/core/streamingSlotRegistrar.ts
4
+ // .angular-partial-tmp-VA5kAM/src/core/streamingSlotRegistrar.ts
5
5
  var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
6
6
  var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
7
7
  var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
@@ -48,7 +48,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
48
48
  getWarningController()?.maybeWarn(primitiveName);
49
49
  };
50
50
 
51
- // .angular-partial-tmp-TZvQHy/src/core/streamingSlotRegistry.ts
51
+ // .angular-partial-tmp-VA5kAM/src/core/streamingSlotRegistry.ts
52
52
  var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
53
53
  var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
54
54
  var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
package/dist/build.js CHANGED
@@ -26803,6 +26803,15 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
26803
26803
  const oldest = state.hmrUpdates.keys().next().value;
26804
26804
  if (typeof oldest === "number")
26805
26805
  state.hmrUpdates.delete(oldest);
26806
+ }, canonicalClients, canonicalClient = (client) => {
26807
+ const { raw } = client;
26808
+ if (!raw)
26809
+ return client;
26810
+ const known = canonicalClients.get(raw);
26811
+ if (known)
26812
+ return known;
26813
+ canonicalClients.set(raw, client);
26814
+ return client;
26806
26815
  }, trySendMessage = (client, messageStr) => {
26807
26816
  try {
26808
26817
  client.send(messageStr);
@@ -26829,7 +26838,7 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
26829
26838
  state.clientTargets.delete(client);
26830
26839
  });
26831
26840
  }, handleClientConnect = (state, client, manifest) => {
26832
- state.connectedClients.add(client);
26841
+ state.connectedClients.add(canonicalClient(client));
26833
26842
  const serverVersions = serializeModuleVersions(state.moduleVersions);
26834
26843
  client.send(JSON.stringify({
26835
26844
  data: {
@@ -26866,8 +26875,11 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
26866
26875
  }));
26867
26876
  }
26868
26877
  }, handleClientDisconnect = (state, client) => {
26869
- state.connectedClients.delete(client);
26870
- state.clientTargets.delete(client);
26878
+ const known = canonicalClient(client);
26879
+ state.connectedClients.delete(known);
26880
+ state.clientTargets.delete(known);
26881
+ if (client.raw)
26882
+ canonicalClients.delete(client.raw);
26871
26883
  }, parseJsonSafe = (raw) => JSON.parse(raw), parseMessage = (message) => {
26872
26884
  if (typeof message === "string") {
26873
26885
  return parseJsonSafe(message);
@@ -26943,12 +26955,13 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
26943
26955
  if (!isValidHMRClientMessage(parsedData)) {
26944
26956
  return;
26945
26957
  }
26946
- handleParsedMessage(state, client, parsedData);
26958
+ handleParsedMessage(state, canonicalClient(client), parsedData);
26947
26959
  } catch {}
26948
26960
  };
26949
26961
  var init_webSocket = __esm(() => {
26950
26962
  init_telemetryEvent();
26951
26963
  init_logger();
26964
+ canonicalClients = new WeakMap;
26952
26965
  });
26953
26966
 
26954
26967
  // src/utils/loadConfig.ts
@@ -38159,5 +38172,5 @@ export {
38159
38172
  devBuild
38160
38173
  };
38161
38174
 
38162
- //# debugId=71208AEC5F61453764756E2164756E21
38175
+ //# debugId=CE51F4C6C3DEBBDF64756E2164756E21
38163
38176
  //# sourceMappingURL=build.js.map