@jetstart/cli 1.1.1
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/.eslintrc.json +6 -0
- package/README.md +92 -0
- package/bin/jetstart.js +3 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +74 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/build.d.ts +12 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +53 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/create.d.ts +12 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +95 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/dev.d.ts +13 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +152 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +15 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/logs.d.ts +13 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +103 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +24 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +12 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/prompt.d.ts +10 -0
- package/dist/utils/prompt.d.ts.map +1 -0
- package/dist/utils/prompt.js +53 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/spinner.d.ts +9 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +31 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/template.d.ts +7 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +516 -0
- package/dist/utils/template.js.map +1 -0
- package/package.json +80 -0
- package/src/cli.ts +80 -0
- package/src/commands/build.ts +60 -0
- package/src/commands/create.ts +109 -0
- package/src/commands/dev.ts +138 -0
- package/src/commands/index.ts +8 -0
- package/src/commands/logs.ts +117 -0
- package/src/index.ts +17 -0
- package/src/types/index.ts +22 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/logger.ts +42 -0
- package/src/utils/prompt.ts +56 -0
- package/src/utils/spinner.ts +25 -0
- package/src/utils/template.ts +635 -0
- package/tests/create.test.ts +33 -0
- package/tests/utils.test.ts +17 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Template Generator
|
|
4
|
+
* Creates project structure from templates
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.generateProjectTemplate = generateProjectTemplate;
|
|
11
|
+
const path_1 = __importDefault(require("path"));
|
|
12
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const shared_1 = require("@jetstart/shared");
|
|
15
|
+
async function generateProjectTemplate(projectPath, options) {
|
|
16
|
+
const { projectName, packageName } = options;
|
|
17
|
+
// Create directory structure
|
|
18
|
+
await createDirectoryStructure(projectPath);
|
|
19
|
+
// Generate files
|
|
20
|
+
await generateRootBuildGradle(projectPath);
|
|
21
|
+
await generateBuildGradle(projectPath, options);
|
|
22
|
+
await generateSettingsGradle(projectPath, projectName);
|
|
23
|
+
await generateGradleProperties(projectPath);
|
|
24
|
+
await generateGradleWrapper(projectPath);
|
|
25
|
+
await generateMainActivity(projectPath, packageName);
|
|
26
|
+
await generateHotReload(projectPath, packageName);
|
|
27
|
+
await generateDSLInterpreter(projectPath, packageName);
|
|
28
|
+
await generateDSLTypes(projectPath, packageName);
|
|
29
|
+
await generateAndroidManifest(projectPath, options);
|
|
30
|
+
await generateResourceFiles(projectPath, projectName);
|
|
31
|
+
await generateLocalProperties(projectPath);
|
|
32
|
+
await generateJetStartConfig(projectPath, options);
|
|
33
|
+
await generateGitignore(projectPath);
|
|
34
|
+
await generateReadme(projectPath, projectName);
|
|
35
|
+
}
|
|
36
|
+
async function createDirectoryStructure(projectPath) {
|
|
37
|
+
const dirs = [
|
|
38
|
+
'app/src/main/java',
|
|
39
|
+
'app/src/main/res/layout',
|
|
40
|
+
'app/src/main/res/values',
|
|
41
|
+
'app/src/main/res/drawable',
|
|
42
|
+
'gradle/wrapper',
|
|
43
|
+
];
|
|
44
|
+
for (const dir of dirs) {
|
|
45
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(projectPath, dir));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function generateBuildGradle(projectPath, options) {
|
|
49
|
+
const content = `plugins {
|
|
50
|
+
id 'com.android.application'
|
|
51
|
+
id 'org.jetbrains.kotlin.android'
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
android {
|
|
55
|
+
namespace '${options.packageName}'
|
|
56
|
+
compileSdk ${shared_1.TARGET_ANDROID_API_LEVEL}
|
|
57
|
+
|
|
58
|
+
defaultConfig {
|
|
59
|
+
applicationId "${options.packageName}"
|
|
60
|
+
minSdk ${shared_1.MIN_ANDROID_API_LEVEL}
|
|
61
|
+
targetSdk ${shared_1.TARGET_ANDROID_API_LEVEL}
|
|
62
|
+
versionCode 1
|
|
63
|
+
versionName "1.0.0"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
buildTypes {
|
|
67
|
+
release {
|
|
68
|
+
minifyEnabled false
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
compileOptions {
|
|
73
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
74
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
kotlinOptions {
|
|
78
|
+
jvmTarget = '17'
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
buildFeatures {
|
|
82
|
+
compose true
|
|
83
|
+
buildConfig true // Required for JetStart hot reload
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
composeOptions {
|
|
87
|
+
kotlinCompilerExtensionVersion = '1.5.6'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
dependencies {
|
|
92
|
+
implementation 'androidx.core:core-ktx:1.12.0'
|
|
93
|
+
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2'
|
|
94
|
+
implementation 'androidx.activity:activity-compose:1.8.1'
|
|
95
|
+
implementation platform('androidx.compose:compose-bom:2023.10.01')
|
|
96
|
+
implementation 'androidx.compose.ui:ui'
|
|
97
|
+
implementation 'androidx.compose.ui:ui-graphics'
|
|
98
|
+
implementation 'androidx.compose.ui:ui-tooling-preview'
|
|
99
|
+
implementation 'androidx.compose.material3:material3'
|
|
100
|
+
|
|
101
|
+
// JetStart Hot Reload dependencies
|
|
102
|
+
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
|
|
103
|
+
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3'
|
|
104
|
+
}`;
|
|
105
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/build.gradle'), content);
|
|
106
|
+
}
|
|
107
|
+
async function generateSettingsGradle(projectPath, projectName) {
|
|
108
|
+
const content = `rootProject.name = "${projectName}"
|
|
109
|
+
include ':app'`;
|
|
110
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'settings.gradle'), content);
|
|
111
|
+
}
|
|
112
|
+
async function generateGradleProperties(projectPath) {
|
|
113
|
+
const content = `org.gradle.jvmargs=-Xmx2048m
|
|
114
|
+
android.useAndroidX=true
|
|
115
|
+
kotlin.code.style=official`;
|
|
116
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'gradle.properties'), content);
|
|
117
|
+
}
|
|
118
|
+
async function generateMainActivity(projectPath, packageName) {
|
|
119
|
+
const packagePath = packageName.replace(/\./g, '/');
|
|
120
|
+
const activityPath = path_1.default.join(projectPath, 'app/src/main/java', packagePath, 'MainActivity.kt');
|
|
121
|
+
const content = `package ${packageName}
|
|
122
|
+
|
|
123
|
+
import android.os.Bundle
|
|
124
|
+
import androidx.activity.ComponentActivity
|
|
125
|
+
import androidx.activity.compose.setContent
|
|
126
|
+
import androidx.compose.foundation.layout.*
|
|
127
|
+
import androidx.compose.material3.*
|
|
128
|
+
import androidx.compose.runtime.*
|
|
129
|
+
import androidx.compose.ui.Alignment
|
|
130
|
+
import androidx.compose.ui.Modifier
|
|
131
|
+
import androidx.compose.ui.unit.dp
|
|
132
|
+
|
|
133
|
+
class MainActivity : ComponentActivity() {
|
|
134
|
+
override fun onCreate(savedInstanceState: Bundle?) {
|
|
135
|
+
super.onCreate(savedInstanceState)
|
|
136
|
+
|
|
137
|
+
// Initialize hot reload - reads from BuildConfig injected by jetstart dev
|
|
138
|
+
try {
|
|
139
|
+
val serverUrl = BuildConfig.JETSTART_SERVER_URL
|
|
140
|
+
val sessionId = BuildConfig.JETSTART_SESSION_ID
|
|
141
|
+
HotReload.connect(this, serverUrl, sessionId)
|
|
142
|
+
} catch (e: Exception) {
|
|
143
|
+
// BuildConfig not available yet, hot reload will be disabled
|
|
144
|
+
android.util.Log.w("MainActivity", "Hot reload not configured: \${e.message}")
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
setContent {
|
|
148
|
+
MaterialTheme {
|
|
149
|
+
Surface(
|
|
150
|
+
modifier = Modifier.fillMaxSize(),
|
|
151
|
+
color = MaterialTheme.colorScheme.background
|
|
152
|
+
) {
|
|
153
|
+
// Check if we should render from DSL (hot reload mode)
|
|
154
|
+
val dsl by DSLInterpreter.currentDSL.collectAsState()
|
|
155
|
+
|
|
156
|
+
if (dsl != null) {
|
|
157
|
+
// Hot reload mode: render from DSL sent by server
|
|
158
|
+
DSLInterpreter.RenderDSL(dsl!!)
|
|
159
|
+
} else {
|
|
160
|
+
// Normal mode: render actual Compose code
|
|
161
|
+
AppContent()
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
override fun onDestroy() {
|
|
169
|
+
super.onDestroy()
|
|
170
|
+
HotReload.disconnect()
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Main App Content - REAL Kotlin Compose Code!
|
|
176
|
+
* This gets parsed to DSL and sent via hot reload
|
|
177
|
+
*/
|
|
178
|
+
@Composable
|
|
179
|
+
fun AppContent() {
|
|
180
|
+
Column(
|
|
181
|
+
modifier = Modifier
|
|
182
|
+
.fillMaxSize()
|
|
183
|
+
.padding(16.dp),
|
|
184
|
+
horizontalAlignment = Alignment.CenterHorizontally,
|
|
185
|
+
verticalArrangement = Arrangement.Center
|
|
186
|
+
) {
|
|
187
|
+
Text(
|
|
188
|
+
text = "Welcome to JetStart! 🚀",
|
|
189
|
+
style = MaterialTheme.typography.headlineMedium
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
Spacer(modifier = Modifier.height(16.dp))
|
|
193
|
+
|
|
194
|
+
Text(
|
|
195
|
+
text = "Edit this code and save to see hot reload!",
|
|
196
|
+
style = MaterialTheme.typography.bodyMedium
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
Spacer(modifier = Modifier.height(24.dp))
|
|
200
|
+
|
|
201
|
+
Button(
|
|
202
|
+
onClick = { /* Handle click */ },
|
|
203
|
+
modifier = Modifier.fillMaxWidth()
|
|
204
|
+
) {
|
|
205
|
+
Text("Click Me!")
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}`;
|
|
209
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(activityPath));
|
|
210
|
+
await fs_extra_1.default.writeFile(activityPath, content);
|
|
211
|
+
}
|
|
212
|
+
async function generateAndroidManifest(projectPath, options) {
|
|
213
|
+
const themeName = options.projectName.replace(/[^a-zA-Z0-9]/g, '');
|
|
214
|
+
const content = `<?xml version="1.0" encoding="utf-8"?>
|
|
215
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
216
|
+
|
|
217
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
|
218
|
+
|
|
219
|
+
<application
|
|
220
|
+
android:allowBackup="true"
|
|
221
|
+
android:label="@string/app_name"
|
|
222
|
+
android:theme="@style/Theme.${themeName}"
|
|
223
|
+
android:networkSecurityConfig="@xml/network_security_config">
|
|
224
|
+
<activity
|
|
225
|
+
android:name=".MainActivity"
|
|
226
|
+
android:exported="true">
|
|
227
|
+
<intent-filter>
|
|
228
|
+
<action android:name="android.intent.action.MAIN" />
|
|
229
|
+
<category android:name="android.intent.category.LAUNCHER" />
|
|
230
|
+
</intent-filter>
|
|
231
|
+
</activity>
|
|
232
|
+
</application>
|
|
233
|
+
|
|
234
|
+
</manifest>`;
|
|
235
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/src/main/AndroidManifest.xml'), content);
|
|
236
|
+
}
|
|
237
|
+
async function generateJetStartConfig(projectPath, options) {
|
|
238
|
+
const config = {
|
|
239
|
+
projectName: options.projectName,
|
|
240
|
+
packageName: options.packageName,
|
|
241
|
+
version: '1.0.0',
|
|
242
|
+
jetstart: {
|
|
243
|
+
version: '0.1.0',
|
|
244
|
+
enableHotReload: true,
|
|
245
|
+
enableLogs: true,
|
|
246
|
+
port: 8765,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
await fs_extra_1.default.writeJSON(path_1.default.join(projectPath, 'jetstart.config.json'), config, { spaces: 2 });
|
|
250
|
+
}
|
|
251
|
+
async function generateGitignore(projectPath) {
|
|
252
|
+
const content = `# Build
|
|
253
|
+
/build
|
|
254
|
+
/app/build
|
|
255
|
+
.gradle
|
|
256
|
+
*.hprof
|
|
257
|
+
|
|
258
|
+
# IDE
|
|
259
|
+
.idea
|
|
260
|
+
*.iml
|
|
261
|
+
.vscode
|
|
262
|
+
.DS_Store
|
|
263
|
+
|
|
264
|
+
# Claude Code
|
|
265
|
+
.claude
|
|
266
|
+
.claude-worktrees
|
|
267
|
+
|
|
268
|
+
# JetStart
|
|
269
|
+
.jetstart
|
|
270
|
+
|
|
271
|
+
# Android
|
|
272
|
+
local.properties
|
|
273
|
+
*.apk
|
|
274
|
+
*.aab
|
|
275
|
+
*.ap_
|
|
276
|
+
*.dex
|
|
277
|
+
*.class
|
|
278
|
+
bin/
|
|
279
|
+
gen/
|
|
280
|
+
out/
|
|
281
|
+
captures/
|
|
282
|
+
.externalNativeBuild
|
|
283
|
+
.cxx
|
|
284
|
+
|
|
285
|
+
# Log files
|
|
286
|
+
*.log
|
|
287
|
+
|
|
288
|
+
# Keystore files
|
|
289
|
+
*.jks
|
|
290
|
+
*.keystore`;
|
|
291
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, '.gitignore'), content);
|
|
292
|
+
}
|
|
293
|
+
async function generateReadme(projectPath, projectName) {
|
|
294
|
+
const content = `# ${projectName}
|
|
295
|
+
|
|
296
|
+
A JetStart project with Kotlin and Jetpack Compose.
|
|
297
|
+
|
|
298
|
+
## Getting Started
|
|
299
|
+
|
|
300
|
+
\`\`\`bash
|
|
301
|
+
# Start development server
|
|
302
|
+
jetstart dev
|
|
303
|
+
|
|
304
|
+
# Build production APK
|
|
305
|
+
jetstart build
|
|
306
|
+
|
|
307
|
+
# View logs
|
|
308
|
+
jetstart logs
|
|
309
|
+
\`\`\`
|
|
310
|
+
|
|
311
|
+
## Project Structure
|
|
312
|
+
|
|
313
|
+
\`\`\`
|
|
314
|
+
${projectName}/
|
|
315
|
+
├── app/
|
|
316
|
+
│ └── src/
|
|
317
|
+
│ └── main/
|
|
318
|
+
│ ├── java/ # Kotlin source files
|
|
319
|
+
│ └── res/ # Resources
|
|
320
|
+
├── jetstart.config.json # JetStart configuration
|
|
321
|
+
└── build.gradle # Gradle build file
|
|
322
|
+
\`\`\`
|
|
323
|
+
|
|
324
|
+
## Learn More
|
|
325
|
+
|
|
326
|
+
- [JetStart Documentation](https://github.com/phantom/jetstart)
|
|
327
|
+
- [Jetpack Compose](https://developer.android.com/jetpack/compose)
|
|
328
|
+
`;
|
|
329
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'README.md'), content);
|
|
330
|
+
}
|
|
331
|
+
async function generateRootBuildGradle(projectPath) {
|
|
332
|
+
const content = `// Top-level build file
|
|
333
|
+
buildscript {
|
|
334
|
+
ext {
|
|
335
|
+
kotlin_version = '1.9.21'
|
|
336
|
+
compose_version = '1.5.4'
|
|
337
|
+
}
|
|
338
|
+
repositories {
|
|
339
|
+
google()
|
|
340
|
+
mavenCentral()
|
|
341
|
+
}
|
|
342
|
+
dependencies {
|
|
343
|
+
classpath 'com.android.tools.build:gradle:8.2.0'
|
|
344
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
allprojects {
|
|
349
|
+
repositories {
|
|
350
|
+
google()
|
|
351
|
+
mavenCentral()
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
task clean(type: Delete) {
|
|
356
|
+
delete rootProject.buildDir
|
|
357
|
+
}`;
|
|
358
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'build.gradle'), content);
|
|
359
|
+
}
|
|
360
|
+
async function generateGradleWrapper(projectPath) {
|
|
361
|
+
// Use system Gradle to initialize proper wrapper
|
|
362
|
+
// This generates:
|
|
363
|
+
// - gradle/wrapper/gradle-wrapper.jar
|
|
364
|
+
// - gradle/wrapper/gradle-wrapper.properties
|
|
365
|
+
// - gradlew (Unix shell script)
|
|
366
|
+
// - gradlew.bat (Windows batch script)
|
|
367
|
+
return new Promise((resolve) => {
|
|
368
|
+
// Try to use system gradle to generate wrapper
|
|
369
|
+
const gradleCmd = process.platform === 'win32' ? 'gradle.bat' : 'gradle';
|
|
370
|
+
const gradleProcess = (0, child_process_1.spawn)(gradleCmd, ['wrapper', '--gradle-version', '8.2'], {
|
|
371
|
+
cwd: projectPath,
|
|
372
|
+
shell: true,
|
|
373
|
+
});
|
|
374
|
+
gradleProcess.on('close', (code) => {
|
|
375
|
+
// Continue regardless of success/failure
|
|
376
|
+
// If gradle wrapper command fails, the build will fall back to system gradle
|
|
377
|
+
resolve();
|
|
378
|
+
});
|
|
379
|
+
gradleProcess.on('error', () => {
|
|
380
|
+
// Continue even if gradle command not found
|
|
381
|
+
resolve();
|
|
382
|
+
});
|
|
383
|
+
// Timeout after 30 seconds
|
|
384
|
+
setTimeout(() => {
|
|
385
|
+
gradleProcess.kill();
|
|
386
|
+
resolve();
|
|
387
|
+
}, 30000);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
async function generateResourceFiles(projectPath, projectName) {
|
|
391
|
+
// Generate strings.xml
|
|
392
|
+
const stringsXml = `<?xml version="1.0" encoding="utf-8"?>
|
|
393
|
+
<resources>
|
|
394
|
+
<string name="app_name">${projectName}</string>
|
|
395
|
+
</resources>`;
|
|
396
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/src/main/res/values/strings.xml'), stringsXml);
|
|
397
|
+
// Generate colors.xml
|
|
398
|
+
const colorsXml = `<?xml version="1.0" encoding="utf-8"?>
|
|
399
|
+
<resources>
|
|
400
|
+
<color name="purple_200">#FFBB86FC</color>
|
|
401
|
+
<color name="purple_500">#FF6200EE</color>
|
|
402
|
+
<color name="purple_700">#FF3700B3</color>
|
|
403
|
+
<color name="teal_200">#FF03DAC5</color>
|
|
404
|
+
<color name="teal_700">#FF018786</color>
|
|
405
|
+
<color name="black">#FF000000</color>
|
|
406
|
+
<color name="white">#FFFFFFFF</color>
|
|
407
|
+
</resources>`;
|
|
408
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/src/main/res/values/colors.xml'), colorsXml);
|
|
409
|
+
// Generate themes.xml
|
|
410
|
+
const themesXml = `<?xml version="1.0" encoding="utf-8"?>
|
|
411
|
+
<resources>
|
|
412
|
+
<style name="Theme.${projectName.replace(/[^a-zA-Z0-9]/g, '')}" parent="android:Theme.Material.Light.NoActionBar" />
|
|
413
|
+
</resources>`;
|
|
414
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/src/main/res/values/themes.xml'), themesXml);
|
|
415
|
+
// Generate network_security_config.xml for development (allows cleartext traffic)
|
|
416
|
+
const networkSecurityConfig = `<?xml version="1.0" encoding="utf-8"?>
|
|
417
|
+
<network-security-config>
|
|
418
|
+
<base-config cleartextTrafficPermitted="true">
|
|
419
|
+
<trust-anchors>
|
|
420
|
+
<certificates src="system" />
|
|
421
|
+
</trust-anchors>
|
|
422
|
+
</base-config>
|
|
423
|
+
</network-security-config>`;
|
|
424
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(projectPath, 'app/src/main/res/xml'));
|
|
425
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'app/src/main/res/xml/network_security_config.xml'), networkSecurityConfig);
|
|
426
|
+
}
|
|
427
|
+
async function generateLocalProperties(projectPath) {
|
|
428
|
+
// Auto-detect Android SDK location
|
|
429
|
+
let androidSdkPath;
|
|
430
|
+
// Check environment variables first
|
|
431
|
+
androidSdkPath = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
|
|
432
|
+
// If not found, check common Windows locations
|
|
433
|
+
if (!androidSdkPath && process.platform === 'win32') {
|
|
434
|
+
const commonPaths = [
|
|
435
|
+
'C:\\Android',
|
|
436
|
+
path_1.default.join(require('os').homedir(), 'AppData', 'Local', 'Android', 'Sdk'),
|
|
437
|
+
'C:\\Android\\Sdk',
|
|
438
|
+
'C:\\Program Files (x86)\\Android\\android-sdk',
|
|
439
|
+
];
|
|
440
|
+
for (const p of commonPaths) {
|
|
441
|
+
if (fs_extra_1.default.existsSync(p)) {
|
|
442
|
+
androidSdkPath = p;
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
// If not found on macOS/Linux, check common paths
|
|
448
|
+
if (!androidSdkPath && process.platform !== 'win32') {
|
|
449
|
+
const commonPaths = [
|
|
450
|
+
path_1.default.join(require('os').homedir(), 'Android', 'Sdk'),
|
|
451
|
+
path_1.default.join(require('os').homedir(), 'Library', 'Android', 'sdk'),
|
|
452
|
+
'/opt/android-sdk',
|
|
453
|
+
];
|
|
454
|
+
for (const p of commonPaths) {
|
|
455
|
+
if (fs_extra_1.default.existsSync(p)) {
|
|
456
|
+
androidSdkPath = p;
|
|
457
|
+
break;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
if (!androidSdkPath) {
|
|
462
|
+
console.warn('[Warning] Android SDK not found. You may need to set ANDROID_HOME or create local.properties manually.');
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
// Create local.properties with SDK path
|
|
466
|
+
const content = `# Auto-generated by JetStart
|
|
467
|
+
sdk.dir=${androidSdkPath.replace(/\\/g, '\\\\')}
|
|
468
|
+
`;
|
|
469
|
+
await fs_extra_1.default.writeFile(path_1.default.join(projectPath, 'local.properties'), content);
|
|
470
|
+
console.log(`[JetStart] Created local.properties with SDK: ${androidSdkPath}`);
|
|
471
|
+
}
|
|
472
|
+
async function generateHotReload(projectPath, packageName) {
|
|
473
|
+
const packagePath = packageName.replace(/\./g, '/');
|
|
474
|
+
const hotReloadPath = path_1.default.join(projectPath, 'app/src/main/java', packagePath, 'HotReload.kt');
|
|
475
|
+
// Copy from my-app template
|
|
476
|
+
const sourceFile = path_1.default.join(__dirname, '../../../../my-app/app/src/main/java/com/jetstart/myapp/HotReload.kt');
|
|
477
|
+
try {
|
|
478
|
+
let content = await fs_extra_1.default.readFile(sourceFile, 'utf-8');
|
|
479
|
+
// Replace package name
|
|
480
|
+
content = content.replace(/package com\.jetstart\.myapp/g, `package ${packageName}`);
|
|
481
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(hotReloadPath));
|
|
482
|
+
await fs_extra_1.default.writeFile(hotReloadPath, content);
|
|
483
|
+
}
|
|
484
|
+
catch (error) {
|
|
485
|
+
console.warn('[Warning] Could not copy HotReload.kt from my-app. You may need to add it manually.');
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
async function generateDSLInterpreter(projectPath, packageName) {
|
|
489
|
+
const packagePath = packageName.replace(/\./g, '/');
|
|
490
|
+
const interpreterPath = path_1.default.join(projectPath, 'app/src/main/java', packagePath, 'DSLInterpreter.kt');
|
|
491
|
+
const sourceFile = path_1.default.join(__dirname, '../../../../my-app/app/src/main/java/com/jetstart/myapp/DSLInterpreter.kt');
|
|
492
|
+
try {
|
|
493
|
+
let content = await fs_extra_1.default.readFile(sourceFile, 'utf-8');
|
|
494
|
+
content = content.replace(/package com\.jetstart\.myapp/g, `package ${packageName}`);
|
|
495
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(interpreterPath));
|
|
496
|
+
await fs_extra_1.default.writeFile(interpreterPath, content);
|
|
497
|
+
}
|
|
498
|
+
catch (error) {
|
|
499
|
+
console.warn('[Warning] Could not copy DSLInterpreter.kt from my-app. You may need to add it manually.');
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
async function generateDSLTypes(projectPath, packageName) {
|
|
503
|
+
const packagePath = packageName.replace(/\./g, '/');
|
|
504
|
+
const typesPath = path_1.default.join(projectPath, 'app/src/main/java', packagePath, 'DSLTypes.kt');
|
|
505
|
+
const sourceFile = path_1.default.join(__dirname, '../../../../my-app/app/src/main/java/com/jetstart/myapp/DSLTypes.kt');
|
|
506
|
+
try {
|
|
507
|
+
let content = await fs_extra_1.default.readFile(sourceFile, 'utf-8');
|
|
508
|
+
content = content.replace(/package com\.jetstart\.myapp/g, `package ${packageName}`);
|
|
509
|
+
await fs_extra_1.default.ensureDir(path_1.default.dirname(typesPath));
|
|
510
|
+
await fs_extra_1.default.writeFile(typesPath, content);
|
|
511
|
+
}
|
|
512
|
+
catch (error) {
|
|
513
|
+
console.warn('[Warning] Could not copy DSLTypes.kt from my-app. You may need to add it manually.');
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jetstart/cli",
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "Command-line interface for JetStart",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"jetstart": "./bin/jetstart.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"clean": "rm -rf dist",
|
|
14
|
+
"test": "jest",
|
|
15
|
+
"test:watch": "jest --watch",
|
|
16
|
+
"test:coverage": "jest --coverage",
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"jetstart",
|
|
22
|
+
"cli",
|
|
23
|
+
"android",
|
|
24
|
+
"kotlin",
|
|
25
|
+
"jetpack-compose"
|
|
26
|
+
],
|
|
27
|
+
"author": "Phantom",
|
|
28
|
+
"license": "MIT",
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "https://github.com/dev-phantom/jetstart.git",
|
|
32
|
+
"directory": "packages/cli"
|
|
33
|
+
},
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/dev-phantom/jetstart/issues"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/dev-phantom/jetstart#readme",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@jetstart/shared": "file:../shared",
|
|
40
|
+
"axios": "^1.6.2",
|
|
41
|
+
"chalk": "^4.1.2",
|
|
42
|
+
"commander": "^11.1.0",
|
|
43
|
+
"dotenv": "^16.3.1",
|
|
44
|
+
"fs-extra": "^11.2.0",
|
|
45
|
+
"inquirer": "^8.2.6",
|
|
46
|
+
"ora": "^5.4.1",
|
|
47
|
+
"qrcode-terminal": "^0.12.0",
|
|
48
|
+
"ws": "^8.14.2"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/fs-extra": "^11.0.4",
|
|
52
|
+
"@types/inquirer": "^8.2.10",
|
|
53
|
+
"@types/jest": "^29.5.0",
|
|
54
|
+
"@types/node": "^20.10.0",
|
|
55
|
+
"@types/qrcode-terminal": "0.12.2",
|
|
56
|
+
"@types/ws": "^8.5.10",
|
|
57
|
+
"jest": "^29.5.0",
|
|
58
|
+
"ts-jest": "^29.1.0",
|
|
59
|
+
"typescript": "^5.3.0"
|
|
60
|
+
},
|
|
61
|
+
"engines": {
|
|
62
|
+
"node": ">=18.0.0",
|
|
63
|
+
"npm": ">=9.0.0"
|
|
64
|
+
},
|
|
65
|
+
"jest": {
|
|
66
|
+
"preset": "ts-jest",
|
|
67
|
+
"testEnvironment": "node",
|
|
68
|
+
"roots": [
|
|
69
|
+
"<rootDir>/tests"
|
|
70
|
+
],
|
|
71
|
+
"testMatch": [
|
|
72
|
+
"**/*.test.ts"
|
|
73
|
+
],
|
|
74
|
+
"collectCoverageFrom": [
|
|
75
|
+
"src/**/*.ts",
|
|
76
|
+
"!src/**/*.d.ts",
|
|
77
|
+
"!src/**/index.ts"
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}
|