@absolutejs/absolute 0.20.0-beta.123 → 0.20.0-beta.125
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 +16 -0
- package/changelog.json +30 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/build.js +32 -9
- package/dist/build.js.map +4 -4
- package/dist/index.js +32 -9
- package/dist/index.js.map +5 -5
- package/dist/types/websocket.d.ts +1 -0
- package/package.json +2 -2
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.125 — 2026-09-29
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **Vue pages that reach a helper through a re-export build again**
|
|
14
|
+
The Vue build copies every `.ts` helper a page reaches into its generated tree, but it found them with a regex that only matched `import … from`. A helper reached only through a re-export (`export { x } from './y'` or `export * from './y'`) was never copied, so the build failed with `Could not resolve: "./y"` and every page above it answered 500 in dev. Dependencies are now read with Bun's import scanner, which sees imports, dynamic imports and all three re-export forms; a regex that also covers re-exports is the fallback for source that does not parse.
|
|
15
|
+
|
|
16
|
+
## 0.20.0-beta.124 — 2026-09-28
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Projects on a current `@absolutejs/auth` no longer get a second, older copy**
|
|
21
|
+
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.
|
|
22
|
+
- **`/hmr-status` no longer counts closed or duplicate HMR clients** (`HMRWebSocket`)
|
|
23
|
+
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.
|
|
24
|
+
|
|
9
25
|
## 0.20.0-beta.123 — 2026-09-28
|
|
10
26
|
|
|
11
27
|
### Added
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "The Vue build copies every `.ts` helper a page reaches into its generated tree, but it found them with a regex that only matched `import … from`. A helper reached only through a re-export (`export { x } from './y'` or `export * from './y'`) was never copied, so the build failed with `Could not resolve: \"./y\"` and every page above it answered 500 in dev. Dependencies are now read with Bun's import scanner, which sees imports, dynamic imports and all three re-export forms; a regex that also covers re-exports is the fallback for source that does not parse.",
|
|
9
|
+
"kind": "fixed",
|
|
10
|
+
"summary": "Vue pages that reach a helper through a re-export build again"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"date": "2026-09-29",
|
|
14
|
+
"version": "0.20.0-beta.125"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"changes": [
|
|
18
|
+
{
|
|
19
|
+
"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.",
|
|
20
|
+
"kind": "fixed",
|
|
21
|
+
"summary": "Projects on a current `@absolutejs/auth` no longer get a second, older copy"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"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.",
|
|
25
|
+
"kind": "fixed",
|
|
26
|
+
"summary": "`/hmr-status` no longer counts closed or duplicate HMR clients",
|
|
27
|
+
"symbols": [
|
|
28
|
+
"HMRWebSocket"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"date": "2026-09-28",
|
|
33
|
+
"version": "0.20.0-beta.124"
|
|
34
|
+
},
|
|
5
35
|
{
|
|
6
36
|
"changes": [
|
|
7
37
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
var __require = import.meta.require;
|
|
3
3
|
|
|
4
|
-
// .angular-partial-tmp-
|
|
4
|
+
// .angular-partial-tmp-xJT9Ow/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-
|
|
4
|
+
// .angular-partial-tmp-xJT9Ow/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-
|
|
51
|
+
// .angular-partial-tmp-xJT9Ow/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
|
@@ -19439,10 +19439,14 @@ var resolveDevClientDir3 = () => {
|
|
|
19439
19439
|
return "template-only";
|
|
19440
19440
|
}
|
|
19441
19441
|
return "full";
|
|
19442
|
-
}, generateVueHmrId = (sourceFilePath, vueRootDir) => relative17(vueRootDir, sourceFilePath).replace(/\\/g, "/").replace(/\.vue$/, ""), extractImports = (sourceCode) => {
|
|
19443
|
-
|
|
19444
|
-
|
|
19445
|
-
|
|
19442
|
+
}, generateVueHmrId = (sourceFilePath, vueRootDir) => relative17(vueRootDir, sourceFilePath).replace(/\\/g, "/").replace(/\.vue$/, ""), importScanner, IMPORT_PATTERNS, matchImports = (sourceCode) => IMPORT_PATTERNS.flatMap((pattern) => Array.from(sourceCode.matchAll(pattern), (match) => match[1])).filter((importPath) => importPath !== undefined), extractImports = (sourceCode) => {
|
|
19443
|
+
let found;
|
|
19444
|
+
try {
|
|
19445
|
+
found = importScanner.scanImports(sourceCode).map(({ path }) => path);
|
|
19446
|
+
} catch {
|
|
19447
|
+
found = matchImports(sourceCode);
|
|
19448
|
+
}
|
|
19449
|
+
return Array.from(new Set(found));
|
|
19446
19450
|
}, resolveHelperTsPath = (sourceDir, helper) => {
|
|
19447
19451
|
if (helper.endsWith(".ts"))
|
|
19448
19452
|
return resolve28(sourceDir, helper);
|
|
@@ -20017,6 +20021,12 @@ var init_compileVue = __esm(() => {
|
|
|
20017
20021
|
persistentBuildCache = new Map;
|
|
20018
20022
|
vueSourceHashCache = new Map;
|
|
20019
20023
|
vueHmrMetadata = new Map;
|
|
20024
|
+
importScanner = new Bun.Transpiler({ loader: "ts" });
|
|
20025
|
+
IMPORT_PATTERNS = [
|
|
20026
|
+
/import\s+[\s\S]+?['"]([^'"]+)['"]/g,
|
|
20027
|
+
/\bimport\s*\(\s*['"]([^'"]+)['"]\s*\)/g,
|
|
20028
|
+
/\bexport\s+(?:type\s+)?(?:\*(?:\s+as\s+[\w$]+)?|\{[^}]*\})\s*from\s*['"]([^'"]+)['"]/g
|
|
20029
|
+
];
|
|
20020
20030
|
EXTERNAL_STYLE_DEPENDENCY = /@(?:import|use|forward)\b/;
|
|
20021
20031
|
fingerprintCache2 = new Map;
|
|
20022
20032
|
pendingWrites = new Set;
|
|
@@ -26803,6 +26813,15 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
|
|
|
26803
26813
|
const oldest = state.hmrUpdates.keys().next().value;
|
|
26804
26814
|
if (typeof oldest === "number")
|
|
26805
26815
|
state.hmrUpdates.delete(oldest);
|
|
26816
|
+
}, canonicalClients, canonicalClient = (client) => {
|
|
26817
|
+
const { raw } = client;
|
|
26818
|
+
if (!raw)
|
|
26819
|
+
return client;
|
|
26820
|
+
const known = canonicalClients.get(raw);
|
|
26821
|
+
if (known)
|
|
26822
|
+
return known;
|
|
26823
|
+
canonicalClients.set(raw, client);
|
|
26824
|
+
return client;
|
|
26806
26825
|
}, trySendMessage = (client, messageStr) => {
|
|
26807
26826
|
try {
|
|
26808
26827
|
client.send(messageStr);
|
|
@@ -26829,7 +26848,7 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
|
|
|
26829
26848
|
state.clientTargets.delete(client);
|
|
26830
26849
|
});
|
|
26831
26850
|
}, handleClientConnect = (state, client, manifest) => {
|
|
26832
|
-
state.connectedClients.add(client);
|
|
26851
|
+
state.connectedClients.add(canonicalClient(client));
|
|
26833
26852
|
const serverVersions = serializeModuleVersions(state.moduleVersions);
|
|
26834
26853
|
client.send(JSON.stringify({
|
|
26835
26854
|
data: {
|
|
@@ -26866,8 +26885,11 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
|
|
|
26866
26885
|
}));
|
|
26867
26886
|
}
|
|
26868
26887
|
}, handleClientDisconnect = (state, client) => {
|
|
26869
|
-
|
|
26870
|
-
state.
|
|
26888
|
+
const known = canonicalClient(client);
|
|
26889
|
+
state.connectedClients.delete(known);
|
|
26890
|
+
state.clientTargets.delete(known);
|
|
26891
|
+
if (client.raw)
|
|
26892
|
+
canonicalClients.delete(client.raw);
|
|
26871
26893
|
}, parseJsonSafe = (raw) => JSON.parse(raw), parseMessage = (message) => {
|
|
26872
26894
|
if (typeof message === "string") {
|
|
26873
26895
|
return parseJsonSafe(message);
|
|
@@ -26943,12 +26965,13 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
|
|
|
26943
26965
|
if (!isValidHMRClientMessage(parsedData)) {
|
|
26944
26966
|
return;
|
|
26945
26967
|
}
|
|
26946
|
-
handleParsedMessage(state, client, parsedData);
|
|
26968
|
+
handleParsedMessage(state, canonicalClient(client), parsedData);
|
|
26947
26969
|
} catch {}
|
|
26948
26970
|
};
|
|
26949
26971
|
var init_webSocket = __esm(() => {
|
|
26950
26972
|
init_telemetryEvent();
|
|
26951
26973
|
init_logger();
|
|
26974
|
+
canonicalClients = new WeakMap;
|
|
26952
26975
|
});
|
|
26953
26976
|
|
|
26954
26977
|
// src/utils/loadConfig.ts
|
|
@@ -38159,5 +38182,5 @@ export {
|
|
|
38159
38182
|
devBuild
|
|
38160
38183
|
};
|
|
38161
38184
|
|
|
38162
|
-
//# debugId=
|
|
38185
|
+
//# debugId=1A9F6B3E887493E464756E2164756E21
|
|
38163
38186
|
//# sourceMappingURL=build.js.map
|