vaderjs-native 1.0.36 → 1.0.38
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/LICENSE +21 -21
- package/bun.lock +48 -0
- package/cli/android/build.ts +378 -378
- package/cli/android/dev.ts +129 -129
- package/cli.ts +353 -279
- package/index.ts +494 -340
- package/jsconfig.json +6 -6
- package/main.ts +1002 -1026
- package/package.json +18 -18
- package/plugins/index.ts +63 -63
- /package/{README.MD → README.md} +0 -0
package/cli/android/dev.ts
CHANGED
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
import path from "path";
|
|
2
|
-
import { execSync, spawn } from "child_process";
|
|
3
|
-
import fsSync from "fs";
|
|
4
|
-
|
|
5
|
-
import { ensureAndroidInstalled } from "../../cli/android/sdk.js";
|
|
6
|
-
import { buildAndroid } from "../../cli/android/build.js";
|
|
7
|
-
import { logger } from "../../cli/logger.js";
|
|
8
|
-
import runDevServer from "../../cli/web/server.js";
|
|
9
|
-
import { loadConfig } from "../../main.js";
|
|
10
|
-
import { Config } from "../../config";
|
|
11
|
-
|
|
12
|
-
export async function androidDev() {
|
|
13
|
-
const config: Config = await loadConfig();
|
|
14
|
-
const { sdkPath, adbPath } = ensureAndroidInstalled();
|
|
15
|
-
|
|
16
|
-
const emulatorBin = path.join(
|
|
17
|
-
sdkPath,
|
|
18
|
-
"emulator",
|
|
19
|
-
process.platform === "win32" ? "emulator.exe" : "emulator"
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
// ----------------------------
|
|
23
|
-
// Start dev server
|
|
24
|
-
// ----------------------------
|
|
25
|
-
logger.info("Starting dev server...");
|
|
26
|
-
const devServerPromise = runDevServer();
|
|
27
|
-
|
|
28
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
29
|
-
|
|
30
|
-
// ----------------------------
|
|
31
|
-
// Build Android (dev)
|
|
32
|
-
// ----------------------------
|
|
33
|
-
await buildAndroid(true);
|
|
34
|
-
|
|
35
|
-
const appId = config.app?.id || "com.vaderjs.app";
|
|
36
|
-
const APK_PATH = path.join(process.cwd(), "build", `${appId}-debug.apk`);
|
|
37
|
-
|
|
38
|
-
if (!fsSync.existsSync(APK_PATH)) {
|
|
39
|
-
throw new Error(`APK not found at ${APK_PATH}`);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// ----------------------------
|
|
43
|
-
// Check connected devices
|
|
44
|
-
// ----------------------------
|
|
45
|
-
const getDevices = () =>
|
|
46
|
-
execSync(`"${adbPath}" devices`, { encoding: "utf8" })
|
|
47
|
-
.split("\n")
|
|
48
|
-
.map(l => l.trim())
|
|
49
|
-
.filter(l => l && !l.startsWith("List"))
|
|
50
|
-
.filter(l => l.includes("device") && !l.includes("offline"));
|
|
51
|
-
|
|
52
|
-
let devices = getDevices();
|
|
53
|
-
|
|
54
|
-
// ----------------------------
|
|
55
|
-
// List available AVDs
|
|
56
|
-
// ----------------------------
|
|
57
|
-
let emulators: string[] = [];
|
|
58
|
-
try {
|
|
59
|
-
emulators = execSync(`"${emulatorBin}" -list-avds`, { encoding: "utf8" })
|
|
60
|
-
.split("\n")
|
|
61
|
-
.map(e => e.trim())
|
|
62
|
-
.filter(Boolean);
|
|
63
|
-
} catch {
|
|
64
|
-
logger.warn("Could not list Android emulators");
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// ----------------------------
|
|
68
|
-
// Start emulator if needed
|
|
69
|
-
// ----------------------------
|
|
70
|
-
if (!devices.length && emulators.length > 0) {
|
|
71
|
-
const avd = emulators[0];
|
|
72
|
-
logger.warn(`No devices found, starting emulator: ${avd}`);
|
|
73
|
-
|
|
74
|
-
spawn(
|
|
75
|
-
emulatorBin,
|
|
76
|
-
["-avd", avd, "-netdelay", "none", "-netspeed", "full"],
|
|
77
|
-
{
|
|
78
|
-
detached: true,
|
|
79
|
-
stdio: "ignore",
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
// Wait for emulator to connect
|
|
84
|
-
logger.info("Waiting for emulator device...");
|
|
85
|
-
execSync(`"${adbPath}" wait-for-device`);
|
|
86
|
-
|
|
87
|
-
// Wait for Android to fully boot
|
|
88
|
-
logger.info("Waiting for Android to boot...");
|
|
89
|
-
execSync(
|
|
90
|
-
`"${adbPath}" shell while [ "$(getprop sys.boot_completed)" != "1" ]; do sleep 1; done`,
|
|
91
|
-
{ stdio: "inherit" }
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
logger.success("Emulator booted");
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
// ----------------------------
|
|
98
|
-
// Verify device exists
|
|
99
|
-
// ----------------------------
|
|
100
|
-
devices = getDevices();
|
|
101
|
-
if (!devices.length) {
|
|
102
|
-
throw new Error("No Android devices available");
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// ----------------------------
|
|
106
|
-
// Install APK
|
|
107
|
-
// ----------------------------
|
|
108
|
-
logger.step("Installing APK");
|
|
109
|
-
execSync(`"${adbPath}" install -r "${APK_PATH}"`, { stdio: "inherit" });
|
|
110
|
-
logger.success("APK installed");
|
|
111
|
-
|
|
112
|
-
// ----------------------------
|
|
113
|
-
// Launch app
|
|
114
|
-
// ----------------------------
|
|
115
|
-
const activity = `${appId}/.MainActivity`;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
logger.step("Launching app");
|
|
119
|
-
execSync(`"${adbPath}" shell am start -n "${activity}"`, {
|
|
120
|
-
stdio: "inherit",
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
logger.success("Android dev running 🚀 — HMR active");
|
|
124
|
-
|
|
125
|
-
// ----------------------------
|
|
126
|
-
// Keep dev server alive
|
|
127
|
-
// ----------------------------
|
|
128
|
-
await devServerPromise;
|
|
129
|
-
}
|
|
1
|
+
import path from "path";
|
|
2
|
+
import { execSync, spawn } from "child_process";
|
|
3
|
+
import fsSync from "fs";
|
|
4
|
+
|
|
5
|
+
import { ensureAndroidInstalled } from "../../cli/android/sdk.js";
|
|
6
|
+
import { buildAndroid } from "../../cli/android/build.js";
|
|
7
|
+
import { logger } from "../../cli/logger.js";
|
|
8
|
+
import runDevServer from "../../cli/web/server.js";
|
|
9
|
+
import { loadConfig } from "../../main.js";
|
|
10
|
+
import { Config } from "../../config";
|
|
11
|
+
|
|
12
|
+
export async function androidDev() {
|
|
13
|
+
const config: Config = await loadConfig();
|
|
14
|
+
const { sdkPath, adbPath } = ensureAndroidInstalled();
|
|
15
|
+
|
|
16
|
+
const emulatorBin = path.join(
|
|
17
|
+
sdkPath,
|
|
18
|
+
"emulator",
|
|
19
|
+
process.platform === "win32" ? "emulator.exe" : "emulator"
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
// ----------------------------
|
|
23
|
+
// Start dev server
|
|
24
|
+
// ----------------------------
|
|
25
|
+
logger.info("Starting dev server...");
|
|
26
|
+
const devServerPromise = runDevServer();
|
|
27
|
+
|
|
28
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
29
|
+
|
|
30
|
+
// ----------------------------
|
|
31
|
+
// Build Android (dev)
|
|
32
|
+
// ----------------------------
|
|
33
|
+
await buildAndroid(true);
|
|
34
|
+
|
|
35
|
+
const appId = config.app?.id || "com.vaderjs.app";
|
|
36
|
+
const APK_PATH = path.join(process.cwd(), "build", `${appId}-debug.apk`);
|
|
37
|
+
|
|
38
|
+
if (!fsSync.existsSync(APK_PATH)) {
|
|
39
|
+
throw new Error(`APK not found at ${APK_PATH}`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ----------------------------
|
|
43
|
+
// Check connected devices
|
|
44
|
+
// ----------------------------
|
|
45
|
+
const getDevices = () =>
|
|
46
|
+
execSync(`"${adbPath}" devices`, { encoding: "utf8" })
|
|
47
|
+
.split("\n")
|
|
48
|
+
.map(l => l.trim())
|
|
49
|
+
.filter(l => l && !l.startsWith("List"))
|
|
50
|
+
.filter(l => l.includes("device") && !l.includes("offline"));
|
|
51
|
+
|
|
52
|
+
let devices = getDevices();
|
|
53
|
+
|
|
54
|
+
// ----------------------------
|
|
55
|
+
// List available AVDs
|
|
56
|
+
// ----------------------------
|
|
57
|
+
let emulators: string[] = [];
|
|
58
|
+
try {
|
|
59
|
+
emulators = execSync(`"${emulatorBin}" -list-avds`, { encoding: "utf8" })
|
|
60
|
+
.split("\n")
|
|
61
|
+
.map(e => e.trim())
|
|
62
|
+
.filter(Boolean);
|
|
63
|
+
} catch {
|
|
64
|
+
logger.warn("Could not list Android emulators");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ----------------------------
|
|
68
|
+
// Start emulator if needed
|
|
69
|
+
// ----------------------------
|
|
70
|
+
if (!devices.length && emulators.length > 0) {
|
|
71
|
+
const avd = emulators[0];
|
|
72
|
+
logger.warn(`No devices found, starting emulator: ${avd}`);
|
|
73
|
+
|
|
74
|
+
spawn(
|
|
75
|
+
emulatorBin,
|
|
76
|
+
["-avd", avd, "-netdelay", "none", "-netspeed", "full"],
|
|
77
|
+
{
|
|
78
|
+
detached: true,
|
|
79
|
+
stdio: "ignore",
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// Wait for emulator to connect
|
|
84
|
+
logger.info("Waiting for emulator device...");
|
|
85
|
+
execSync(`"${adbPath}" wait-for-device`);
|
|
86
|
+
|
|
87
|
+
// Wait for Android to fully boot
|
|
88
|
+
logger.info("Waiting for Android to boot...");
|
|
89
|
+
execSync(
|
|
90
|
+
`"${adbPath}" shell while [ "$(getprop sys.boot_completed)" != "1" ]; do sleep 1; done`,
|
|
91
|
+
{ stdio: "inherit" }
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
logger.success("Emulator booted");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ----------------------------
|
|
98
|
+
// Verify device exists
|
|
99
|
+
// ----------------------------
|
|
100
|
+
devices = getDevices();
|
|
101
|
+
if (!devices.length) {
|
|
102
|
+
throw new Error("No Android devices available");
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ----------------------------
|
|
106
|
+
// Install APK
|
|
107
|
+
// ----------------------------
|
|
108
|
+
logger.step("Installing APK");
|
|
109
|
+
execSync(`"${adbPath}" install -r "${APK_PATH}"`, { stdio: "inherit" });
|
|
110
|
+
logger.success("APK installed");
|
|
111
|
+
|
|
112
|
+
// ----------------------------
|
|
113
|
+
// Launch app
|
|
114
|
+
// ----------------------------
|
|
115
|
+
const activity = `${appId}/.MainActivity`;
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
logger.step("Launching app");
|
|
119
|
+
execSync(`"${adbPath}" shell am start -n "${activity}"`, {
|
|
120
|
+
stdio: "inherit",
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
logger.success("Android dev running 🚀 — HMR active");
|
|
124
|
+
|
|
125
|
+
// ----------------------------
|
|
126
|
+
// Keep dev server alive
|
|
127
|
+
// ----------------------------
|
|
128
|
+
await devServerPromise;
|
|
129
|
+
}
|