@absolutejs/absolute 0.20.0-beta.161 → 0.20.0-beta.163

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,20 @@ 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.163 — 2026-11-02
10
+
11
+ ### Fixed
12
+
13
+ - **Stopping `absolute start` also stops the server it started**
14
+ Stopping an `absolute start` that had built (not `--prebuilt`) with SIGTERM left the server it spawned running and holding its port. The build directory lock handles SIGTERM by releasing its locks and exiting, and its handler is registered while the build runs, before `absolute start` installs the one that stops the server, so the process exited first. `absolute start` now also stops its server from an `exit` listener, which runs on any exit, `process.exit` included, as `absolute dev` already does for its child.
15
+
16
+ ## 0.20.0-beta.162 — 2026-11-02
17
+
18
+ ### Fixed
19
+
20
+ - **Apps share one copy of typebox, exact-mirror, the Elysia plugins and pwa with the framework** (`prepare`)
21
+ The framework pinned packages apps install themselves to exact versions: typebox 1.3.16, exact-mirror 1.2.6, @elysia/static, @elysia/openapi and @elysia/server-timing 2.0.0-rc.0, and @absolutejs/pwa 0.16.3. An app on any other version got a second copy nested under the framework, and for typebox that is a correctness hazard, not bloat: Elysia validates with the app's typebox, and a schema built by a different copy is foreign to it. renown could not move to typebox 1.4 for this reason (2026-11-01). They are now ranges within the same major (pwa within 0.16 and 0.17, whose 0.17.0 only adds asset-failure recovery), and the framework's own tests run on the newest of each: typebox 1.4.3, Elysia 2.0.0-rc.1, pwa 0.17.0.
22
+
9
23
  ## 0.20.0-beta.161 — 2026-11-01
10
24
 
11
25
  ### Changed
package/changelog.json CHANGED
@@ -2,6 +2,31 @@
2
2
  "contract": 1,
3
3
  "name": "@absolutejs/absolute",
4
4
  "releases": [
5
+ {
6
+ "changes": [
7
+ {
8
+ "detail": "Stopping an `absolute start` that had built (not `--prebuilt`) with SIGTERM left the server it spawned running and holding its port. The build directory lock handles SIGTERM by releasing its locks and exiting, and its handler is registered while the build runs, before `absolute start` installs the one that stops the server, so the process exited first. `absolute start` now also stops its server from an `exit` listener, which runs on any exit, `process.exit` included, as `absolute dev` already does for its child.",
9
+ "kind": "fixed",
10
+ "summary": "Stopping `absolute start` also stops the server it started"
11
+ }
12
+ ],
13
+ "date": "2026-11-02",
14
+ "version": "0.20.0-beta.163"
15
+ },
16
+ {
17
+ "changes": [
18
+ {
19
+ "detail": "The framework pinned packages apps install themselves to exact versions: typebox 1.3.16, exact-mirror 1.2.6, @elysia/static, @elysia/openapi and @elysia/server-timing 2.0.0-rc.0, and @absolutejs/pwa 0.16.3. An app on any other version got a second copy nested under the framework, and for typebox that is a correctness hazard, not bloat: Elysia validates with the app's typebox, and a schema built by a different copy is foreign to it. renown could not move to typebox 1.4 for this reason (2026-11-01). They are now ranges within the same major (pwa within 0.16 and 0.17, whose 0.17.0 only adds asset-failure recovery), and the framework's own tests run on the newest of each: typebox 1.4.3, Elysia 2.0.0-rc.1, pwa 0.17.0.",
20
+ "kind": "fixed",
21
+ "summary": "Apps share one copy of typebox, exact-mirror, the Elysia plugins and pwa with the framework",
22
+ "symbols": [
23
+ "prepare"
24
+ ]
25
+ }
26
+ ],
27
+ "date": "2026-11-02",
28
+ "version": "0.20.0-beta.162"
29
+ },
5
30
  {
6
31
  "changes": [
7
32
  {
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- // .angular-partial-tmp-N4zmYS/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-IZlOYE/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-N4zmYS/src/core/streamingSlotRegistrar.ts
2
+ // .angular-partial-tmp-IZlOYE/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-N4zmYS/src/core/streamingSlotRegistry.ts
49
+ // .angular-partial-tmp-IZlOYE/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";
@@ -282,6 +282,11 @@ var runPreparedServer = async ({
282
282
  };
283
283
  process.on("SIGINT", () => cleanup(0));
284
284
  process.on("SIGTERM", () => cleanup(0));
285
+ process.on("exit", () => {
286
+ try {
287
+ serverProcess.kill();
288
+ } catch {}
289
+ });
285
290
  const exitCode = await serverProcess.exited;
286
291
  if (cleaning)
287
292
  return;
package/dist/cli/index.js CHANGED
@@ -70,7 +70,7 @@ if (command === "dev") {
70
70
  const configPath = parseNamedArg("--config");
71
71
  const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
72
72
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
73
- const { start } = await import("./start-0bx1rkx4.js");
73
+ const { start } = await import("./start-0ebxkwga.js");
74
74
  await start(serverEntry, outdir, configPath, {
75
75
  prebuilt: args.includes("--prebuilt")
76
76
  });
@@ -80,7 +80,7 @@ if (command === "dev") {
80
80
  const configPath = parseNamedArg("--config");
81
81
  const positionalArgs = stripNamedArgs("--outdir", "--config");
82
82
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
83
- const { start } = await import("./start-0bx1rkx4.js");
83
+ const { start } = await import("./start-0ebxkwga.js");
84
84
  await start(serverEntry, outdir, configPath, { prepareOnly: true });
85
85
  } else if (command === "build") {
86
86
  sendTelemetryEvent("cli:command", { command });
@@ -211,7 +211,7 @@ if (command === "dev") {
211
211
  sendTelemetryEvent("cli:command", {
212
212
  command: `mobile:${workspaceCommand ?? "unknown"}`
213
213
  });
214
- const { runMobile } = await import("./mobile-2f54v4by.js");
214
+ const { runMobile } = await import("./mobile-41sev6v0.js");
215
215
  try {
216
216
  await runMobile(args);
217
217
  } catch (error) {
@@ -79,7 +79,7 @@ import {
79
79
  import"./index-e6ysp900.js";
80
80
  import {
81
81
  start2
82
- } from "./index-f82hvr9c.js";
82
+ } from "./index-vkba3289.js";
83
83
  import {
84
84
  captureAbsoluteRemoteMacCommand2,
85
85
  getAbsoluteRemoteMacProfile2,
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  start2
4
- } from "./index-f82hvr9c.js";
4
+ } from "./index-vkba3289.js";
5
5
  import"./index-j7m8pq48.js";
6
6
  import"./index-e6ysp900.js";
7
7
  import"./index-71gchbzt.js";
@@ -8,4 +8,4 @@ import type { AnyElysia } from 'elysia';
8
8
  * and read that as down (absolutejs#76). An app's own `.head()` route still
9
9
  * wins over this fallback.
10
10
  */
11
- export declare const headFallback: <A extends AnyElysia>(app: A) => import("elysia/types").AddRoute<any, any, any, any, any, any, any, any, "head", "/*", import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<{}, any, `${any}/*`>, import("elysia/types").MergeScopedSchemas<any, any, any>>, {}, import("elysia/types").InlineHandlerNonMacro<NoInfer<import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<{}, any, `${any}/*`>, import("elysia/types").MergeScopedSchemas<any, any, any>>>, any>>;
11
+ export declare const headFallback: <A extends AnyElysia>(app: A) => import("elysia/types").AddRoute<any, any, any, any, any, any, any, any, "head", "/*", import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<{}, any, `${string}/*` | `${any}/*`>, import("elysia/types").MergeScopedSchemas<any, any, any>>, {}, import("elysia/types").InlineHandlerNonMacro<NoInfer<import("elysia/types").IntersectIfObjectSchema<import("elysia").UnwrapRoute<{}, any, `${string}/*` | `${any}/*`>, import("elysia/types").MergeScopedSchemas<any, any, any>>>, any>>;
@@ -16,7 +16,9 @@ export declare const hmr: (hmrState: HMRState, manifest: Record<string, string>,
16
16
  } & {};
17
17
  query: unknown;
18
18
  headers: unknown;
19
- response: {};
19
+ response: {
20
+ 200: Response | undefined;
21
+ };
20
22
  error: never;
21
23
  };
22
24
  };
@@ -31,7 +33,9 @@ export declare const hmr: (hmrState: HMRState, manifest: Record<string, string>,
31
33
  } & {};
32
34
  query: unknown;
33
35
  headers: unknown;
34
- response: {};
36
+ response: {
37
+ 200: Response | undefined;
38
+ };
35
39
  error: never;
36
40
  };
37
41
  };
@@ -46,7 +50,9 @@ export declare const hmr: (hmrState: HMRState, manifest: Record<string, string>,
46
50
  } & {};
47
51
  query: unknown;
48
52
  headers: unknown;
49
- response: {};
53
+ response: {
54
+ 200: Response | undefined;
55
+ };
50
56
  error: never;
51
57
  };
52
58
  };
package/package.json CHANGED
@@ -14,19 +14,19 @@
14
14
  "@absolutejs/devices": "0.7.1",
15
15
  "@absolutejs/devices-capacitor": "0.8.1",
16
16
  "@absolutejs/http": "0.0.1",
17
- "@absolutejs/pwa": "0.16.3",
17
+ "@absolutejs/pwa": ">=0.16.3 <0.18.0",
18
18
  "@capacitor/browser": "8.0.4",
19
19
  "@capacitor/filesystem": "8.1.3",
20
20
  "@capacitor/keyboard": "8.0.5",
21
21
  "@capacitor/network": "8.0.1",
22
22
  "@capacitor/preferences": "8.0.1",
23
- "@elysia/openapi": "2.0.0-rc.0",
24
- "@elysia/server-timing": "2.0.0-rc.0",
25
- "@elysia/static": "2.0.0-rc.0",
23
+ "@elysia/openapi": "^2.0.0-rc.0",
24
+ "@elysia/server-timing": "^2.0.0-rc.0",
25
+ "@elysia/static": "^2.0.0-rc.0",
26
26
  "@tailwindcss/oxide": "^4.1.0",
27
- "exact-mirror": "1.2.6",
27
+ "exact-mirror": ">=1.2.6 <2.0.0",
28
28
  "jiti": "2.6.1",
29
- "typebox": "1.3.16",
29
+ "typebox": ">=1.3.16 <2.0.0",
30
30
  "web-vitals": "6.0.0",
31
31
  "zustand": "^5.0.12"
32
32
  },
@@ -91,7 +91,7 @@
91
91
  "autoprefixer": "10.4.21",
92
92
  "bun-types": "1.4.2",
93
93
  "content-tag": "^4.1.1",
94
- "elysia": "2.0.0-rc.0",
94
+ "elysia": "2.0.0-rc.1",
95
95
  "ember-source": "^6.12.0",
96
96
  "eslint": "10.0.3",
97
97
  "eslint-plugin-absolute": "0.11.16",
@@ -315,9 +315,7 @@
315
315
  "overrides": {
316
316
  "@sinclair/typebox": "0.34.52",
317
317
  "@typescript-eslint/utils": "8.56.1",
318
- "elysia": "2.0.0-rc.0",
319
- "exact-mirror": "1.2.6",
320
- "typebox": "1.3.16"
318
+ "elysia": "2.0.0-rc.1"
321
319
  },
322
320
  "peerDependencies": {
323
321
  "@absolutejs/devices-expo": "0.0.12",
@@ -563,7 +561,7 @@
563
561
  ]
564
562
  }
565
563
  },
566
- "version": "0.20.0-beta.161",
564
+ "version": "0.20.0-beta.163",
567
565
  "workspaces": [
568
566
  "tests/fixtures/*",
569
567
  "tests/fixtures/_packages/*"