@jetstart/cli 1.2.0 → 1.4.0
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/cli.js +18 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/android-emulator.d.ts +8 -0
- package/dist/commands/android-emulator.d.ts.map +1 -0
- package/dist/commands/android-emulator.js +280 -0
- package/dist/commands/android-emulator.js.map +1 -0
- package/dist/commands/create.d.ts +1 -6
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +119 -0
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/dev.d.ts +1 -7
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +69 -10
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/index.d.ts +2 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +5 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/install-audit.d.ts +9 -0
- package/dist/commands/install-audit.d.ts.map +1 -0
- package/dist/commands/install-audit.js +185 -0
- package/dist/commands/install-audit.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/android-sdk.d.ts +81 -0
- package/dist/utils/android-sdk.d.ts.map +1 -0
- package/dist/utils/android-sdk.js +432 -0
- package/dist/utils/android-sdk.js.map +1 -0
- package/dist/utils/downloader.d.ts +35 -0
- package/dist/utils/downloader.d.ts.map +1 -0
- package/dist/utils/downloader.js +214 -0
- package/dist/utils/downloader.js.map +1 -0
- package/dist/utils/emulator-deployer.d.ts +29 -0
- package/dist/utils/emulator-deployer.d.ts.map +1 -0
- package/dist/utils/emulator-deployer.js +224 -0
- package/dist/utils/emulator-deployer.js.map +1 -0
- package/dist/utils/emulator.d.ts +101 -0
- package/dist/utils/emulator.d.ts.map +1 -0
- package/dist/utils/emulator.js +410 -0
- package/dist/utils/emulator.js.map +1 -0
- package/dist/utils/java.d.ts +25 -0
- package/dist/utils/java.d.ts.map +1 -0
- package/dist/utils/java.js +363 -0
- package/dist/utils/java.js.map +1 -0
- package/dist/utils/system-tools.d.ts +93 -0
- package/dist/utils/system-tools.d.ts.map +1 -0
- package/dist/utils/system-tools.js +599 -0
- package/dist/utils/system-tools.js.map +1 -0
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +777 -748
- package/dist/utils/template.js.map +1 -1
- package/package.json +7 -3
- package/src/cli.ts +20 -2
- package/src/commands/android-emulator.ts +304 -0
- package/src/commands/create.ts +128 -5
- package/src/commands/dev.ts +71 -18
- package/src/commands/index.ts +3 -1
- package/src/commands/install-audit.ts +227 -0
- package/src/types/index.ts +30 -0
- package/src/utils/android-sdk.ts +478 -0
- package/src/utils/downloader.ts +201 -0
- package/src/utils/emulator-deployer.ts +210 -0
- package/src/utils/emulator.ts +463 -0
- package/src/utils/java.ts +369 -0
- package/src/utils/system-tools.ts +648 -0
- package/src/utils/template.ts +875 -867
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Android SDK Manager wrapper
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.AndroidSDKManager = exports.REQUIRED_SDK_COMPONENTS = void 0;
|
|
40
|
+
exports.createSDKManager = createSDKManager;
|
|
41
|
+
const child_process_1 = require("child_process");
|
|
42
|
+
const fs = __importStar(require("fs-extra"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const os = __importStar(require("os"));
|
|
45
|
+
const downloader_1 = require("./downloader");
|
|
46
|
+
const system_tools_1 = require("./system-tools");
|
|
47
|
+
const spinner_1 = require("./spinner");
|
|
48
|
+
const logger_1 = require("./logger");
|
|
49
|
+
/**
|
|
50
|
+
* Required SDK components for JetStart
|
|
51
|
+
*/
|
|
52
|
+
exports.REQUIRED_SDK_COMPONENTS = [
|
|
53
|
+
'platform-tools', // adb, fastboot
|
|
54
|
+
'platforms;android-34', // Target API
|
|
55
|
+
'platforms;android-24', // Minimum API
|
|
56
|
+
'build-tools;34.0.0', // Latest build tools
|
|
57
|
+
'emulator', // Android Emulator
|
|
58
|
+
'system-images;android-34;google_apis;x86_64', // For AVD
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* Android cmdline-tools download URLs
|
|
62
|
+
*/
|
|
63
|
+
const CMDLINE_TOOLS_URLS = {
|
|
64
|
+
win32: 'https://dl.google.com/android/repository/commandlinetools-win-11076708_latest.zip',
|
|
65
|
+
darwin: 'https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip',
|
|
66
|
+
linux: 'https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip',
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Android SDK Manager class
|
|
70
|
+
*/
|
|
71
|
+
class AndroidSDKManager {
|
|
72
|
+
sdkRoot;
|
|
73
|
+
constructor(sdkRoot) {
|
|
74
|
+
this.sdkRoot = sdkRoot || '';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Initialize SDK root, detecting or creating as needed
|
|
78
|
+
*/
|
|
79
|
+
async ensureSDKRoot() {
|
|
80
|
+
if (this.sdkRoot && await fs.pathExists(this.sdkRoot)) {
|
|
81
|
+
return this.sdkRoot;
|
|
82
|
+
}
|
|
83
|
+
// Try to find existing SDK
|
|
84
|
+
const existingSDK = await (0, system_tools_1.findAndroidSDK)();
|
|
85
|
+
if (existingSDK) {
|
|
86
|
+
this.sdkRoot = existingSDK;
|
|
87
|
+
return this.sdkRoot;
|
|
88
|
+
}
|
|
89
|
+
// Create new SDK at default location
|
|
90
|
+
this.sdkRoot = (0, system_tools_1.getDefaultSDKPath)();
|
|
91
|
+
await fs.ensureDir(this.sdkRoot);
|
|
92
|
+
(0, logger_1.info)(`Creating Android SDK at: ${this.sdkRoot}`);
|
|
93
|
+
return this.sdkRoot;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Install Android cmdline-tools
|
|
97
|
+
*/
|
|
98
|
+
async installCmdlineTools() {
|
|
99
|
+
const sdkRoot = await this.ensureSDKRoot();
|
|
100
|
+
const platform = os.platform();
|
|
101
|
+
const url = CMDLINE_TOOLS_URLS[platform];
|
|
102
|
+
if (!url) {
|
|
103
|
+
throw new Error(`Unsupported platform: ${platform}`);
|
|
104
|
+
}
|
|
105
|
+
const extractPath = path.join(sdkRoot, 'cmdline-tools');
|
|
106
|
+
const latestPath = path.join(extractPath, 'latest');
|
|
107
|
+
// Check if already installed
|
|
108
|
+
if (await fs.pathExists(latestPath)) {
|
|
109
|
+
(0, logger_1.success)('Android cmdline-tools already installed');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Download and extract
|
|
113
|
+
await (0, downloader_1.downloadAndExtract)(url, extractPath, 'Downloading Android cmdline-tools');
|
|
114
|
+
// The extracted folder is named 'cmdline-tools', need to move it to 'latest'
|
|
115
|
+
const extractedPath = path.join(extractPath, 'cmdline-tools');
|
|
116
|
+
if (await fs.pathExists(extractedPath)) {
|
|
117
|
+
await fs.move(extractedPath, latestPath);
|
|
118
|
+
}
|
|
119
|
+
// Set environment variables for this process
|
|
120
|
+
process.env.ANDROID_HOME = sdkRoot;
|
|
121
|
+
process.env.ANDROID_SDK_ROOT = sdkRoot;
|
|
122
|
+
(0, logger_1.success)('Android cmdline-tools installed');
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get path to sdkmanager executable
|
|
126
|
+
*/
|
|
127
|
+
getSDKManagerPath() {
|
|
128
|
+
const sdkmanagerName = os.platform() === 'win32' ? 'sdkmanager.bat' : 'sdkmanager';
|
|
129
|
+
return path.join(this.sdkRoot, 'cmdline-tools', 'latest', 'bin', sdkmanagerName);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get path to avdmanager executable
|
|
133
|
+
*/
|
|
134
|
+
getAVDManagerPath() {
|
|
135
|
+
const avdmanagerName = os.platform() === 'win32' ? 'avdmanager.bat' : 'avdmanager';
|
|
136
|
+
return path.join(this.sdkRoot, 'cmdline-tools', 'latest', 'bin', avdmanagerName);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Run sdkmanager command
|
|
140
|
+
*/
|
|
141
|
+
async runSDKManager(args, onProgress) {
|
|
142
|
+
const sdkmanagerPath = this.getSDKManagerPath();
|
|
143
|
+
if (!(await fs.pathExists(sdkmanagerPath))) {
|
|
144
|
+
throw new Error('sdkmanager not found. Install cmdline-tools first.');
|
|
145
|
+
}
|
|
146
|
+
return new Promise((resolve, reject) => {
|
|
147
|
+
const proc = (0, child_process_1.spawn)(sdkmanagerPath, args, {
|
|
148
|
+
env: {
|
|
149
|
+
...process.env,
|
|
150
|
+
ANDROID_HOME: this.sdkRoot,
|
|
151
|
+
ANDROID_SDK_ROOT: this.sdkRoot,
|
|
152
|
+
// Accept licenses automatically
|
|
153
|
+
JAVA_OPTS: '-Dcom.android.sdkmanager.toolsdir=' +
|
|
154
|
+
path.join(this.sdkRoot, 'cmdline-tools', 'latest'),
|
|
155
|
+
},
|
|
156
|
+
shell: true,
|
|
157
|
+
});
|
|
158
|
+
let output = '';
|
|
159
|
+
let errorOutput = '';
|
|
160
|
+
proc.stdout?.on('data', (data) => {
|
|
161
|
+
output += data.toString();
|
|
162
|
+
});
|
|
163
|
+
// Parse stderr for progress updates
|
|
164
|
+
proc.stderr?.on('data', (data) => {
|
|
165
|
+
const text = data.toString();
|
|
166
|
+
errorOutput += text;
|
|
167
|
+
if (onProgress) {
|
|
168
|
+
// Parse progress percentage: "10% ▋...................."
|
|
169
|
+
const progressMatch = text.match(/(\d+)%/);
|
|
170
|
+
if (progressMatch) {
|
|
171
|
+
const percent = parseInt(progressMatch[1], 10);
|
|
172
|
+
// Extract current operation
|
|
173
|
+
const lines = text.split('\n');
|
|
174
|
+
const currentOp = lines.find((l) => l.includes('Downloading') ||
|
|
175
|
+
l.includes('Installing') ||
|
|
176
|
+
l.includes('Extracting') ||
|
|
177
|
+
l.includes('Unzipping')) || 'Processing...';
|
|
178
|
+
onProgress(percent, currentOp.trim());
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
proc.on('close', (code) => {
|
|
183
|
+
if (code === 0) {
|
|
184
|
+
resolve(output);
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
reject(new Error(`sdkmanager exited with code ${code}: ${errorOutput}`));
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
proc.on('error', (err) => {
|
|
191
|
+
reject(err);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Accept all SDK licenses
|
|
197
|
+
*/
|
|
198
|
+
async acceptLicenses() {
|
|
199
|
+
const spinner = (0, spinner_1.startSpinner)('Accepting SDK licenses...');
|
|
200
|
+
try {
|
|
201
|
+
const sdkmanagerPath = this.getSDKManagerPath();
|
|
202
|
+
// Add path validation (like runSDKManager does)
|
|
203
|
+
if (!(await fs.pathExists(sdkmanagerPath))) {
|
|
204
|
+
throw new Error('sdkmanager not found. Install cmdline-tools first.');
|
|
205
|
+
}
|
|
206
|
+
await new Promise((resolve, reject) => {
|
|
207
|
+
const proc = (0, child_process_1.spawn)(sdkmanagerPath, ['--licenses'], {
|
|
208
|
+
env: {
|
|
209
|
+
...process.env,
|
|
210
|
+
ANDROID_HOME: this.sdkRoot,
|
|
211
|
+
ANDROID_SDK_ROOT: this.sdkRoot,
|
|
212
|
+
// ADD MISSING JAVA_OPTS (critical fix)
|
|
213
|
+
JAVA_OPTS: '-Dcom.android.sdkmanager.toolsdir=' +
|
|
214
|
+
path.join(this.sdkRoot, 'cmdline-tools', 'latest'),
|
|
215
|
+
},
|
|
216
|
+
// ADD explicit stdio configuration
|
|
217
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
218
|
+
shell: true,
|
|
219
|
+
});
|
|
220
|
+
// Check if stdin is writable before writing
|
|
221
|
+
if (proc.stdin) {
|
|
222
|
+
const success = proc.stdin.write('y\n'.repeat(100));
|
|
223
|
+
if (!success) {
|
|
224
|
+
// Handle backpressure - wait for drain
|
|
225
|
+
proc.stdin.once('drain', () => {
|
|
226
|
+
proc.stdin?.end();
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
proc.stdin.end();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
reject(new Error('stdin not available'));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
// Collect stderr for debugging
|
|
238
|
+
let errorOutput = '';
|
|
239
|
+
proc.stderr?.on('data', (data) => {
|
|
240
|
+
errorOutput += data.toString();
|
|
241
|
+
});
|
|
242
|
+
proc.on('close', (code) => {
|
|
243
|
+
if (code === 0 || code === null) {
|
|
244
|
+
resolve();
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
reject(new Error(`Failed to accept licenses: exit code ${code}\n${errorOutput}`));
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
proc.on('error', (err) => {
|
|
251
|
+
reject(err);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
(0, spinner_1.stopSpinner)(spinner, true, 'SDK licenses accepted');
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
(0, spinner_1.stopSpinner)(spinner, false, 'Failed to accept licenses');
|
|
258
|
+
throw error;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Install an SDK component
|
|
263
|
+
*/
|
|
264
|
+
async installComponent(component, progressLabel) {
|
|
265
|
+
const label = progressLabel || `Installing ${component}`;
|
|
266
|
+
const spinner = (0, spinner_1.startSpinner)(label);
|
|
267
|
+
try {
|
|
268
|
+
// Accept licenses first
|
|
269
|
+
await this.acceptLicenses();
|
|
270
|
+
// Install component with progress updates
|
|
271
|
+
await this.runSDKManager(['--install', component], (percent, message) => {
|
|
272
|
+
// Update spinner text with progress
|
|
273
|
+
spinner.text = `${label} (${percent}%) - ${message}`;
|
|
274
|
+
});
|
|
275
|
+
(0, spinner_1.stopSpinner)(spinner, true, `${component} installed`);
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
(0, spinner_1.stopSpinner)(spinner, false, `Failed to install ${component}`);
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* List installed SDK components
|
|
284
|
+
*/
|
|
285
|
+
async listInstalled() {
|
|
286
|
+
try {
|
|
287
|
+
const output = await this.runSDKManager(['--list_installed']);
|
|
288
|
+
return this.parseSDKList(output);
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
return [];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Parse sdkmanager list output
|
|
296
|
+
*/
|
|
297
|
+
parseSDKList(output) {
|
|
298
|
+
const components = [];
|
|
299
|
+
const lines = output.split('\n');
|
|
300
|
+
for (const line of lines) {
|
|
301
|
+
// Example: "build-tools;34.0.0 | 34.0.0 | Android SDK Build-Tools 34"
|
|
302
|
+
const match = line.match(/^([^|]+)\|([^|]+)\|(.+)$/);
|
|
303
|
+
if (match) {
|
|
304
|
+
const name = match[1].trim();
|
|
305
|
+
const version = match[2].trim();
|
|
306
|
+
components.push({
|
|
307
|
+
name,
|
|
308
|
+
version,
|
|
309
|
+
path: path.join(this.sdkRoot, name.replace(/;/g, path.sep)),
|
|
310
|
+
installed: true,
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return components;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Update all installed components
|
|
318
|
+
*/
|
|
319
|
+
async updateAll() {
|
|
320
|
+
const spinner = (0, spinner_1.startSpinner)('Updating SDK components...');
|
|
321
|
+
try {
|
|
322
|
+
await this.runSDKManager(['--update']);
|
|
323
|
+
(0, spinner_1.stopSpinner)(spinner, true, 'SDK components updated');
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
(0, spinner_1.stopSpinner)(spinner, false, 'Failed to update components');
|
|
327
|
+
throw error;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Check if a component is installed
|
|
332
|
+
*/
|
|
333
|
+
async isComponentInstalled(component) {
|
|
334
|
+
const installed = await this.listInstalled();
|
|
335
|
+
return installed.some((c) => c.name === component);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Install all required components for JetStart
|
|
339
|
+
*/
|
|
340
|
+
async installRequiredComponents() {
|
|
341
|
+
(0, logger_1.info)('Installing required Android SDK components...');
|
|
342
|
+
console.log();
|
|
343
|
+
for (let i = 0; i < exports.REQUIRED_SDK_COMPONENTS.length; i++) {
|
|
344
|
+
const component = exports.REQUIRED_SDK_COMPONENTS[i];
|
|
345
|
+
const overallProgress = `[${i + 1}/${exports.REQUIRED_SDK_COMPONENTS.length}]`;
|
|
346
|
+
try {
|
|
347
|
+
await this.installComponent(component, `${overallProgress} Installing ${component}`);
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
(0, logger_1.warning)(`Failed to install ${component}: ${error.message}`);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
console.log();
|
|
354
|
+
(0, logger_1.success)('All required SDK components installed');
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Detect missing required components
|
|
358
|
+
*/
|
|
359
|
+
async detectMissingComponents() {
|
|
360
|
+
const installed = await this.listInstalled();
|
|
361
|
+
const installedNames = installed.map((c) => c.name);
|
|
362
|
+
return exports.REQUIRED_SDK_COMPONENTS.filter((c) => !installedNames.includes(c));
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Create local.properties file with SDK path
|
|
366
|
+
*/
|
|
367
|
+
async createLocalProperties(projectPath) {
|
|
368
|
+
const localPropertiesPath = path.join(projectPath, 'local.properties');
|
|
369
|
+
// Check if already exists
|
|
370
|
+
if (await fs.pathExists(localPropertiesPath)) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const sdkRoot = await this.ensureSDKRoot();
|
|
374
|
+
// Escape backslashes for Windows paths
|
|
375
|
+
const sdkPathEscaped = sdkRoot.replace(/\\/g, '\\\\');
|
|
376
|
+
const content = `# Automatically generated by JetStart
|
|
377
|
+
sdk.dir=${sdkPathEscaped}
|
|
378
|
+
`;
|
|
379
|
+
await fs.writeFile(localPropertiesPath, content, 'utf8');
|
|
380
|
+
(0, logger_1.info)(`Created local.properties with SDK path`);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
exports.AndroidSDKManager = AndroidSDKManager;
|
|
384
|
+
/**
|
|
385
|
+
* Create an SDK manager instance
|
|
386
|
+
*/
|
|
387
|
+
function createSDKManager(sdkRoot) {
|
|
388
|
+
// Check for mock mode (for testing)
|
|
389
|
+
if (process.env.JETSTART_MOCK_SDK === 'true') {
|
|
390
|
+
return new MockAndroidSDKManager();
|
|
391
|
+
}
|
|
392
|
+
return new AndroidSDKManager(sdkRoot);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Mock SDK manager for testing
|
|
396
|
+
*/
|
|
397
|
+
class MockAndroidSDKManager {
|
|
398
|
+
async ensureSDKRoot() {
|
|
399
|
+
return '/mock/android/sdk';
|
|
400
|
+
}
|
|
401
|
+
async installCmdlineTools() {
|
|
402
|
+
(0, logger_1.info)('[MOCK] Installing cmdline-tools');
|
|
403
|
+
}
|
|
404
|
+
async acceptLicenses() {
|
|
405
|
+
(0, logger_1.info)('[MOCK] Accepting licenses');
|
|
406
|
+
}
|
|
407
|
+
async installComponent(component) {
|
|
408
|
+
(0, logger_1.info)(`[MOCK] Installing ${component}`);
|
|
409
|
+
}
|
|
410
|
+
async listInstalled() {
|
|
411
|
+
return [
|
|
412
|
+
{ name: 'platforms;android-34', version: '1', path: '/mock/platforms/android-34', installed: true },
|
|
413
|
+
{ name: 'build-tools;34.0.0', version: '34.0.0', path: '/mock/build-tools/34.0.0', installed: true },
|
|
414
|
+
];
|
|
415
|
+
}
|
|
416
|
+
async updateAll() {
|
|
417
|
+
(0, logger_1.info)('[MOCK] Updating all components');
|
|
418
|
+
}
|
|
419
|
+
async isComponentInstalled(component) {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
async installRequiredComponents() {
|
|
423
|
+
(0, logger_1.info)('[MOCK] Installing required components');
|
|
424
|
+
}
|
|
425
|
+
async detectMissingComponents() {
|
|
426
|
+
return [];
|
|
427
|
+
}
|
|
428
|
+
async createLocalProperties(projectPath) {
|
|
429
|
+
(0, logger_1.info)(`[MOCK] Creating local.properties at ${projectPath}`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
//# sourceMappingURL=android-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"android-sdk.js","sourceRoot":"","sources":["../../src/utils/android-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Download utilities with progress tracking
|
|
3
|
+
*/
|
|
4
|
+
export interface DownloadOptions {
|
|
5
|
+
url: string;
|
|
6
|
+
destination: string;
|
|
7
|
+
progressLabel?: string;
|
|
8
|
+
expectedSize?: number;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Format bytes into human-readable format
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatBytes(bytes: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Download a file with progress tracking
|
|
17
|
+
*/
|
|
18
|
+
export declare function downloadWithProgress(options: DownloadOptions): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Download a file with retry logic and exponential backoff
|
|
21
|
+
*/
|
|
22
|
+
export declare function downloadWithRetry(options: DownloadOptions, maxRetries?: number): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Download and extract a ZIP file
|
|
25
|
+
*/
|
|
26
|
+
export declare function downloadAndExtract(url: string, extractPath: string, progressLabel?: string): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a URL is accessible
|
|
29
|
+
*/
|
|
30
|
+
export declare function checkUrlAccessible(url: string): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Get file size from URL without downloading
|
|
33
|
+
*/
|
|
34
|
+
export declare function getRemoteFileSize(url: string): Promise<number | null>;
|
|
35
|
+
//# sourceMappingURL=downloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../src/utils/downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DlF;AASD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYtE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa3E"}
|