@absolutejs/absolute 0.20.0-beta.65 → 0.20.0-beta.67

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.
Files changed (38) hide show
  1. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  2. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  3. package/dist/build.js +768 -544
  4. package/dist/build.js.map +10 -8
  5. package/dist/cli/index.js +148 -5
  6. package/dist/dev/serverBootstrap.js +544 -6
  7. package/dist/index.js +905 -619
  8. package/dist/index.js.map +14 -11
  9. package/dist/mobile/index.js +5430 -5
  10. package/dist/mobile/index.js.map +11 -8
  11. package/dist/mobile/mobilePreviewClient.ts +246 -0
  12. package/dist/mobile/remoteMacAgentEntry.js +241 -180
  13. package/dist/mobile/shellAuth.js +16 -0
  14. package/dist/mobile/shellBootstrap.js +5427 -117
  15. package/dist/mobile/shellExpoAuth.js +16 -0
  16. package/dist/mobile/shellExpoDevices.js +16 -0
  17. package/dist/mobile/shellExpoSync.js +16 -0
  18. package/dist/mobile/shellSync.js +16 -0
  19. package/dist/mobile/shellUpdate.js +16 -0
  20. package/dist/mobile/uiPrimitives.js +16 -0
  21. package/dist/src/build/chainInlineSourcemaps.d.ts +2 -0
  22. package/dist/src/build/vueCompileCache.d.ts +43 -0
  23. package/dist/src/cli/config/server.d.ts +1 -1
  24. package/dist/src/dev/bootLifecycle.d.ts +11 -0
  25. package/dist/src/dev/earlyListener.d.ts +41 -0
  26. package/dist/src/mobile/capacitorBundle.d.ts +8 -1
  27. package/dist/src/mobile/config.d.ts +6 -0
  28. package/dist/src/mobile/index.d.ts +1 -0
  29. package/dist/src/mobile/mobileInspect.d.ts +14 -0
  30. package/dist/src/mobile/mobilePreview.d.ts +1 -1
  31. package/dist/src/mobile/shellBootstrap.d.ts +2 -0
  32. package/dist/src/mobile/shellObservability.d.ts +11 -0
  33. package/dist/src/mobile/transport.d.ts +6 -0
  34. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  35. package/dist/src/utils/startupTimings.d.ts +4 -0
  36. package/dist/types/build.d.ts +12 -0
  37. package/dist/types/globals.d.ts +15 -0
  38. package/package.json +9 -7
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/shellExpoDevices.ts
2
18
  import { installExpoWebViewDeviceAdapter } from "@absolutejs/devices-expo/bridge";
3
19
  var bridge = () => {
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/shellExpoDevices.ts
2
18
  import { installExpoWebViewDeviceAdapter } from "@absolutejs/devices-expo/bridge";
3
19
  var bridge = () => {
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/shellExpoSync.ts
2
18
  import {
3
19
  createExpoSyncBridgeLocalStore,
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/shellSync.ts
2
18
  import { lifecycle, network } from "@absolutejs/devices";
3
19
  import {
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/shellUpdate.ts
2
18
  import { Directory, Filesystem } from "@capacitor/filesystem";
3
19
  import { Preferences } from "@capacitor/preferences";
@@ -1,3 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __returnValue = (v) => v;
3
+ function __exportSetter(name, newValue) {
4
+ this[name] = __returnValue.bind(null, newValue);
5
+ }
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true,
11
+ configurable: true,
12
+ set: __exportSetter.bind(all, name)
13
+ });
14
+ };
15
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
16
+
1
17
  // src/mobile/uiPrimitives.ts
2
18
  var STYLE_ID = "absolute-mobile-ui-primitives";
3
19
  var NAVIGATION_EVENT = "absolute:navigation-change";
@@ -10,5 +10,7 @@ export declare const inlineLineMapComment: (sourcePath: string, sourceContent: s
10
10
  export declare const remapGeneratedLines: (mappings: string, lineRemap: number[]) => string;
11
11
  export declare const chainSourcemap: (outer: SourceMap, fetchInner: (sourcePath: string) => SourceMap | null) => SourceMap;
12
12
  export declare const chainBundleInlineSourcemap: (bundleFilePath: string) => void;
13
+ /** Chain every server bundle of a dev build (each bundle is independent). */
14
+ export declare const chainBundleInlineSourcemaps: (bundlePaths: string[]) => Promise<void>;
13
15
  export declare const chainExternalSourcemap: (mapFilePath: string) => void;
14
16
  export {};
@@ -0,0 +1,43 @@
1
+ import type { ParsedVueSpaRoute } from './parseVueSpaRoutes';
2
+ export type VueCompileCacheResult = {
3
+ clientPath: string;
4
+ serverPath: string;
5
+ cssPaths: string[];
6
+ cssCodes: string[];
7
+ tsHelperPaths: string[];
8
+ hmrId: string;
9
+ spaRoutes?: ParsedVueSpaRoute[];
10
+ };
11
+ export type VueCompileCacheEntry = {
12
+ key: string;
13
+ clientCode: string;
14
+ serverCode: string;
15
+ result: VueCompileCacheResult;
16
+ /** Absolute path → content hash of every file `compileScript` read
17
+ * while resolving imported types. Re-verified on read. */
18
+ typeDeps: Record<string, string>;
19
+ };
20
+ export declare const vueCompileCacheEnabled: () => boolean;
21
+ export declare const hashContent: (content: string) => string;
22
+ export declare const hashParts: (parts: readonly string[]) => string;
23
+ export declare const frameworkVersionForCache: () => string | null;
24
+ export declare const vueCompileCacheDir: (projectRoot?: string) => string;
25
+ /** Build the environment part of every key: anything that changes the
26
+ * compiler's output without changing the component's own source. */
27
+ export declare const vueCompileCacheFingerprint: (parts: {
28
+ compilerVersion: string | undefined;
29
+ stylePreprocessors: unknown;
30
+ vueRootDir: string;
31
+ outputDirs: {
32
+ client: string;
33
+ server: string;
34
+ css: string;
35
+ };
36
+ }) => string | null;
37
+ /** Read a cached compile for `sourceFilePath` if its key matches and every
38
+ * recorded type dependency is unchanged. Any I/O or shape problem is a
39
+ * miss — the cache can only ever make a build faster, never wrong. */
40
+ export declare const readVueCompileCacheEntry: (sourceFilePath: string, key: string, projectRoot?: string) => VueCompileCacheEntry | null;
41
+ /** Persist a compile. Written via a temp file + rename so a crash mid-write
42
+ * can never leave a torn entry for the next process to trust. */
43
+ export declare const writeVueCompileCacheEntry: (sourceFilePath: string, entry: VueCompileCacheEntry, projectRoot?: string) => void;
@@ -391,7 +391,7 @@ export declare const launchConfig: (args: string[], cwd?: string) => Promise<imp
391
391
  status?: number | keyof import("elysia").StatusMap;
392
392
  cookie?: Record<string, import("elysia").BaseCookie>;
393
393
  };
394
- status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
394
+ status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 503 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
395
395
  readonly 100: "Continue";
396
396
  readonly 101: "Switching Protocols";
397
397
  readonly 102: "Processing";
@@ -0,0 +1,11 @@
1
+ /** Record which boot step is currently running so the early listener's
2
+ * "Building…" page can show it. Cheap enough to call from every step. */
3
+ export declare const getBootPhase: () => string | undefined;
4
+ export declare const setBootPhase: (phase: string) => void;
5
+ type DeferredBootTask = () => void | Promise<void>;
6
+ /** Run every task queued by `deferUntilServing`. Called by the
7
+ * `networking` plugin once the real server is bound, so the work runs
8
+ * after the port is serving real traffic instead of delaying it. */
9
+ export declare const deferUntilServing: (task: DeferredBootTask) => void;
10
+ export declare const runDeferredBootTasks: () => void;
11
+ export {};
@@ -0,0 +1,41 @@
1
+ import type { Server } from 'bun';
2
+ export declare const BOOT_STATUS_HEADER = "X-Absolute-Boot";
3
+ export type EarlyListenerOptions = {
4
+ host: string;
5
+ port: number;
6
+ tls?: {
7
+ cert: string;
8
+ key: string;
9
+ } | null;
10
+ };
11
+ export type EarlyListener = {
12
+ /** The placeholder server, or null while a bind retry is pending or
13
+ * after release. */
14
+ readonly server: Server<undefined> | null;
15
+ readonly startedAt: number;
16
+ readonly released: boolean;
17
+ release: () => void;
18
+ };
19
+ export declare const bootStatusSnapshot: (startedAt: number) => {
20
+ elapsedMs: number;
21
+ elapsedSeconds: number;
22
+ phase: string;
23
+ status: "building";
24
+ };
25
+ /** 503 response for one request while the boot build is still running.
26
+ * HTML for browsers (`Accept: text/html`), JSON for JSON clients, plain
27
+ * text otherwise; WebSocket upgrade attempts (the HMR client) get a plain
28
+ * 503 instead of an upgrade so they fail the handshake cleanly and fall
29
+ * back to their `/hmr-status` polling loop. */
30
+ export declare const buildingResponse: (request: Request, startedAt: number) => Response;
31
+ /** Defensive hand-off for entries that call `.listen()` without the
32
+ * `networking` plugin: any `Bun.serve` that targets the placeholder's
33
+ * port first releases it. Installed once per process by the bootstrap. */
34
+ export declare const installEarlyListenerServeGuard: (port: number) => void;
35
+ export declare const releaseEarlyListener: () => boolean;
36
+ /** Bind the placeholder. A failed bind (the previous child's socket is
37
+ * still draining, or the port genuinely conflicts) is retried in the
38
+ * background for a few seconds and then given up on silently — the real
39
+ * `.listen()` still reports the conflict the way it always did. Never
40
+ * throws: the placeholder is a nicety and must not break boot. */
41
+ export declare const startEarlyListener: (options: EarlyListenerOptions) => EarlyListener;
@@ -1,5 +1,5 @@
1
1
  import type { NormalizedAbsoluteMobileConfig } from './config';
2
- import type { AbsoluteMobileCompatibilityArtifact } from './releaseArtifact';
2
+ import type { AbsoluteMobileCompatibilityArtifact, AbsoluteMobileCompatibilityPage } from './releaseArtifact';
3
3
  import type { AbsoluteMobileAuthManifest } from './nativeAuth';
4
4
  import type { SyncLocalStoreSchemaBundle } from '@absolutejs/sync/client';
5
5
  import type { AbsoluteDeviceCapabilityPlan } from './deviceCapabilities';
@@ -14,6 +14,7 @@ export type AbsoluteCapacitorBundleOptions = {
14
14
  sync?: boolean;
15
15
  syncSchema?: SyncLocalStoreSchemaBundle;
16
16
  };
17
+ export declare const materializeAbsoluteMobileSourcemaps: (pages: readonly AbsoluteMobileCompatibilityPage[], appBuild: string, projectRoot: string) => Promise<number>;
17
18
  export declare const materializeAbsoluteCapacitorWebBundle: (options: AbsoluteCapacitorBundleOptions) => Promise<{
18
19
  sync?: {
19
20
  background: {
@@ -35,6 +36,12 @@ export declare const materializeAbsoluteCapacitorWebBundle: (options: AbsoluteCa
35
36
  keyId: string;
36
37
  };
37
38
  } | undefined;
39
+ observability?: {
40
+ endpoint: string;
41
+ environment?: string;
42
+ project: string;
43
+ sampleRate: number;
44
+ } | undefined;
38
45
  appId: string;
39
46
  appName: string;
40
47
  deepLinkHosts: string[];
@@ -13,6 +13,12 @@ export type NormalizedAbsoluteMobileConfig = {
13
13
  expoSdkVersion?: 57;
14
14
  iosVersion?: string;
15
15
  nativeProjectDirectory: string;
16
+ observability?: {
17
+ endpoint: string;
18
+ environment?: string;
19
+ project: string;
20
+ sampleRate: number;
21
+ };
16
22
  platforms: MobilePlatform[];
17
23
  productionOrigin: string;
18
24
  pushAndroidGoogleServicesFile: string;
@@ -41,6 +41,7 @@ export * from './releasePublisher';
41
41
  export * from './routeMetadataTransform';
42
42
  export * from './routeMatcher';
43
43
  export * from './shellHttp';
44
+ export * from './shellObservability';
44
45
  export * from './transport';
45
46
  export * from './uiPrimitives';
46
47
  export * from './updateClient';
@@ -27,6 +27,13 @@ export type AbsoluteMobileProjectInspection = {
27
27
  nativeProjectDirectory: string;
28
28
  platforms: string[];
29
29
  productionOrigin: string;
30
+ observability?: {
31
+ enabled: true;
32
+ endpoint: string;
33
+ environment?: string;
34
+ project: string;
35
+ sampleRate: number;
36
+ };
30
37
  };
31
38
  format: typeof ABSOLUTE_MOBILE_INSPECTION_FORMAT;
32
39
  nativeProjects: Array<{
@@ -104,6 +111,13 @@ export declare const inspectAbsoluteMobileProject: (config: NormalizedAbsoluteMo
104
111
  current: string[];
105
112
  };
106
113
  config: {
114
+ observability?: {
115
+ enabled: true;
116
+ endpoint: string;
117
+ environment: string | undefined;
118
+ project: string;
119
+ sampleRate: number;
120
+ } | undefined;
107
121
  appId: string;
108
122
  appName: string;
109
123
  bundleDirectory: string;
@@ -36,7 +36,7 @@ export declare const createAbsoluteMobilePreviewPlugin: (mobile: MobileConfig |
36
36
  status?: number | keyof import("elysia").StatusMap;
37
37
  cookie?: Record<string, import("elysia").BaseCookie>;
38
38
  };
39
- status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
39
+ status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 503 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
40
40
  readonly 100: "Continue";
41
41
  readonly 101: "Switching Protocols";
42
42
  readonly 102: "Processing";
@@ -1,4 +1,5 @@
1
1
  import { type AbsoluteMobileFetch, type AbsoluteMobileClientManifest } from './transport';
2
+ import { type AbsoluteMobileObservabilityEngine } from './shellObservability';
2
3
  export type AbsoluteMobileShellAuthRuntime = {
3
4
  clientId: string;
4
5
  fetch: AbsoluteMobileFetch;
@@ -12,6 +13,7 @@ export type AbsoluteMobileShellPrincipal = {
12
13
  namespace: string;
13
14
  };
14
15
  export type AbsoluteMobileShellOptions = {
16
+ engine?: AbsoluteMobileObservabilityEngine;
15
17
  createFetch?: (manifest: AbsoluteMobileClientManifest) => AbsoluteMobileFetch;
16
18
  createAuth?: (config: NonNullable<AbsoluteMobileClientManifest['auth']>, options?: {
17
19
  beforeSignOut?: () => Promise<void> | void;
@@ -0,0 +1,11 @@
1
+ import { type Beacon } from '@absolutejs/beacon';
2
+ import type { AbsoluteMobileClientManifest, AbsoluteMobileFetch } from './transport';
3
+ export type AbsoluteMobileObservabilityEngine = 'capacitor' | 'expo';
4
+ export type AbsoluteMobileShellObservability = {
5
+ beacon: Beacon;
6
+ captureException: (error: unknown, context?: {
7
+ phase?: string;
8
+ path?: string;
9
+ }) => void;
10
+ };
11
+ export declare const installAbsoluteMobileShellObservability: (manifest: AbsoluteMobileClientManifest, engine: AbsoluteMobileObservabilityEngine, fetch?: AbsoluteMobileFetch) => AbsoluteMobileShellObservability | undefined;
@@ -19,6 +19,12 @@ export type AbsoluteMobileClientManifest = {
19
19
  entry: string;
20
20
  format: typeof ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT;
21
21
  nativeRuntime: string;
22
+ observability?: {
23
+ endpoint: string;
24
+ environment?: string;
25
+ project: string;
26
+ sampleRate: number;
27
+ };
22
28
  pages: AbsoluteMobileClientPage[];
23
29
  productionOrigin: string;
24
30
  routes: AbsoluteMobileCompatibilityRoute[];
@@ -19,7 +19,7 @@ export declare const imageOptimizer: (config: ImageConfig | undefined, buildDir:
19
19
  status?: number | keyof import("elysia").StatusMap;
20
20
  cookie?: Record<string, import("elysia").BaseCookie>;
21
21
  };
22
- status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
22
+ status: <const Code extends number | keyof import("elysia").StatusMap, const T = Code extends 500 | 100 | 200 | 400 | 404 | 300 | 304 | 503 | 426 | 204 | 101 | 102 | 103 | 201 | 202 | 203 | 205 | 206 | 207 | 208 | 301 | 302 | 303 | 307 | 308 | 401 | 402 | 403 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 420 | 421 | 422 | 423 | 424 | 425 | 428 | 429 | 431 | 451 | 501 | 502 | 504 | 505 | 506 | 507 | 508 | 510 | 511 ? {
23
23
  readonly 100: "Continue";
24
24
  readonly 101: "Switching Protocols";
25
25
  readonly 102: "Processing";
@@ -2,6 +2,10 @@ export type StartupTimingStep = {
2
2
  label: string;
3
3
  durationMs: number;
4
4
  };
5
+ /** `ABSOLUTE_DEV_PROFILE=1` is the one-stop profiling switch: it turns on
6
+ * these per-step startup timings AND the per-phase build trace
7
+ * (`ABSOLUTE_BUILD_TRACE`, written to `<buildDir>/.absolute-trace/`). */
8
+ export declare const devProfileEnabled: boolean;
5
9
  export declare const startupTimingsEnabled: boolean;
6
10
  export declare const formatStartupTimingBlock: (title: string, steps: StartupTimingStep[]) => string;
7
11
  export declare const logStartupTimingBlock: (title: string, steps: StartupTimingStep[]) => void;
@@ -55,6 +55,18 @@ type MobileSharedConfig = {
55
55
  /** Deployed AbsoluteJS origin used for page envelopes and API calls. */
56
56
  productionOrigin: string;
57
57
  };
58
+ /** Shell-owned production error capture for web-rendered and Expo-native routes.
59
+ * Events go only to the configured route on the trusted production origin. */
60
+ observability?: {
61
+ /** Public project identity expected by the application's observability relay. */
62
+ project: string;
63
+ /** Deployment environment attached to reports, for example `production`. */
64
+ environment?: string;
65
+ /** Root-relative trusted-server error route. Defaults to `/api/observability/errors`. */
66
+ route?: string;
67
+ /** Fraction of errors retained, from 0 through 1. Defaults to 1. */
68
+ sampleRate?: number;
69
+ };
58
70
  /** Signed over-the-air web-bundle updates. Native capability changes still require a store build. */
59
71
  updates?: {
60
72
  /** Maximum time an activated bundle may take to render its first page before native rollback. Defaults to 20 seconds. */
@@ -46,6 +46,21 @@ declare global {
46
46
  * detect this and call `.reload({ fetch })` on the existing server
47
47
  * instead of re-binding the port. Stays unset outside dev. */
48
48
  var __absoluteBunServer: import('bun').Server | null | undefined;
49
+ /** "Building…" placeholder bound by the dev bootstrap before the entry
50
+ * is imported; released by `networking` right before the real listen.
51
+ * See `src/dev/earlyListener.ts`. */
52
+ var __absoluteEarlyListener:
53
+ | import('../src/dev/earlyListener').EarlyListener
54
+ | undefined;
55
+ var __absoluteEarlyListenerServeGuard: boolean | undefined;
56
+ /** Label of the boot step currently running (shown on the placeholder
57
+ * page). See `src/dev/bootLifecycle.ts`. */
58
+ var __absoluteBootPhase: string | undefined;
59
+ /** Boot work deferred until the server is serving real traffic. */
60
+ var __absoluteDeferredBootTasks:
61
+ | Array<() => void | Promise<void>>
62
+ | undefined;
63
+ var __absoluteDeferredBootTasksRan: boolean | undefined;
49
64
 
50
65
  /** Dev-only request inspector ring buffer, filled by the global
51
66
  * request/afterResponse hooks in `requestInspector` and served at
package/package.json CHANGED
@@ -8,6 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "@absolutejs/auth": "0.75.0",
11
+ "@absolutejs/beacon": "0.7.0-beta.4",
11
12
  "@absolutejs/devices": "0.7.0",
12
13
  "@absolutejs/devices-capacitor": "0.8.0",
13
14
  "@absolutejs/devices-expo": "0.0.2",
@@ -25,6 +26,7 @@
25
26
  "@tailwindcss/oxide": "^4.1.0",
26
27
  "exact-mirror": "1.2.4",
27
28
  "typebox": "1.3.16",
29
+ "web-vitals": "6.0.0",
28
30
  "zustand": "^5.0.12"
29
31
  },
30
32
  "description": "A fullstack meta-framework for building web applications with TypeScript",
@@ -294,12 +296,12 @@
294
296
  "main": "./dist/index.js",
295
297
  "name": "@absolutejs/absolute",
296
298
  "optionalDependencies": {
297
- "@absolutejs/native-darwin-arm64": "0.20.0-beta.65",
298
- "@absolutejs/native-darwin-x64": "0.20.0-beta.65",
299
- "@absolutejs/native-linux-arm64": "0.20.0-beta.65",
300
- "@absolutejs/native-linux-x64": "0.20.0-beta.65",
301
- "@absolutejs/native-windows-arm64": "0.20.0-beta.65",
302
- "@absolutejs/native-windows-x64": "0.20.0-beta.65"
299
+ "@absolutejs/native-darwin-arm64": "0.20.0-beta.67",
300
+ "@absolutejs/native-darwin-x64": "0.20.0-beta.67",
301
+ "@absolutejs/native-linux-arm64": "0.20.0-beta.67",
302
+ "@absolutejs/native-linux-x64": "0.20.0-beta.67",
303
+ "@absolutejs/native-windows-arm64": "0.20.0-beta.67",
304
+ "@absolutejs/native-windows-x64": "0.20.0-beta.67"
303
305
  },
304
306
  "overrides": {
305
307
  "@sinclair/typebox": "0.34.52",
@@ -517,7 +519,7 @@
517
519
  ]
518
520
  }
519
521
  },
520
- "version": "0.20.0-beta.65",
522
+ "version": "0.20.0-beta.67",
521
523
  "workspaces": [
522
524
  "tests/fixtures/*",
523
525
  "tests/fixtures/_packages/*"