@absolutejs/absolute 0.20.0-beta.7 → 0.20.0-beta.70

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 (192) hide show
  1. package/README.md +205 -0
  2. package/dist/angular/browser.js +392 -405
  3. package/dist/angular/browser.js.map +3 -3
  4. package/dist/angular/components/core/streamingSlotRegistrar.js +7 -7
  5. package/dist/angular/components/core/streamingSlotRegistry.js +4 -4
  6. package/dist/angular/index.js +379 -321
  7. package/dist/angular/index.js.map +8 -7
  8. package/dist/angular/server.js +133 -61
  9. package/dist/angular/server.js.map +8 -7
  10. package/dist/build.js +2629 -1416
  11. package/dist/build.js.map +26 -19
  12. package/dist/cli/config/client.js +12 -12
  13. package/dist/cli/config/server.js +1140 -1091
  14. package/dist/cli/index.js +41579 -15184
  15. package/dist/client/chunks/angularPatch-arh4sr68.js +157 -0
  16. package/dist/client/chunks/angularPatch-arh4sr68.js.map +10 -0
  17. package/dist/client/chunks/index-5py90ctf.js +87 -0
  18. package/dist/client/chunks/index-5py90ctf.js.map +10 -0
  19. package/dist/client/chunks/index-m35nbkdp.js +374 -0
  20. package/dist/client/chunks/index-m35nbkdp.js.map +12 -0
  21. package/dist/client/chunks/index-qxjc7kc5.js +12 -0
  22. package/dist/client/chunks/index-qxjc7kc5.js.map +9 -0
  23. package/dist/client/chunks/islands-xj2n8nwf.js +281 -0
  24. package/dist/client/chunks/islands-xj2n8nwf.js.map +14 -0
  25. package/dist/client/chunks/react-pdg4325x.js +65 -0
  26. package/dist/client/chunks/react-pdg4325x.js.map +10 -0
  27. package/dist/client/chunks/svelte-s0c964kb.js +19 -0
  28. package/dist/client/chunks/svelte-s0c964kb.js.map +10 -0
  29. package/dist/client/chunks/vue-rdskrnyg.js +24 -0
  30. package/dist/client/chunks/vue-rdskrnyg.js.map +10 -0
  31. package/dist/client/index.js +73 -841
  32. package/dist/client/index.js.map +7 -20
  33. package/dist/core/streamingSlotRegistrar.js +15 -13
  34. package/dist/core/streamingSlotRegistrar.js.map +2 -2
  35. package/dist/core/streamingSlotRegistry.js +11 -9
  36. package/dist/core/streamingSlotRegistry.js.map +2 -2
  37. package/dist/dev/client/hmrClient.ts +35 -3
  38. package/dist/dev/client/hmrTiming.ts +6 -0
  39. package/dist/dev/client/syncDevtools.ts +237 -0
  40. package/dist/dev/serverBootstrap.js +572 -6
  41. package/dist/image-client/imageClient.js +7 -7
  42. package/dist/index.js +4157 -2440
  43. package/dist/index.js.map +43 -32
  44. package/dist/islands/browser.js +11 -25
  45. package/dist/islands/browser.js.map +2 -2
  46. package/dist/islands/index.js +55 -52
  47. package/dist/islands/index.js.map +5 -4
  48. package/dist/mobile/browser.js +429 -20
  49. package/dist/mobile/browser.js.map +8 -5
  50. package/dist/mobile/index.js +37077 -4967
  51. package/dist/mobile/index.js.map +100 -18
  52. package/dist/mobile/mobilePreviewClient.ts +246 -0
  53. package/dist/mobile/remoteMacAgentEntry.js +1899 -14
  54. package/dist/mobile/shellAuth.js +20 -9
  55. package/dist/mobile/shellBootstrap.js +6801 -120
  56. package/dist/mobile/shellExpoAuth.js +179 -0
  57. package/dist/mobile/shellExpoDevices.js +93 -0
  58. package/dist/mobile/shellExpoSync.js +120 -0
  59. package/dist/mobile/shellSync.js +152 -3
  60. package/dist/mobile/shellUpdate.js +559 -0
  61. package/dist/mobile/uiPrimitives.js +280 -0
  62. package/dist/react/browser.js +17 -59
  63. package/dist/react/browser.js.map +2 -2
  64. package/dist/react/components/browser/index.js +107 -107
  65. package/dist/react/components/index.js +118 -116
  66. package/dist/react/components/index.js.map +2 -2
  67. package/dist/react/hooks/index.js +11 -25
  68. package/dist/react/hooks/index.js.map +2 -2
  69. package/dist/react/index.js +110 -67
  70. package/dist/react/index.js.map +8 -7
  71. package/dist/react/jsxDevRuntimeCompat.js +11 -9
  72. package/dist/react/jsxDevRuntimeCompat.js.map +2 -2
  73. package/dist/react/jsxRuntimeCompat.js +11 -9
  74. package/dist/react/jsxRuntimeCompat.js.map +2 -2
  75. package/dist/react/router/browser.js +9 -7
  76. package/dist/react/router/browser.js.map +2 -2
  77. package/dist/react/router/index.js +9 -7
  78. package/dist/react/router/index.js.map +2 -2
  79. package/dist/react/server.js +67 -11
  80. package/dist/react/server.js.map +7 -6
  81. package/dist/src/build/chainInlineSourcemaps.d.ts +2 -0
  82. package/dist/src/build/pwa.d.ts +16 -0
  83. package/dist/src/build/vueCompileCache.d.ts +43 -0
  84. package/dist/src/cli/config/server.d.ts +1 -1
  85. package/dist/src/cli/instanceStatus.d.ts +1 -0
  86. package/dist/src/cli/scripts/dev.d.ts +2 -0
  87. package/dist/src/client/browserTranslation.d.ts +19 -0
  88. package/dist/src/client/index.d.ts +1 -0
  89. package/dist/src/core/browserTranslation.d.ts +6 -0
  90. package/dist/src/core/devBuild.d.ts +1 -0
  91. package/dist/src/core/prepare.d.ts +376 -0
  92. package/dist/src/dev/bootLifecycle.d.ts +11 -0
  93. package/dist/src/dev/clientManager.d.ts +1 -0
  94. package/dist/src/dev/devCert.d.ts +6 -4
  95. package/dist/src/dev/earlyListener.d.ts +41 -0
  96. package/dist/src/dev/serverEntryCopies.d.ts +3 -0
  97. package/dist/src/ember/browser.d.ts +0 -16
  98. package/dist/src/mobile/adaptiveShell.d.ts +27 -0
  99. package/dist/src/mobile/androidEmulatorController.d.ts +8 -1
  100. package/dist/src/mobile/androidRelease.d.ts +9 -2
  101. package/dist/src/mobile/androidTestReport.d.ts +14 -0
  102. package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
  103. package/dist/src/mobile/androidWebView.d.ts +1 -0
  104. package/dist/src/mobile/browser.d.ts +2 -0
  105. package/dist/src/mobile/capacitorBundle.d.ts +33 -1
  106. package/dist/src/mobile/ciWorkflow.d.ts +26 -0
  107. package/dist/src/mobile/config.d.ts +22 -1
  108. package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
  109. package/dist/src/mobile/deviceCapabilities.d.ts +49 -0
  110. package/dist/src/mobile/expoBridge.d.ts +91 -0
  111. package/dist/src/mobile/expoCodeSigning.d.ts +14 -0
  112. package/dist/src/mobile/expoDevController.d.ts +64 -0
  113. package/dist/src/mobile/expoNativeObservability.d.ts +3 -0
  114. package/dist/src/mobile/expoProject.d.ts +16 -0
  115. package/dist/src/mobile/expoUpdate.d.ts +27 -0
  116. package/dist/src/mobile/index.d.ts +29 -0
  117. package/dist/src/mobile/iosDeviceAcceptance.d.ts +32 -0
  118. package/dist/src/mobile/iosPhysicalDeviceTransport.d.ts +16 -0
  119. package/dist/src/mobile/iosRelease.d.ts +63 -3
  120. package/dist/src/mobile/iosSimulatorController.d.ts +20 -2
  121. package/dist/src/mobile/iosTestReport.d.ts +24 -0
  122. package/dist/src/mobile/mobileBundleInspection.d.ts +63 -0
  123. package/dist/src/mobile/mobileInspect.d.ts +156 -0
  124. package/dist/src/mobile/mobilePreview.d.ts +174 -0
  125. package/dist/src/mobile/mobilePreviewClient.d.ts +1 -0
  126. package/dist/src/mobile/nativeAuth.d.ts +6 -0
  127. package/dist/src/mobile/nativeBackgroundSync.d.ts +4 -0
  128. package/dist/src/mobile/nativeDeviceCapabilities.d.ts +6 -0
  129. package/dist/src/mobile/nativeObservability.d.ts +4 -0
  130. package/dist/src/mobile/nativeRoute.d.ts +13 -0
  131. package/dist/src/mobile/nativeTestReport.d.ts +91 -0
  132. package/dist/src/mobile/nativeUpdates.d.ts +4 -0
  133. package/dist/src/mobile/navigationLifecycle.d.ts +36 -0
  134. package/dist/src/mobile/navigationState.d.ts +53 -0
  135. package/dist/src/mobile/pageProtocol.d.ts +2 -0
  136. package/dist/src/mobile/releaseDoctor.d.ts +23 -1
  137. package/dist/src/mobile/remoteMacProtocol.d.ts +134 -1
  138. package/dist/src/mobile/remoteMacWire.d.ts +1 -1
  139. package/dist/src/mobile/shellAuth.d.ts +5 -1
  140. package/dist/src/mobile/shellBootstrap.d.ts +12 -2
  141. package/dist/src/mobile/shellExpoAuth.d.ts +12 -0
  142. package/dist/src/mobile/shellExpoDevices.d.ts +3 -0
  143. package/dist/src/mobile/shellExpoSync.d.ts +18 -0
  144. package/dist/src/mobile/shellHttp.d.ts +2 -0
  145. package/dist/src/mobile/shellNativeObservability.d.ts +21 -0
  146. package/dist/src/mobile/shellObservability.d.ts +11 -0
  147. package/dist/src/mobile/shellPush.d.ts +11 -0
  148. package/dist/src/mobile/shellSync.d.ts +37 -4
  149. package/dist/src/mobile/shellUpdate.d.ts +2 -0
  150. package/dist/src/mobile/syncRemediation.d.ts +10 -0
  151. package/dist/src/mobile/syncSchema.d.ts +9 -0
  152. package/dist/src/mobile/transport.d.ts +21 -0
  153. package/dist/src/mobile/uiPrimitives.d.ts +37 -0
  154. package/dist/src/mobile/updateClient.d.ts +44 -0
  155. package/dist/src/mobile/updateProtocol.d.ts +51 -0
  156. package/dist/src/mobile/updatePublisher.d.ts +66 -0
  157. package/dist/src/mobile/updateRollout.d.ts +16 -0
  158. package/dist/src/mobile/updateRuntime.d.ts +37 -0
  159. package/dist/src/mobile/updateSigning.d.ts +20 -0
  160. package/dist/src/plugins/hmr.d.ts +3 -0
  161. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  162. package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
  163. package/dist/src/utils/imageProcessing.d.ts +3 -0
  164. package/dist/src/utils/loadConfig.d.ts +1 -0
  165. package/dist/src/utils/logger.d.ts +1 -0
  166. package/dist/src/utils/startupBanner.d.ts +1 -0
  167. package/dist/src/utils/startupTimings.d.ts +4 -0
  168. package/dist/src/utils/userAgentFunctions.d.ts +1 -1
  169. package/dist/src/vue/browser.d.ts +1 -0
  170. package/dist/src/vue/browserTranslation.d.ts +5 -0
  171. package/dist/src/vue/index.d.ts +1 -0
  172. package/dist/svelte/browser.js +12 -26
  173. package/dist/svelte/browser.js.map +2 -2
  174. package/dist/svelte/index.js +104 -61
  175. package/dist/svelte/index.js.map +8 -7
  176. package/dist/svelte/server.js +84 -28
  177. package/dist/svelte/server.js.map +7 -6
  178. package/dist/types/build.d.ts +83 -3
  179. package/dist/types/cli.d.ts +1 -0
  180. package/dist/types/globals.d.ts +15 -0
  181. package/dist/types/messages.d.ts +1 -1
  182. package/dist/vue/browser.js +116 -56
  183. package/dist/vue/browser.js.map +5 -3
  184. package/dist/vue/components/Image.js +9 -7
  185. package/dist/vue/components/Image.js.map +2 -2
  186. package/dist/vue/components/index.js +11 -9
  187. package/dist/vue/components/index.js.map +2 -2
  188. package/dist/vue/index.js +211 -94
  189. package/dist/vue/index.js.map +10 -7
  190. package/dist/vue/server.js +69 -13
  191. package/dist/vue/server.js.map +7 -6
  192. package/package.json +46 -15
@@ -0,0 +1,246 @@
1
+ import { installDeviceAdapter } from '@absolutejs/devices';
2
+ import {
3
+ createAbsoluteHttpTransport,
4
+ installAbsoluteHttpTransport
5
+ } from '@absolutejs/http';
6
+ import {
7
+ createTestDeviceAdapter,
8
+ type TestDeviceController
9
+ } from '@absolutejs/devices/testing';
10
+
11
+ type PreviewMessage =
12
+ | { type: 'absolute-preview:back' }
13
+ | { type: 'absolute-preview:deep-link'; url: string }
14
+ | { type: 'absolute-preview:keyboard'; heightPx: number; visible: boolean }
15
+ | {
16
+ type: 'absolute-preview:lifecycle';
17
+ state: 'active' | 'background' | 'inactive';
18
+ }
19
+ | {
20
+ type: 'absolute-preview:network';
21
+ connected: boolean;
22
+ connectionType: 'cellular' | 'none' | 'unknown' | 'wifi';
23
+ }
24
+ | {
25
+ type: 'absolute-preview:permission';
26
+ capability: 'camera' | 'location' | 'notifications';
27
+ state: 'blocked' | 'denied' | 'granted' | 'prompt';
28
+ };
29
+
30
+ const isRecord = (value: unknown): value is Record<string, unknown> =>
31
+ typeof value === 'object' && value !== null;
32
+
33
+ const isPreviewMessage = (value: unknown): value is PreviewMessage => {
34
+ if (!isRecord(value) || typeof value.type !== 'string') return false;
35
+ if (value.type === 'absolute-preview:back') return true;
36
+ if (value.type === 'absolute-preview:deep-link')
37
+ return typeof value.url === 'string';
38
+ if (value.type === 'absolute-preview:keyboard')
39
+ return (
40
+ typeof value.heightPx === 'number' &&
41
+ Number.isFinite(value.heightPx) &&
42
+ typeof value.visible === 'boolean'
43
+ );
44
+ if (value.type === 'absolute-preview:lifecycle')
45
+ return ['active', 'background', 'inactive'].includes(
46
+ String(value.state)
47
+ );
48
+ if (value.type === 'absolute-preview:network')
49
+ return (
50
+ typeof value.connected === 'boolean' &&
51
+ ['cellular', 'none', 'unknown', 'wifi'].includes(
52
+ String(value.connectionType)
53
+ )
54
+ );
55
+ if (value.type === 'absolute-preview:permission')
56
+ return (
57
+ ['camera', 'location', 'notifications'].includes(
58
+ String(value.capability)
59
+ ) &&
60
+ ['blocked', 'denied', 'granted', 'prompt'].includes(
61
+ String(value.state)
62
+ )
63
+ );
64
+
65
+ return false;
66
+ };
67
+
68
+ const previewPlatform = () =>
69
+ new URLSearchParams(location.search).get('__absolute_preview_platform') ===
70
+ 'android'
71
+ ? 'android'
72
+ : 'ios';
73
+
74
+ const PREVIEW_STATE_KEY = Symbol.for('@absolutejs/mobile-preview/state');
75
+ type AbsoluteMobilePreviewState = { connected: boolean };
76
+ const isAbsoluteMobilePreviewState = (
77
+ value: unknown
78
+ ): value is AbsoluteMobilePreviewState =>
79
+ isRecord(value) && typeof value.connected === 'boolean';
80
+ const getPreviewState = () => {
81
+ const existing = Reflect.get(globalThis, PREVIEW_STATE_KEY);
82
+ if (isAbsoluteMobilePreviewState(existing)) return existing;
83
+ const created: AbsoluteMobilePreviewState = { connected: true };
84
+ Reflect.set(globalThis, PREVIEW_STATE_KEY, created);
85
+
86
+ return created;
87
+ };
88
+ const previewState = getPreviewState();
89
+ const browserFetch = globalThis.fetch;
90
+ const nativeFetch = browserFetch.bind(globalThis);
91
+ const isPreviewInfrastructureRequest = (url: URL) =>
92
+ url.origin === location.origin &&
93
+ (url.pathname.startsWith('/__absolute/') ||
94
+ url.pathname.startsWith('/@src/') ||
95
+ url.pathname === '/hmr-status');
96
+
97
+ const previewPreconnect = (
98
+ ...args: Parameters<typeof globalThis.fetch.preconnect>
99
+ ) => {
100
+ const preconnect = Reflect.get(browserFetch, 'preconnect');
101
+ if (typeof preconnect === 'function')
102
+ Reflect.apply(preconnect, browserFetch, args);
103
+ };
104
+
105
+ const previewFetch: typeof globalThis.fetch = Object.assign(
106
+ (
107
+ input: Parameters<typeof globalThis.fetch>[0],
108
+ init?: Parameters<typeof globalThis.fetch>[1]
109
+ ) => {
110
+ const requestUrl = new URL(
111
+ input instanceof Request ? input.url : String(input),
112
+ location.href
113
+ );
114
+ if (
115
+ !previewState.connected &&
116
+ !isPreviewInfrastructureRequest(requestUrl)
117
+ ) {
118
+ return Promise.reject(
119
+ new TypeError(
120
+ 'AbsoluteJS mobile preview is offline. Restore connectivity from the preview controls.'
121
+ )
122
+ );
123
+ }
124
+
125
+ return nativeFetch(input, init);
126
+ },
127
+ { preconnect: previewPreconnect }
128
+ );
129
+
130
+ const installPreviewFetch = () => {
131
+ globalThis.fetch = previewFetch;
132
+ };
133
+
134
+ let removePreviewHttpTransport: (() => void) | undefined;
135
+ const installPreviewHttpTransport = () => {
136
+ removePreviewHttpTransport?.();
137
+ removePreviewHttpTransport = installAbsoluteHttpTransport(
138
+ createAbsoluteHttpTransport({
139
+ fetch: previewFetch,
140
+ origin: location.origin,
141
+ runtime: 'web'
142
+ })
143
+ );
144
+ };
145
+
146
+ installPreviewFetch();
147
+
148
+ const postState = (
149
+ type: 'event' | 'ready',
150
+ detail: Record<string, unknown> = {}
151
+ ) => {
152
+ if (window.parent === window) return;
153
+ window.parent.postMessage(
154
+ {
155
+ ...detail,
156
+ platform: previewPlatform(),
157
+ type: `absolute-preview:${type}`
158
+ },
159
+ location.origin
160
+ );
161
+ };
162
+
163
+ const reportReady = () => {
164
+ const durationMs = Math.max(0, Math.round(performance.now()));
165
+ void nativeFetch('/__absolute/mobile-preview-telemetry', {
166
+ body: JSON.stringify({ durationMs, platform: previewPlatform() }),
167
+ headers: { 'content-type': 'application/json' },
168
+ keepalive: true,
169
+ method: 'POST'
170
+ }).catch(() => undefined);
171
+ };
172
+
173
+ const emitPermission = (
174
+ controller: TestDeviceController,
175
+ message: Extract<PreviewMessage, { type: 'absolute-preview:permission' }>
176
+ ) => {
177
+ const status = {
178
+ canRequest: message.state === 'prompt',
179
+ state: message.state
180
+ } as const;
181
+ if (message.capability === 'camera')
182
+ controller.cameraPermission.setStatus(status);
183
+ else if (message.capability === 'location')
184
+ controller.locationPermission.setStatus(status);
185
+ else controller.notificationPermission.setStatus(status);
186
+ };
187
+
188
+ const handlePreviewMessage = (
189
+ controller: TestDeviceController,
190
+ message: PreviewMessage
191
+ ) => {
192
+ if (message.type === 'absolute-preview:back') {
193
+ controller.emitBack({ canGoBack: history.length > 1 });
194
+ } else if (message.type === 'absolute-preview:deep-link') {
195
+ controller.emitLink(message.url);
196
+ } else if (message.type === 'absolute-preview:keyboard') {
197
+ controller.emitKeyboard({
198
+ heightPx: Math.max(0, Math.round(message.heightPx)),
199
+ visible: message.visible
200
+ });
201
+ } else if (message.type === 'absolute-preview:lifecycle') {
202
+ controller.emitLifecycle(message.state);
203
+ } else if (message.type === 'absolute-preview:network') {
204
+ previewState.connected = message.connected;
205
+ // Some framework runtimes replace window.fetch while bootstrapping.
206
+ // Reassert the raw-fetch simulation whenever connectivity changes;
207
+ // @absolutejs/http remains pinned to this provider independently.
208
+ installPreviewFetch();
209
+ installPreviewHttpTransport();
210
+ controller.emitNetwork({
211
+ connected: message.connected,
212
+ connectionType: message.connectionType
213
+ });
214
+ } else emitPermission(controller, message);
215
+ postState('event', { event: message.type });
216
+ };
217
+
218
+ export const installAbsoluteMobilePreview = () => {
219
+ if (Reflect.has(globalThis, '__ABS_MOBILE_PREVIEW__')) return;
220
+ const platform = previewPlatform();
221
+ const controller = createTestDeviceAdapter({
222
+ lifecycle: 'active',
223
+ network: { connected: true, connectionType: 'wifi' },
224
+ platform: {
225
+ formFactor: 'phone',
226
+ isNative: true,
227
+ os: platform,
228
+ runtime: 'capacitor',
229
+ safeAreaInsets:
230
+ platform === 'ios'
231
+ ? { bottom: 34, left: 0, right: 0, top: 59 }
232
+ : { bottom: 24, left: 0, right: 0, top: 24 }
233
+ }
234
+ });
235
+ installDeviceAdapter(controller.adapter);
236
+ installPreviewHttpTransport();
237
+ Reflect.set(globalThis, '__ABS_MOBILE_PREVIEW__', controller);
238
+ addEventListener('message', (event: MessageEvent<unknown>) => {
239
+ if (event.origin !== location.origin || event.source !== window.parent)
240
+ return;
241
+ if (!isPreviewMessage(event.data)) return;
242
+ handlePreviewMessage(controller, event.data);
243
+ });
244
+ postState('ready');
245
+ reportReady();
246
+ };