@absolutejs/absolute 0.20.0-beta.4 → 0.20.0-beta.41

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 (110) hide show
  1. package/README.md +203 -0
  2. package/dist/angular/browser.js +15 -1
  3. package/dist/angular/browser.js.map +3 -3
  4. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  5. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  6. package/dist/angular/index.js +361 -30
  7. package/dist/angular/index.js.map +9 -6
  8. package/dist/angular/server.js +361 -30
  9. package/dist/angular/server.js.map +9 -6
  10. package/dist/build.js +2097 -1114
  11. package/dist/build.js.map +20 -16
  12. package/dist/cli/config/server.js +4 -0
  13. package/dist/cli/index.js +6986 -1561
  14. package/dist/dev/client/cssUtils.ts +16 -2
  15. package/dist/dev/client/handlers/rebuild.ts +11 -1
  16. package/dist/dev/client/hmrClient.ts +35 -3
  17. package/dist/dev/client/hmrTiming.ts +20 -7
  18. package/dist/dev/client/syncDevtools.ts +237 -0
  19. package/dist/dev/serverBootstrap.js +28 -0
  20. package/dist/index.js +2947 -1670
  21. package/dist/index.js.map +37 -31
  22. package/dist/mobile/browser.js +123 -1
  23. package/dist/mobile/browser.js.map +6 -4
  24. package/dist/mobile/index.js +4579 -375
  25. package/dist/mobile/index.js.map +39 -18
  26. package/dist/mobile/remoteMacAgentEntry.js +14 -14
  27. package/dist/mobile/shellAuth.js +36 -0
  28. package/dist/mobile/shellBootstrap.js +837 -0
  29. package/dist/mobile/shellExpoDevices.js +99 -0
  30. package/dist/mobile/shellSync.js +173 -0
  31. package/dist/react/index.js +5 -1
  32. package/dist/react/index.js.map +3 -3
  33. package/dist/react/server.js +5 -1
  34. package/dist/react/server.js.map +3 -3
  35. package/dist/src/angular/pageHandler.d.ts +3 -0
  36. package/dist/src/build/pwa.d.ts +16 -0
  37. package/dist/src/cli/config/server.d.ts +1 -1
  38. package/dist/src/cli/instanceStatus.d.ts +1 -0
  39. package/dist/src/cli/scripts/dev.d.ts +2 -0
  40. package/dist/src/core/devBuild.d.ts +1 -0
  41. package/dist/src/core/pageHandlers.d.ts +11 -2
  42. package/dist/src/core/prepare.d.ts +376 -0
  43. package/dist/src/dev/clientManager.d.ts +1 -0
  44. package/dist/src/dev/devCert.d.ts +6 -4
  45. package/dist/src/dev/serverEntryCopies.d.ts +3 -0
  46. package/dist/src/mobile/androidEmulatorController.d.ts +14 -2
  47. package/dist/src/mobile/androidRelease.d.ts +6 -0
  48. package/dist/src/mobile/androidTestReport.d.ts +14 -0
  49. package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
  50. package/dist/src/mobile/androidWebView.d.ts +1 -0
  51. package/dist/src/mobile/browser.d.ts +1 -0
  52. package/dist/src/mobile/buildPipeline.d.ts +1 -0
  53. package/dist/src/mobile/capacitorBundle.d.ts +22 -1
  54. package/dist/src/mobile/ciWorkflow.d.ts +26 -0
  55. package/dist/src/mobile/client.d.ts +4 -0
  56. package/dist/src/mobile/config.d.ts +4 -1
  57. package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
  58. package/dist/src/mobile/deviceCapabilities.d.ts +46 -0
  59. package/dist/src/mobile/expoBridge.d.ts +91 -0
  60. package/dist/src/mobile/expoDevController.d.ts +49 -0
  61. package/dist/src/mobile/expoProject.d.ts +16 -0
  62. package/dist/src/mobile/index.d.ts +14 -0
  63. package/dist/src/mobile/iosDeviceAcceptance.d.ts +32 -0
  64. package/dist/src/mobile/iosPhysicalDeviceTransport.d.ts +16 -0
  65. package/dist/src/mobile/iosRelease.d.ts +4 -1
  66. package/dist/src/mobile/iosSimulatorController.d.ts +20 -2
  67. package/dist/src/mobile/iosTestReport.d.ts +24 -0
  68. package/dist/src/mobile/mobileBundleInspection.d.ts +55 -0
  69. package/dist/src/mobile/mobileInspect.d.ts +136 -0
  70. package/dist/src/mobile/mobilePreview.d.ts +174 -0
  71. package/dist/src/mobile/mobilePreviewClient.d.ts +1 -0
  72. package/dist/src/mobile/nativeAuth.d.ts +17 -0
  73. package/dist/src/mobile/nativeBackgroundSync.d.ts +4 -0
  74. package/dist/src/mobile/nativeDeviceCapabilities.d.ts +6 -0
  75. package/dist/src/mobile/nativeTestReport.d.ts +91 -0
  76. package/dist/src/mobile/releaseArtifact.d.ts +2 -0
  77. package/dist/src/mobile/releaseDoctor.d.ts +23 -1
  78. package/dist/src/mobile/remoteMacProtocol.d.ts +11 -0
  79. package/dist/src/mobile/shellAuth.d.ts +15 -0
  80. package/dist/src/mobile/shellBootstrap.d.ts +23 -1
  81. package/dist/src/mobile/shellExpoDevices.d.ts +3 -0
  82. package/dist/src/mobile/shellHttp.d.ts +2 -0
  83. package/dist/src/mobile/shellPush.d.ts +11 -0
  84. package/dist/src/mobile/shellSync.d.ts +47 -0
  85. package/dist/src/mobile/staticDocument.d.ts +5 -0
  86. package/dist/src/mobile/syncRemediation.d.ts +10 -0
  87. package/dist/src/mobile/syncSchema.d.ts +9 -0
  88. package/dist/src/mobile/transport.d.ts +16 -1
  89. package/dist/src/plugins/hmr.d.ts +3 -0
  90. package/dist/src/plugins/imageOptimizer.d.ts +1 -1
  91. package/dist/src/react/hooks/useMediaQuery.d.ts +1 -1
  92. package/dist/src/svelte/pageHandler.d.ts +3 -0
  93. package/dist/src/utils/imageProcessing.d.ts +3 -0
  94. package/dist/src/utils/loadConfig.d.ts +1 -0
  95. package/dist/src/utils/logger.d.ts +1 -0
  96. package/dist/src/utils/startupBanner.d.ts +1 -0
  97. package/dist/src/utils/userAgentFunctions.d.ts +1 -1
  98. package/dist/src/vue/pageHandler.d.ts +3 -0
  99. package/dist/svelte/index.js +316 -23
  100. package/dist/svelte/index.js.map +8 -5
  101. package/dist/svelte/server.js +311 -18
  102. package/dist/svelte/server.js.map +8 -5
  103. package/dist/types/build.d.ts +50 -3
  104. package/dist/types/cli.d.ts +1 -0
  105. package/dist/types/messages.d.ts +1 -1
  106. package/dist/vue/index.js +316 -23
  107. package/dist/vue/index.js.map +8 -5
  108. package/dist/vue/server.js +311 -18
  109. package/dist/vue/server.js.map +8 -5
  110. package/package.json +41 -11
@@ -0,0 +1,99 @@
1
+ // src/mobile/shellExpoDevices.ts
2
+ import { createWebDeviceAdapter } from "@absolutejs/devices/web";
3
+ import { installDeviceAdapter } from "@absolutejs/devices/runtime";
4
+ var bridge = () => {
5
+ const value = Reflect.get(globalThis, "__absoluteExpoBridge");
6
+ if (typeof value !== "object" || value === null || typeof Reflect.get(value, "request") !== "function") {
7
+ return;
8
+ }
9
+ return {
10
+ request: (method, params) => Promise.resolve(Reflect.apply(Reflect.get(value, "request"), value, [
11
+ method,
12
+ params
13
+ ]))
14
+ };
15
+ };
16
+ var parseFetchResult = (value) => {
17
+ if (!value || typeof value !== "object")
18
+ throw new TypeError("The Expo HTTP bridge returned an invalid response.");
19
+ const body = Reflect.get(value, "body");
20
+ const headers = Reflect.get(value, "headers");
21
+ const status = Reflect.get(value, "status");
22
+ if (typeof body !== "string" || typeof status !== "number" || !Number.isInteger(status) || !headers || typeof headers !== "object") {
23
+ throw new TypeError("The Expo HTTP bridge returned an invalid response.");
24
+ }
25
+ const entries = Object.entries(headers);
26
+ if (!entries.every(([, header]) => typeof header === "string")) {
27
+ throw new TypeError("The Expo HTTP bridge returned invalid headers.");
28
+ }
29
+ return {
30
+ body,
31
+ headers: Object.fromEntries(entries.map(([name, header]) => [name, String(header)])),
32
+ status
33
+ };
34
+ };
35
+ var requireBridge = () => {
36
+ const provider = bridge();
37
+ if (!provider)
38
+ throw new TypeError("The Expo WebView bridge is unavailable.");
39
+ return provider;
40
+ };
41
+ var createAbsoluteExpoBridgeFetch = () => async (input, init) => {
42
+ const request = new Request(input, init);
43
+ if (request.method !== "GET") {
44
+ throw new TypeError("The experimental Expo envelope bridge currently supports GET only.");
45
+ }
46
+ const headers = Object.fromEntries(request.headers);
47
+ const result = parseFetchResult(await requireBridge().request("http.fetch", {
48
+ headers,
49
+ method: request.method,
50
+ url: request.url
51
+ }));
52
+ return new Response(result.body, {
53
+ headers: result.headers,
54
+ status: result.status
55
+ });
56
+ };
57
+ var installAbsoluteExpoWebDeviceAdapter = () => {
58
+ const web = createWebDeviceAdapter();
59
+ return installDeviceAdapter({
60
+ ...web,
61
+ haptics: {
62
+ capability: async () => bridge() ? {
63
+ available: true,
64
+ fidelity: "native",
65
+ native: true
66
+ } : {
67
+ available: false,
68
+ message: "The Expo WebView bridge is unavailable.",
69
+ reason: "unavailable"
70
+ },
71
+ impact: async (style) => {
72
+ await requireBridge().request("devices.haptics.impact", {
73
+ style
74
+ });
75
+ },
76
+ notification: async (style) => {
77
+ await requireBridge().request("devices.haptics.impact", {
78
+ style
79
+ });
80
+ },
81
+ selectionChanged: async () => {
82
+ await requireBridge().request("devices.haptics.impact", {
83
+ style: "selection"
84
+ });
85
+ },
86
+ vibrate: async (durationMs) => {
87
+ await requireBridge().request("devices.haptics.impact", {
88
+ durationMs,
89
+ style: "vibrate"
90
+ });
91
+ }
92
+ },
93
+ runtime: "expo"
94
+ });
95
+ };
96
+ export {
97
+ installAbsoluteExpoWebDeviceAdapter,
98
+ createAbsoluteExpoBridgeFetch
99
+ };
@@ -0,0 +1,173 @@
1
+ // src/mobile/shellSync.ts
2
+ import { lifecycle, network } from "@absolutejs/devices";
3
+ import {
4
+ createCapacitorSyncLocalStore,
5
+ createCapacitorSyncProtection,
6
+ AbsoluteBackgroundSync,
7
+ configureCapacitorBackgroundSync,
8
+ installCapacitorSyncLifecycle
9
+ } from "@absolutejs/sync-capacitor";
10
+ import { installSyncClientRuntimeTransport } from "@absolutejs/sync/client/runtime";
11
+
12
+ // src/mobile/syncRemediation.ts
13
+ import {
14
+ discardSyncRuntimeDeadLetter,
15
+ inspectSyncRuntime,
16
+ rebaseSyncRuntimeDeadLetter,
17
+ retrySyncRuntimeDeadLetter
18
+ } from "@absolutejs/sync/client/runtime";
19
+ var REMEDIATION_REGISTRY = Symbol.for("@absolutejs/mobile-sync-remediation");
20
+ var isRegistry = (value) => typeof value === "object" && value !== null && Array.isArray(Reflect.get(value, "installations"));
21
+ var resolveRegistry = () => {
22
+ const existing = Reflect.get(globalThis, REMEDIATION_REGISTRY);
23
+ if (isRegistry(existing))
24
+ return existing;
25
+ const created = { installations: [] };
26
+ Object.defineProperty(globalThis, REMEDIATION_REGISTRY, {
27
+ configurable: false,
28
+ enumerable: false,
29
+ value: created,
30
+ writable: false
31
+ });
32
+ return created;
33
+ };
34
+ var registry = resolveRegistry();
35
+ var installAbsoluteMobileSyncRemediation = (bridge = {
36
+ discard: discardSyncRuntimeDeadLetter,
37
+ inspect: inspectSyncRuntime,
38
+ rebase: rebaseSyncRuntimeDeadLetter,
39
+ retry: retrySyncRuntimeDeadLetter
40
+ }) => {
41
+ const installation = { bridge };
42
+ registry.installations.push(installation);
43
+ return () => {
44
+ const index = registry.installations.indexOf(installation);
45
+ if (index >= 0)
46
+ registry.installations.splice(index, 1);
47
+ };
48
+ };
49
+
50
+ // src/mobile/shellSync.ts
51
+ var reloadShell = () => globalThis.location.reload();
52
+ var ABSOLUTE_MOBILE_SYNC_SCHEMA_EVENT = "absolute:sync-schema";
53
+ var ABSOLUTE_MOBILE_SYNC_SCHEMA_STATE_KEY = "absolutejs.mobile.sync.schema-state";
54
+ var ABSOLUTE_MOBILE_SYNC_STATUS_EVENT = "absolute:sync-status";
55
+ var schemaStateSymbol = () => Symbol.for(ABSOLUTE_MOBILE_SYNC_SCHEMA_STATE_KEY);
56
+ var readAbsoluteMobileSyncSchemaState = () => {
57
+ const value = Reflect.get(globalThis, schemaStateSymbol());
58
+ if (typeof value !== "object" || value === null)
59
+ return;
60
+ const state = Reflect.get(value, "state");
61
+ if (state === "preparing")
62
+ return { state };
63
+ if (state === "failed")
64
+ return schemaFailureState(value);
65
+ const minimumCompatibleVersion = Reflect.get(value, "minimumCompatibleVersion");
66
+ const storedVersion = Reflect.get(value, "storedVersion");
67
+ const targetVersion = Reflect.get(value, "targetVersion");
68
+ if (state !== "ready" || typeof minimumCompatibleVersion !== "number" || typeof storedVersion !== "number" || typeof targetVersion !== "number")
69
+ return;
70
+ return {
71
+ minimumCompatibleVersion,
72
+ state,
73
+ storedVersion,
74
+ targetVersion
75
+ };
76
+ };
77
+ var reportShellSchemaState = (state) => {
78
+ Reflect.set(globalThis, schemaStateSymbol(), state);
79
+ globalThis.dispatchEvent(new CustomEvent(ABSOLUTE_MOBILE_SYNC_SCHEMA_EVENT, { detail: state }));
80
+ };
81
+ var schemaFailureState = (error) => {
82
+ if (typeof error !== "object" || error === null)
83
+ return { code: "UNKNOWN", state: "failed" };
84
+ const rawCode = Reflect.get(error, "code");
85
+ const code = rawCode === "INVALID_PLAN" || rawCode === "MIGRATION_MISSING" || rawCode === "SCHEMA_TOO_NEW" || rawCode === "SCHEMA_TOO_OLD" ? rawCode : "UNKNOWN";
86
+ const storedVersion = Reflect.get(error, "storedVersion");
87
+ const targetVersion = Reflect.get(error, "targetVersion");
88
+ return {
89
+ code,
90
+ state: "failed",
91
+ ...typeof storedVersion === "number" ? { storedVersion } : {},
92
+ ...typeof targetVersion === "number" ? { targetVersion } : {}
93
+ };
94
+ };
95
+ var reportShellStatus = (status) => globalThis.dispatchEvent(new CustomEvent(ABSOLUTE_MOBILE_SYNC_STATUS_EVENT, { detail: status }));
96
+ var installAbsoluteMobileShellSync = (auth, config, options = {}) => {
97
+ const namespace = auth.principal?.namespace;
98
+ const store = namespace ? options.createStore?.({
99
+ protection: createCapacitorSyncProtection(),
100
+ storageSchema: config?.storageSchema
101
+ }) ?? createCapacitorSyncLocalStore({
102
+ protection: createCapacitorSyncProtection(),
103
+ storageSchema: config?.storageSchema
104
+ }) : undefined;
105
+ const installLifecycle = options.installLifecycle ?? installCapacitorSyncLifecycle;
106
+ const reportStatus = options.reportStatus ?? reportShellStatus;
107
+ const reportSchemaState = options.reportSchemaState ?? reportShellSchemaState;
108
+ const configureBackground = options.configureBackground ?? configureCapacitorBackgroundSync;
109
+ const clearBackground = options.clearBackground ?? (() => AbsoluteBackgroundSync.clear());
110
+ if (store?.getSchemaStatus) {
111
+ reportSchemaState({ state: "preparing" });
112
+ store.getSchemaStatus().then(reportSchemaState).catch((error) => reportSchemaState(schemaFailureState(error)));
113
+ }
114
+ if (namespace && config) {
115
+ configureBackground({
116
+ clientId: auth.clientId,
117
+ endpoint: config.background.endpoint,
118
+ intervalMinutes: config.background.intervalMinutes,
119
+ issuer: auth.issuer,
120
+ namespace
121
+ }).catch((error) => console.error("[Absolute Mobile] Background Sync configuration failed:", error));
122
+ } else {
123
+ clearBackground().catch(() => {
124
+ return;
125
+ });
126
+ }
127
+ const removeTransport = installSyncClientRuntimeTransport({
128
+ ...namespace && store ? { durable: { namespace, store } } : {},
129
+ socketTicket: auth.socketTicket,
130
+ registerClient: (client) => {
131
+ let active2 = true;
132
+ const removeStatus = client.subscribeStatus(reportStatus);
133
+ const reportLifecycleFailure = (error) => console.error("[Absolute Mobile] Sync lifecycle installation failed:", error);
134
+ const removal = installLifecycle({
135
+ client,
136
+ lifecycle,
137
+ network
138
+ }).catch((error) => {
139
+ reportLifecycleFailure(error);
140
+ return;
141
+ });
142
+ return () => {
143
+ if (!active2)
144
+ return;
145
+ active2 = false;
146
+ removeStatus();
147
+ removal.then((remove) => remove?.());
148
+ };
149
+ }
150
+ });
151
+ const removeRemediation = installAbsoluteMobileSyncRemediation();
152
+ const reload = options.reload ?? reloadShell;
153
+ const removePrincipalListener = auth.onPrincipalChange((principal) => {
154
+ if (principal?.namespace !== namespace)
155
+ reload();
156
+ });
157
+ let active = true;
158
+ return () => {
159
+ if (!active)
160
+ return;
161
+ active = false;
162
+ removePrincipalListener();
163
+ removeRemediation();
164
+ removeTransport();
165
+ };
166
+ };
167
+ export {
168
+ readAbsoluteMobileSyncSchemaState,
169
+ installAbsoluteMobileShellSync,
170
+ ABSOLUTE_MOBILE_SYNC_STATUS_EVENT,
171
+ ABSOLUTE_MOBILE_SYNC_SCHEMA_STATE_KEY,
172
+ ABSOLUTE_MOBILE_SYNC_SCHEMA_EVENT
173
+ };
@@ -941,6 +941,7 @@ var colors, MONTHS, formatTimestamp = () => {
941
941
  port,
942
942
  host,
943
943
  networkUrl,
944
+ mobilePreviewUrl,
944
945
  protocol = "http"
945
946
  } = options;
946
947
  const name = `${colors.cyan}${colors.bold}ABSOLUTEJS${colors.reset}`;
@@ -954,6 +955,9 @@ var colors, MONTHS, formatTimestamp = () => {
954
955
  if (networkUrl) {
955
956
  console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Network:${colors.reset} ${networkUrl}`);
956
957
  }
958
+ if (mobilePreviewUrl) {
959
+ console.log(` ${colors.green}\u279C${colors.reset} ${colors.bold}Mobile:${colors.reset} ${mobilePreviewUrl}`);
960
+ }
957
961
  console.log("");
958
962
  };
959
963
  var init_startupBanner = __esm(() => {
@@ -4910,5 +4914,5 @@ export {
4910
4914
  Island
4911
4915
  };
4912
4916
 
4913
- //# debugId=7CE6A5979AFA5A9664756E2164756E21
4917
+ //# debugId=D93F1B4F7925234C64756E2164756E21
4914
4918
  //# sourceMappingURL=index.js.map