@absolutejs/absolute 0.20.0-beta.27 → 0.20.0-beta.29
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/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/build.js +4 -2
- package/dist/build.js.map +3 -3
- package/dist/cli/index.js +69 -3
- package/dist/dev/client/hmrClient.ts +23 -0
- package/dist/index.js +94 -32
- package/dist/index.js.map +7 -6
- package/dist/mobile/index.js +134 -40
- package/dist/mobile/index.js.map +7 -6
- package/dist/mobile/shellBootstrap.js +12 -0
- package/dist/src/core/devBuild.d.ts +1 -0
- package/dist/src/core/prepare.d.ts +24 -0
- package/dist/src/mobile/androidUpgradeConformance.d.ts +47 -0
- package/dist/src/mobile/androidWebView.d.ts +1 -0
- package/dist/src/mobile/devDeviceAdapter.d.ts +3 -0
- package/dist/src/mobile/index.d.ts +1 -0
- package/dist/src/mobile/nativeTestReport.d.ts +3 -10
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -1814,6 +1814,7 @@ var ANDROID_BOOT_TIMEOUT_MS = 180000, ANDROID_BOOT_POLL_MS = 1000, DEV_JOURNAL_F
|
|
|
1814
1814
|
options.serial,
|
|
1815
1815
|
"install",
|
|
1816
1816
|
"-r",
|
|
1817
|
+
"-d",
|
|
1817
1818
|
installPath
|
|
1818
1819
|
], "Android app installation", options.run, { env: options.env, signal: options.signal });
|
|
1819
1820
|
const updated = androidInstalledPackageIdentity(options.project, options.serial, options.capture, options.env);
|
|
@@ -17460,6 +17461,19 @@ var CDP_COMMAND_TIMEOUT_MS = 1e4, WEBVIEW_ATTACH_TIMEOUT_MS = 30000, WEBVIEW_POL
|
|
|
17460
17461
|
await mkdir11(dirname28(absolutePath), { recursive: true });
|
|
17461
17462
|
await writeFile13(absolutePath, Buffer.from(data, "base64"));
|
|
17462
17463
|
return absolutePath;
|
|
17464
|
+
},
|
|
17465
|
+
tap: async (coordinateX, coordinateY) => {
|
|
17466
|
+
if (!Number.isFinite(coordinateX) || !Number.isFinite(coordinateY) || coordinateX < 0 || coordinateY < 0) {
|
|
17467
|
+
throw new TypeError("Android WebView tap coordinates must be finite non-negative numbers.");
|
|
17468
|
+
}
|
|
17469
|
+
await connection.command("Input.dispatchTouchEvent", {
|
|
17470
|
+
touchPoints: [{ x: coordinateX, y: coordinateY }],
|
|
17471
|
+
type: "touchStart"
|
|
17472
|
+
});
|
|
17473
|
+
await connection.command("Input.dispatchTouchEvent", {
|
|
17474
|
+
touchPoints: [],
|
|
17475
|
+
type: "touchEnd"
|
|
17476
|
+
});
|
|
17463
17477
|
}
|
|
17464
17478
|
};
|
|
17465
17479
|
}, failForward = (error, options, capture, hostPort) => {
|
|
@@ -17468,7 +17482,7 @@ var CDP_COMMAND_TIMEOUT_MS = 1e4, WEBVIEW_ATTACH_TIMEOUT_MS = 30000, WEBVIEW_POL
|
|
|
17468
17482
|
}, attachSocket = async (options, capture, fetcher, socket) => {
|
|
17469
17483
|
const hostPort = forwardSocket(options.adb, options.serial, socket, capture);
|
|
17470
17484
|
const targets = await readTargets(fetcher, hostPort).catch((error) => failForward(error, options, capture, hostPort));
|
|
17471
|
-
const target = selectTarget(targets);
|
|
17485
|
+
const target = selectTarget(targets.filter((candidate) => targetScore(candidate) >= 2));
|
|
17472
17486
|
if (!target) {
|
|
17473
17487
|
removeForward(options.adb, options.serial, hostPort, capture);
|
|
17474
17488
|
return;
|
|
@@ -18038,7 +18052,7 @@ var secretPattern, bearerPattern, coordinatePattern, sanitizeNativeReportText =
|
|
|
18038
18052
|
if (run.hmr)
|
|
18039
18053
|
hmrResult = run.hmr.outcome === "failed" ? "FAIL" : "PASS";
|
|
18040
18054
|
const routeDetails = run.routes?.length ? ` Routes: ${run.routes.join(", ")}.` : "";
|
|
18041
|
-
|
|
18055
|
+
const checks = [
|
|
18042
18056
|
{
|
|
18043
18057
|
details: `Captured host, toolchain, Bun, and AbsoluteJS metadata for ${target}.`,
|
|
18044
18058
|
id: "AUTO-SETUP-01",
|
|
@@ -18062,6 +18076,25 @@ var secretPattern, bearerPattern, coordinatePattern, sanitizeNativeReportText =
|
|
|
18062
18076
|
result: run.screenshot ? "PASS" : "FAIL"
|
|
18063
18077
|
}
|
|
18064
18078
|
];
|
|
18079
|
+
if (run.upgrade) {
|
|
18080
|
+
const { upgrade } = run;
|
|
18081
|
+
checks.push({
|
|
18082
|
+
details: `Android APK replacement ${upgrade.outcome === "pass" ? "preserved package identity" : "failed conformance"} in ${upgrade.installMs}ms. versionCode ${upgrade.before.versionCode ?? "unknown"} -> ${upgrade.after.versionCode ?? "unknown"}.`,
|
|
18083
|
+
id: "AUTO-UPGRADE-01",
|
|
18084
|
+
result: upgrade.outcome === "pass" ? "PASS" : "FAIL"
|
|
18085
|
+
}, {
|
|
18086
|
+
details: `Auth credential: ${upgrade.state.authCredential ? "preserved" : "missing"}; Sync database: ${upgrade.state.syncDatabase ? "preserved" : "missing"}; pending operations: ${upgrade.state.pendingOperations ? "preserved" : "missing"}.`,
|
|
18087
|
+
id: "AUTO-UPGRADE-02",
|
|
18088
|
+
result: Object.values(upgrade.state).every(Boolean) ? "PASS" : "FAIL"
|
|
18089
|
+
});
|
|
18090
|
+
if (upgrade.compatibility)
|
|
18091
|
+
checks.push({
|
|
18092
|
+
details: `N+1 ${upgrade.compatibility.nPlusOne}; N+2 ${upgrade.compatibility.nPlusTwo}; N+3 ${upgrade.compatibility.nPlusThree}; rollback ${upgrade.compatibility.rollback}.`,
|
|
18093
|
+
id: "AUTO-COMPAT-01",
|
|
18094
|
+
result: upgrade.compatibility.nPlusOne === "compatible" && upgrade.compatibility.nPlusTwo === "compatible" && upgrade.compatibility.nPlusThree === "upgrade-required" && upgrade.compatibility.rollback === "compatible" ? "PASS" : "FAIL"
|
|
18095
|
+
});
|
|
18096
|
+
}
|
|
18097
|
+
return checks;
|
|
18065
18098
|
}, createAbsoluteNativeTestReport = (options) => ({
|
|
18066
18099
|
automatedChecks: options.automatedChecks ?? createAbsoluteNativeAutomatedChecks(options.run),
|
|
18067
18100
|
generatedAt: options.generatedAt ?? new Date().toISOString(),
|
|
@@ -18242,7 +18275,32 @@ var init_androidTestReport = __esm(() => {
|
|
|
18242
18275
|
["CAP-01", "Complete automatic device-capability provisioning checks."],
|
|
18243
18276
|
[
|
|
18244
18277
|
"SYSUI-01",
|
|
18245
|
-
"
|
|
18278
|
+
"Confirm Keyboard and System Bars are provisioned automatically."
|
|
18279
|
+
],
|
|
18280
|
+
[
|
|
18281
|
+
"SYSUI-02",
|
|
18282
|
+
"Confirm the web fallback reports provider-neutral capabilities."
|
|
18283
|
+
],
|
|
18284
|
+
["SYSUI-03", "Confirm the real WebView selects the native adapters."],
|
|
18285
|
+
[
|
|
18286
|
+
"SYSUI-04",
|
|
18287
|
+
"Open and dismiss the native keyboard five times without stale state."
|
|
18288
|
+
],
|
|
18289
|
+
[
|
|
18290
|
+
"SYSUI-05",
|
|
18291
|
+
"Confirm light and dark foreground choices reach both Android system bars."
|
|
18292
|
+
],
|
|
18293
|
+
[
|
|
18294
|
+
"SYSUI-06",
|
|
18295
|
+
"Hide and restore system bars and confirm restored content remains inside the safe area."
|
|
18296
|
+
],
|
|
18297
|
+
[
|
|
18298
|
+
"SYSUI-07",
|
|
18299
|
+
"Rotate and relaunch while preserving the route and native adapters."
|
|
18300
|
+
],
|
|
18301
|
+
[
|
|
18302
|
+
"SYSUI-08",
|
|
18303
|
+
"Apply a System UI component edit through native HMR and record its timing."
|
|
18246
18304
|
],
|
|
18247
18305
|
[
|
|
18248
18306
|
"FILES-01",
|
|
@@ -18261,6 +18319,14 @@ var init_androidTestReport = __esm(() => {
|
|
|
18261
18319
|
"Complete online, offline, reconnect, isolation, and conflict checks."
|
|
18262
18320
|
],
|
|
18263
18321
|
["BGSYNC-01", "Complete WorkManager background Sync acceptance."],
|
|
18322
|
+
[
|
|
18323
|
+
"UPGRADE-01",
|
|
18324
|
+
"Install the next APK in place and confirm Auth, Sync SQLite, and pending operations survive."
|
|
18325
|
+
],
|
|
18326
|
+
[
|
|
18327
|
+
"COMPAT-01",
|
|
18328
|
+
"Confirm installed app N works with retained N+1/N+2 producers, shows typed update-required at N+3, and recovers after server rollback."
|
|
18329
|
+
],
|
|
18264
18330
|
["BUILD-01", "Pass release doctor and produce a signed AAB."],
|
|
18265
18331
|
[
|
|
18266
18332
|
"REPORT-01",
|
|
@@ -46,6 +46,29 @@ const isStringRecord = (value: unknown): value is Record<string, string> =>
|
|
|
46
46
|
Object.values(value).every((entry) => typeof entry === 'string');
|
|
47
47
|
|
|
48
48
|
restoreAbsoluteHmrApply();
|
|
49
|
+
const nativeDeviceAdapterPath = '/__absolute/native-device-adapter.js';
|
|
50
|
+
const nativeDeviceAdapterReady =
|
|
51
|
+
absoluteHmrClientTarget() === 'web'
|
|
52
|
+
? Promise.resolve()
|
|
53
|
+
: import(nativeDeviceAdapterPath).then(() => undefined);
|
|
54
|
+
Reflect.set(
|
|
55
|
+
globalThis,
|
|
56
|
+
'__ABS_NATIVE_DEVICES_READY__',
|
|
57
|
+
nativeDeviceAdapterReady
|
|
58
|
+
);
|
|
59
|
+
Reflect.set(globalThis, '__ABS_NATIVE_DEVICES_READY_STATE__', 'loading');
|
|
60
|
+
void nativeDeviceAdapterReady.then(
|
|
61
|
+
() => {
|
|
62
|
+
Reflect.set(globalThis, '__ABS_NATIVE_DEVICES_READY_STATE__', 'ready');
|
|
63
|
+
},
|
|
64
|
+
(error) => {
|
|
65
|
+
Reflect.set(globalThis, '__ABS_NATIVE_DEVICES_READY_STATE__', 'failed');
|
|
66
|
+
console.error(
|
|
67
|
+
'[Absolute Mobile] Native device adapter failed to load:',
|
|
68
|
+
error
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
);
|
|
49
72
|
const removeNativeSyncDevtools =
|
|
50
73
|
absoluteHmrClientTarget() === 'web'
|
|
51
74
|
? () => undefined
|
package/dist/index.js
CHANGED
|
@@ -29893,6 +29893,7 @@ var init_buildDepVendor = __esm(() => {
|
|
|
29893
29893
|
var exports_devBuild = {};
|
|
29894
29894
|
__export(exports_devBuild, {
|
|
29895
29895
|
devBuild: () => devBuild,
|
|
29896
|
+
collectDepVendorSourceDirs: () => collectDepVendorSourceDirs,
|
|
29896
29897
|
applyConfigChanges: () => applyConfigChanges
|
|
29897
29898
|
});
|
|
29898
29899
|
import { readdir as readdir6 } from "fs/promises";
|
|
@@ -29905,7 +29906,8 @@ var FRAMEWORK_DIR_KEYS, collectDepVendorSourceDirs = (config) => {
|
|
|
29905
29906
|
config.vueDirectory,
|
|
29906
29907
|
config.angularDirectory,
|
|
29907
29908
|
config.htmlDirectory,
|
|
29908
|
-
config.htmxDirectory
|
|
29909
|
+
config.htmxDirectory,
|
|
29910
|
+
resolve47(import.meta.dir, "../dev/client")
|
|
29909
29911
|
].filter((dir) => Boolean(dir));
|
|
29910
29912
|
return Array.from(new Set(configuredDirs));
|
|
29911
29913
|
}, parseDirectoryConfig = (source) => {
|
|
@@ -30905,6 +30907,53 @@ var init_requestInspector = __esm(() => {
|
|
|
30905
30907
|
}).as("global");
|
|
30906
30908
|
});
|
|
30907
30909
|
|
|
30910
|
+
// src/mobile/devDeviceAdapter.ts
|
|
30911
|
+
var exports_devDeviceAdapter = {};
|
|
30912
|
+
__export(exports_devDeviceAdapter, {
|
|
30913
|
+
buildAbsoluteNativeDevAdapter: () => buildAbsoluteNativeDevAdapter,
|
|
30914
|
+
absoluteNativeDevAdapterSource: () => absoluteNativeDevAdapterSource
|
|
30915
|
+
});
|
|
30916
|
+
import { mkdtemp as mkdtemp3, rm as rm15, writeFile as writeFile9 } from "fs/promises";
|
|
30917
|
+
import { join as join52 } from "path";
|
|
30918
|
+
import { tmpdir } from "os";
|
|
30919
|
+
var absoluteNativeDevAdapterSource = (projectRoot, mobile, resolveModule = (specifier) => specifier) => {
|
|
30920
|
+
const plan = resolveAbsoluteDeviceCapabilityPlan(projectRoot);
|
|
30921
|
+
const imports = plan.capabilities.map((name, index) => {
|
|
30922
|
+
const provider = plan.providers[name];
|
|
30923
|
+
if (!provider)
|
|
30924
|
+
throw new TypeError(`Missing device capability provider ${name}.`);
|
|
30925
|
+
return `import { ${provider.factory} as absoluteDeviceCapability${index} } from ${JSON.stringify(resolveModule(provider.module))};`;
|
|
30926
|
+
});
|
|
30927
|
+
const capabilities = plan.capabilities.map((name, index) => `${JSON.stringify(name)}: absoluteDeviceCapability${index}()`).join(", ");
|
|
30928
|
+
return [
|
|
30929
|
+
`import { installCapacitorDeviceAdapterIfNative } from ${JSON.stringify(resolveModule("@absolutejs/devices-capacitor"))};`,
|
|
30930
|
+
...imports,
|
|
30931
|
+
`installCapacitorDeviceAdapterIfNative({ storagePrefix: ${JSON.stringify(`absolutejs.${mobile.appId}.`)}${capabilities ? `, ${capabilities}` : ""} });`
|
|
30932
|
+
].join(`
|
|
30933
|
+
`);
|
|
30934
|
+
}, buildAbsoluteNativeDevAdapter = async (projectRoot, mobile) => {
|
|
30935
|
+
const temporaryDirectory = await mkdtemp3(join52(tmpdir(), "absolutejs-native-dev-adapter-"));
|
|
30936
|
+
const entry = join52(temporaryDirectory, "entry.ts");
|
|
30937
|
+
try {
|
|
30938
|
+
await writeFile9(entry, absoluteNativeDevAdapterSource(projectRoot, mobile, (specifier) => Bun.resolveSync(specifier, projectRoot)));
|
|
30939
|
+
const result = await Bun.build({
|
|
30940
|
+
entrypoints: [entry],
|
|
30941
|
+
format: "esm",
|
|
30942
|
+
minify: true,
|
|
30943
|
+
target: "browser"
|
|
30944
|
+
});
|
|
30945
|
+
if (!result.success || result.outputs.length !== 1) {
|
|
30946
|
+
throw new AggregateError(result.logs, "Failed to build the AbsoluteJS native development device adapter.");
|
|
30947
|
+
}
|
|
30948
|
+
return result.outputs[0]?.text() ?? "";
|
|
30949
|
+
} finally {
|
|
30950
|
+
await rm15(temporaryDirectory, { force: true, recursive: true });
|
|
30951
|
+
}
|
|
30952
|
+
};
|
|
30953
|
+
var init_devDeviceAdapter = __esm(() => {
|
|
30954
|
+
init_deviceCapabilities();
|
|
30955
|
+
});
|
|
30956
|
+
|
|
30908
30957
|
// src/core/prerender.ts
|
|
30909
30958
|
var exports_prerender = {};
|
|
30910
30959
|
__export(exports_prerender, {
|
|
@@ -30916,7 +30965,7 @@ __export(exports_prerender, {
|
|
|
30916
30965
|
PRERENDER_BYPASS_HEADER: () => PRERENDER_BYPASS_HEADER
|
|
30917
30966
|
});
|
|
30918
30967
|
import { mkdirSync as mkdirSync16, readFileSync as readFileSync34 } from "fs";
|
|
30919
|
-
import { join as
|
|
30968
|
+
import { join as join53 } from "path";
|
|
30920
30969
|
var SERVER_OUTPUT_LIMIT = 4000, STARTUP_POLL_INTERVAL_MS = 100, DEFAULT_STARTUP_TIMEOUT_MS = 30000, DEFAULT_FETCH_TIMEOUT_MS = 1e4, PRERENDER_BYPASS_HEADER = "X-Absolute-Prerender-Bypass", routeToFilename = (route) => route === "/" ? "index.html" : `${route.slice(1).replace(/\//g, "-")}.html`, writeTimestamp = async (htmlPath) => {
|
|
30921
30970
|
const metaPath = htmlPath.replace(/\.html$/, ".meta");
|
|
30922
30971
|
await Bun.write(metaPath, String(Date.now()));
|
|
@@ -30986,7 +31035,7 @@ var SERVER_OUTPUT_LIMIT = 4000, STARTUP_POLL_INTERVAL_MS = 100, DEFAULT_STARTUP_
|
|
|
30986
31035
|
if (!isCompleteHtml(html))
|
|
30987
31036
|
return false;
|
|
30988
31037
|
const fileName = routeToFilename(route);
|
|
30989
|
-
const filePath =
|
|
31038
|
+
const filePath = join53(prerenderDir, fileName);
|
|
30990
31039
|
await Bun.write(filePath, html);
|
|
30991
31040
|
await writeTimestamp(filePath);
|
|
30992
31041
|
return true;
|
|
@@ -31016,13 +31065,13 @@ var SERVER_OUTPUT_LIMIT = 4000, STARTUP_POLL_INTERVAL_MS = 100, DEFAULT_STARTUP_
|
|
|
31016
31065
|
return;
|
|
31017
31066
|
}
|
|
31018
31067
|
const fileName = routeToFilename(route);
|
|
31019
|
-
const filePath =
|
|
31068
|
+
const filePath = join53(prerenderDir, fileName);
|
|
31020
31069
|
await Bun.write(filePath, html);
|
|
31021
31070
|
await writeTimestamp(filePath);
|
|
31022
31071
|
result.routes.set(route, filePath);
|
|
31023
31072
|
log2?.(` Pre-rendered ${route} \u2192 ${fileName} (${html.length} bytes)`);
|
|
31024
31073
|
}, prerender = async (port, outDir, staticConfig, log2) => {
|
|
31025
|
-
const prerenderDir =
|
|
31074
|
+
const prerenderDir = join53(outDir, "_prerendered");
|
|
31026
31075
|
mkdirSync16(prerenderDir, { recursive: true });
|
|
31027
31076
|
const baseUrl = `http://localhost:${port}`;
|
|
31028
31077
|
let routes;
|
|
@@ -31148,7 +31197,7 @@ import {
|
|
|
31148
31197
|
watch as watch2
|
|
31149
31198
|
} from "fs";
|
|
31150
31199
|
import { createHash as createHash9 } from "crypto";
|
|
31151
|
-
import { dirname as dirname33, join as
|
|
31200
|
+
import { dirname as dirname33, join as join57, resolve as resolve50 } from "path";
|
|
31152
31201
|
var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETRY_DELAY_MS = 250, MAX_ENTRY_IMPORT_ATTEMPTS = 3, WATCH_FALLBACK_INTERVAL_MS = 250, ATOMIC_WRITE_TEMP_PATTERNS2, isAtomicWriteTemp = (filename) => filename.endsWith(".tmp") || filename.includes(".tmp.") || filename.endsWith("~") || filename.startsWith(".#") || filename.startsWith(".absolutejs-hmr-") || ATOMIC_WRITE_TEMP_PATTERNS2.some((pattern) => pattern.test(filename)), fileHash = (path) => {
|
|
31153
31202
|
try {
|
|
31154
31203
|
return createHash9("sha256").update(readFileSync38(path)).digest("hex");
|
|
@@ -31190,7 +31239,7 @@ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETR
|
|
|
31190
31239
|
let pendingEntryCause = null;
|
|
31191
31240
|
let siblingSequence = 0;
|
|
31192
31241
|
const importFreshEntry = async (attempt = 1) => {
|
|
31193
|
-
const siblingPath =
|
|
31242
|
+
const siblingPath = join57(entryDir, `.absolutejs-hmr-${process.pid}-${siblingSequence++}.ts`);
|
|
31194
31243
|
let failure;
|
|
31195
31244
|
try {
|
|
31196
31245
|
copyFileSync4(entryPath, siblingPath);
|
|
@@ -31303,7 +31352,7 @@ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETR
|
|
|
31303
31352
|
continue;
|
|
31304
31353
|
let st2;
|
|
31305
31354
|
try {
|
|
31306
|
-
st2 = statSync8(
|
|
31355
|
+
st2 = statSync8(join57(dir, entry.name));
|
|
31307
31356
|
} catch {
|
|
31308
31357
|
continue;
|
|
31309
31358
|
}
|
|
@@ -32172,7 +32221,7 @@ var handleHTMXPageRequest = async (pagePath, options = {}) => {
|
|
|
32172
32221
|
// src/core/prepare.ts
|
|
32173
32222
|
import { createHash as createHash8 } from "crypto";
|
|
32174
32223
|
import { existsSync as existsSync39, readdirSync as readdirSync10, readFileSync as readFileSync35 } from "fs";
|
|
32175
|
-
import { basename as basename18, join as
|
|
32224
|
+
import { basename as basename18, join as join54, relative as relative20, resolve as resolvePath4 } from "path";
|
|
32176
32225
|
import { Elysia as Elysia9, NotFound } from "elysia";
|
|
32177
32226
|
|
|
32178
32227
|
// src/plugins/openApiPlugin.ts
|
|
@@ -32613,6 +32662,10 @@ var applyMobileCorsHeaders = (response, origin) => {
|
|
|
32613
32662
|
response.headers.append("vary", "Origin");
|
|
32614
32663
|
return response;
|
|
32615
32664
|
};
|
|
32665
|
+
var finalizeMobileResponse = (request, response) => {
|
|
32666
|
+
const origin = mobileWebViewOrigin(request);
|
|
32667
|
+
return origin ? applyMobileCorsHeaders(response, origin) : response;
|
|
32668
|
+
};
|
|
32616
32669
|
var mobilePreflightResponse = (request) => {
|
|
32617
32670
|
if (request.method !== "OPTIONS")
|
|
32618
32671
|
return;
|
|
@@ -32670,23 +32723,24 @@ var createAbsoluteMobileCompatibilityDispatcher = (options) => {
|
|
|
32670
32723
|
return;
|
|
32671
32724
|
const resolved = resolveAbsoluteMobileCompatibilityRelease(parsed.client, artifacts);
|
|
32672
32725
|
if (resolved.kind === "upgrade-required") {
|
|
32673
|
-
return createAbsoluteMobileUpgradeResponse(resolved.result);
|
|
32726
|
+
return finalizeMobileResponse(request, createAbsoluteMobileUpgradeResponse(resolved.result));
|
|
32674
32727
|
}
|
|
32675
32728
|
if (!artifactOwnsRequest(resolved.artifact, parsed.client.pageId, request)) {
|
|
32676
|
-
return createAbsoluteMobileInvalidRequestResponse("The requested URL is not assigned to this mobile page.");
|
|
32729
|
+
return finalizeMobileResponse(request, createAbsoluteMobileInvalidRequestResponse("The requested URL is not assigned to this mobile page."));
|
|
32677
32730
|
}
|
|
32678
32731
|
if (resolved.artifact.releaseId === options.currentReleaseId) {
|
|
32679
32732
|
return;
|
|
32680
32733
|
}
|
|
32681
32734
|
try {
|
|
32682
32735
|
const producer = await resolveProducer(resolved.artifact);
|
|
32683
|
-
|
|
32736
|
+
const response = await runWithAbsoluteMobileProducer({
|
|
32684
32737
|
page: resolved.page,
|
|
32685
32738
|
releaseId: resolved.artifact.releaseId
|
|
32686
32739
|
}, () => producer.handle(request));
|
|
32740
|
+
return finalizeMobileResponse(request, response);
|
|
32687
32741
|
} catch (error) {
|
|
32688
32742
|
console.error(`[Mobile] Failed to load retained producer ${resolved.artifact.releaseId}:`, error);
|
|
32689
|
-
return createAbsoluteMobilePageErrorResponse(parsed.client.pageId);
|
|
32743
|
+
return finalizeMobileResponse(request, createAbsoluteMobilePageErrorResponse(parsed.client.pageId));
|
|
32690
32744
|
}
|
|
32691
32745
|
}).afterHandle("global", ({ request, responseValue }) => {
|
|
32692
32746
|
const origin = mobileWebViewOrigin(request);
|
|
@@ -33574,7 +33628,7 @@ var registerIconVersioning = (buildDir) => {
|
|
|
33574
33628
|
if (cached !== undefined)
|
|
33575
33629
|
return cached;
|
|
33576
33630
|
const path = href.split("?")[0] ?? href;
|
|
33577
|
-
const filePath =
|
|
33631
|
+
const filePath = join54(buildDir, path);
|
|
33578
33632
|
let versioned = href;
|
|
33579
33633
|
if (existsSync39(filePath)) {
|
|
33580
33634
|
const hash = createHash8("sha256").update(readFileSync35(filePath)).digest("hex").slice(0, ICON_HASH_LENGTH);
|
|
@@ -33667,12 +33721,20 @@ var prepareDev = async (config, buildDir) => {
|
|
|
33667
33721
|
const { requestInspector: requestInspector2 } = await Promise.resolve().then(() => (init_requestInspector(), exports_requestInspector));
|
|
33668
33722
|
const { serverTiming } = await import("@elysia/server-timing");
|
|
33669
33723
|
const mobileAssociationPlugin = createAbsoluteMobileAssociationPlugin(config.mobile, process.cwd());
|
|
33724
|
+
const nativeMobileConfig = config.mobile;
|
|
33725
|
+
let nativeDevAdapterBundle;
|
|
33726
|
+
const getNativeDevAdapterBundle = () => nativeDevAdapterBundle ??= nativeMobileConfig ? Promise.resolve().then(() => (init_devDeviceAdapter(), exports_devDeviceAdapter)).then(({ buildAbsoluteNativeDevAdapter: buildAbsoluteNativeDevAdapter2 }) => buildAbsoluteNativeDevAdapter2(process.cwd(), nativeMobileConfig)) : Promise.resolve("export {};");
|
|
33670
33727
|
const absolutejs = new Elysia9({ name: "absolutejs-runtime" }).use(requestInspector2).use(absoluteRequestContext).use(serverTiming()).use(devtoolsJson2(buildDir, {
|
|
33671
33728
|
normalizeForWindowsContainer: config.dev?.devtools?.normalizeForWindowsContainer,
|
|
33672
33729
|
projectRoot: config.dev?.devtools?.projectRoot,
|
|
33673
33730
|
uuid: config.dev?.devtools?.uuid,
|
|
33674
33731
|
uuidCachePath: config.dev?.devtools?.uuidCachePath
|
|
33675
|
-
})).use(imageOptimizer2(config.images, buildDir)).use(mobileAssociationPlugin).
|
|
33732
|
+
})).use(imageOptimizer2(config.images, buildDir)).use(mobileAssociationPlugin).get("/__absolute/native-device-adapter.js", async () => new Response(await getNativeDevAdapterBundle(), {
|
|
33733
|
+
headers: {
|
|
33734
|
+
"Cache-Control": "no-store",
|
|
33735
|
+
"Content-Type": "text/javascript; charset=utf-8"
|
|
33736
|
+
}
|
|
33737
|
+
})).use(await mountStaticPlugin(staticPlugin, {
|
|
33676
33738
|
alwaysStatic: true,
|
|
33677
33739
|
assets: buildDir,
|
|
33678
33740
|
directive: "no-cache",
|
|
@@ -33704,13 +33766,13 @@ var loadPrerenderMap = (prerenderDir) => {
|
|
|
33704
33766
|
continue;
|
|
33705
33767
|
const name = basename18(entry, ".html");
|
|
33706
33768
|
const route = name === "index" ? "/" : `/${name}`;
|
|
33707
|
-
map.set(route,
|
|
33769
|
+
map.set(route, join54(prerenderDir, entry));
|
|
33708
33770
|
}
|
|
33709
33771
|
return map;
|
|
33710
33772
|
};
|
|
33711
33773
|
var loadMobileCompatibilityPlugin = async (buildDir) => {
|
|
33712
|
-
const root =
|
|
33713
|
-
if (!existsSync39(
|
|
33774
|
+
const root = join54(buildDir, ".absolutejs", "mobile-compatibility");
|
|
33775
|
+
if (!existsSync39(join54(root, "current.json"))) {
|
|
33714
33776
|
return new Elysia9({ name: "absolutejs-mobile-compatibility-empty" });
|
|
33715
33777
|
}
|
|
33716
33778
|
const options = await loadAbsoluteMobileMaterializedBundle(root);
|
|
@@ -33771,12 +33833,12 @@ var prepare = async (configOrPath) => {
|
|
|
33771
33833
|
setCurrentPageIslandMetadata(await loadPageIslandMetadata(config));
|
|
33772
33834
|
recordStep("load production manifest and island metadata", stepStartedAt);
|
|
33773
33835
|
stepStartedAt = performance.now();
|
|
33774
|
-
const conventionsPath =
|
|
33836
|
+
const conventionsPath = join54(buildDir, "conventions.json");
|
|
33775
33837
|
if (existsSync39(conventionsPath)) {
|
|
33776
33838
|
const conventions2 = JSON.parse(readFileSync35(conventionsPath, "utf-8"));
|
|
33777
33839
|
setConventions(conventions2);
|
|
33778
33840
|
}
|
|
33779
|
-
const spaRoutesPath =
|
|
33841
|
+
const spaRoutesPath = join54(buildDir, "spa-routes.json");
|
|
33780
33842
|
if (existsSync39(spaRoutesPath)) {
|
|
33781
33843
|
setSpaRouteManifest(JSON.parse(readFileSync35(spaRoutesPath, "utf-8")));
|
|
33782
33844
|
}
|
|
@@ -33789,7 +33851,7 @@ var prepare = async (configOrPath) => {
|
|
|
33789
33851
|
prefix: "",
|
|
33790
33852
|
staticLimit: MAX_STATIC_ROUTE_COUNT
|
|
33791
33853
|
});
|
|
33792
|
-
const generatedAssetsRoot =
|
|
33854
|
+
const generatedAssetsRoot = join54(buildDir, ".absolutejs");
|
|
33793
33855
|
const generatedAssetsPlugin = new Elysia9({
|
|
33794
33856
|
name: "absolutejs-generated-assets"
|
|
33795
33857
|
}).get("/.absolutejs/*", async ({ params, set }) => {
|
|
@@ -33827,7 +33889,7 @@ var prepare = async (configOrPath) => {
|
|
|
33827
33889
|
responseValue.headers.set("cache-control", isFingerprintedAsset(pathname) ? "public, max-age=31536000, immutable" : "public, max-age=0, must-revalidate");
|
|
33828
33890
|
});
|
|
33829
33891
|
stepStartedAt = performance.now();
|
|
33830
|
-
const prerenderDir =
|
|
33892
|
+
const prerenderDir = join54(buildDir, "_prerendered");
|
|
33831
33893
|
const prerenderMap = loadPrerenderMap(prerenderDir);
|
|
33832
33894
|
const mobileCompatibilityPlugin = await loadMobileCompatibilityPlugin(buildDir);
|
|
33833
33895
|
const mobileAssociationPlugin = createAbsoluteMobileAssociationPlugin(config.mobile, process.cwd(), { requireAll: true });
|
|
@@ -33900,10 +33962,10 @@ import {
|
|
|
33900
33962
|
readFileSync as readFileSync36,
|
|
33901
33963
|
rmSync as rmSync4
|
|
33902
33964
|
} from "fs";
|
|
33903
|
-
import { join as
|
|
33904
|
-
var CERT_DIR =
|
|
33905
|
-
var CERT_PATH =
|
|
33906
|
-
var KEY_PATH =
|
|
33965
|
+
import { join as join55 } from "path";
|
|
33966
|
+
var CERT_DIR = join55(process.cwd(), ".absolutejs");
|
|
33967
|
+
var CERT_PATH = join55(CERT_DIR, "cert.pem");
|
|
33968
|
+
var KEY_PATH = join55(CERT_DIR, "key.pem");
|
|
33907
33969
|
var CERT_VALIDITY_DAYS = 365;
|
|
33908
33970
|
var devLog = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[36m[dev]\x1B[0m ${msg}`);
|
|
33909
33971
|
var devWarn = (msg) => console.log(`\x1B[2m${new Date().toLocaleTimeString()}\x1B[0m \x1B[33m[dev]\x1B[0m \x1B[33m${msg}\x1B[0m`);
|
|
@@ -34023,12 +34085,12 @@ import {
|
|
|
34023
34085
|
writeFileSync as writeFileSync11
|
|
34024
34086
|
} from "fs";
|
|
34025
34087
|
import { homedir as homedir2 } from "os";
|
|
34026
|
-
import { basename as basename19, join as
|
|
34088
|
+
import { basename as basename19, join as join56 } from "path";
|
|
34027
34089
|
var registeredPids = new Set;
|
|
34028
34090
|
var exitHandlerRegistered = false;
|
|
34029
|
-
var instanceFilePath = (pid) =>
|
|
34030
|
-
var instanceLogPath = (pid) =>
|
|
34031
|
-
var instanceRegistryDir = () =>
|
|
34091
|
+
var instanceFilePath = (pid) => join56(instanceRegistryDir(), `${pid}.json`);
|
|
34092
|
+
var instanceLogPath = (pid) => join56(instanceRegistryDir(), `${pid}.log`);
|
|
34093
|
+
var instanceRegistryDir = () => join56(homedir2(), ".absolutejs", "instances");
|
|
34032
34094
|
var removeInstanceFilesSync = (pid) => {
|
|
34033
34095
|
try {
|
|
34034
34096
|
unlinkSync2(instanceFilePath(pid));
|
|
@@ -34063,7 +34125,7 @@ var registerInstance = (record) => {
|
|
|
34063
34125
|
return record;
|
|
34064
34126
|
};
|
|
34065
34127
|
var resolveProjectName = (cwd2) => {
|
|
34066
|
-
const parsed = readJsonFile(
|
|
34128
|
+
const parsed = readJsonFile(join56(cwd2, "package.json"));
|
|
34067
34129
|
if (parsed !== null && typeof parsed === "object" && typeof parsed.name === "string" && parsed.name.trim().length > 0) {
|
|
34068
34130
|
return parsed.name;
|
|
34069
34131
|
}
|
|
@@ -40721,5 +40783,5 @@ export {
|
|
|
40721
40783
|
ANGULAR_INIT_TIMEOUT_MS
|
|
40722
40784
|
};
|
|
40723
40785
|
|
|
40724
|
-
//# debugId=
|
|
40786
|
+
//# debugId=BA41AA624E4BADC564756E2164756E21
|
|
40725
40787
|
//# sourceMappingURL=index.js.map
|