@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.
Files changed (72) hide show
  1. package/.eslintrc.json +6 -0
  2. package/README.md +92 -0
  3. package/bin/jetstart.js +3 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +74 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/build.d.ts +12 -0
  9. package/dist/commands/build.d.ts.map +1 -0
  10. package/dist/commands/build.js +53 -0
  11. package/dist/commands/build.js.map +1 -0
  12. package/dist/commands/create.d.ts +12 -0
  13. package/dist/commands/create.d.ts.map +1 -0
  14. package/dist/commands/create.js +95 -0
  15. package/dist/commands/create.js.map +1 -0
  16. package/dist/commands/dev.d.ts +13 -0
  17. package/dist/commands/dev.d.ts.map +1 -0
  18. package/dist/commands/dev.js +152 -0
  19. package/dist/commands/dev.js.map +1 -0
  20. package/dist/commands/index.d.ts +8 -0
  21. package/dist/commands/index.d.ts.map +1 -0
  22. package/dist/commands/index.js +15 -0
  23. package/dist/commands/index.js.map +1 -0
  24. package/dist/commands/logs.d.ts +13 -0
  25. package/dist/commands/logs.d.ts.map +1 -0
  26. package/dist/commands/logs.js +103 -0
  27. package/dist/commands/logs.js.map +1 -0
  28. package/dist/index.d.ts +8 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +23 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/types/index.d.ts +20 -0
  33. package/dist/types/index.d.ts.map +1 -0
  34. package/dist/types/index.js +6 -0
  35. package/dist/types/index.js.map +1 -0
  36. package/dist/utils/index.d.ts +8 -0
  37. package/dist/utils/index.d.ts.map +1 -0
  38. package/dist/utils/index.js +24 -0
  39. package/dist/utils/index.js.map +1 -0
  40. package/dist/utils/logger.d.ts +12 -0
  41. package/dist/utils/logger.d.ts.map +1 -0
  42. package/dist/utils/logger.js +47 -0
  43. package/dist/utils/logger.js.map +1 -0
  44. package/dist/utils/prompt.d.ts +10 -0
  45. package/dist/utils/prompt.d.ts.map +1 -0
  46. package/dist/utils/prompt.js +53 -0
  47. package/dist/utils/prompt.js.map +1 -0
  48. package/dist/utils/spinner.d.ts +9 -0
  49. package/dist/utils/spinner.d.ts.map +1 -0
  50. package/dist/utils/spinner.js +31 -0
  51. package/dist/utils/spinner.js.map +1 -0
  52. package/dist/utils/template.d.ts +7 -0
  53. package/dist/utils/template.d.ts.map +1 -0
  54. package/dist/utils/template.js +516 -0
  55. package/dist/utils/template.js.map +1 -0
  56. package/package.json +80 -0
  57. package/src/cli.ts +80 -0
  58. package/src/commands/build.ts +60 -0
  59. package/src/commands/create.ts +109 -0
  60. package/src/commands/dev.ts +138 -0
  61. package/src/commands/index.ts +8 -0
  62. package/src/commands/logs.ts +117 -0
  63. package/src/index.ts +17 -0
  64. package/src/types/index.ts +22 -0
  65. package/src/utils/index.ts +8 -0
  66. package/src/utils/logger.ts +42 -0
  67. package/src/utils/prompt.ts +56 -0
  68. package/src/utils/spinner.ts +25 -0
  69. package/src/utils/template.ts +635 -0
  70. package/tests/create.test.ts +33 -0
  71. package/tests/utils.test.ts +17 -0
  72. 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
+ }