andrud 1.0.0 → 1.0.2

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 (122) hide show
  1. package/README.md +69 -83
  2. package/dist/__tests__/context.test.d.ts +5 -0
  3. package/dist/__tests__/context.test.d.ts.map +1 -0
  4. package/dist/__tests__/context.test.js +86 -0
  5. package/dist/__tests__/context.test.js.map +1 -0
  6. package/dist/__tests__/generator.test.d.ts +5 -0
  7. package/dist/__tests__/generator.test.d.ts.map +1 -0
  8. package/dist/__tests__/generator.test.js +83 -0
  9. package/dist/__tests__/generator.test.js.map +1 -0
  10. package/dist/__tests__/validation.test.d.ts +5 -0
  11. package/dist/__tests__/validation.test.d.ts.map +1 -0
  12. package/dist/__tests__/validation.test.js +81 -0
  13. package/dist/__tests__/validation.test.js.map +1 -0
  14. package/dist/cli/commands/create.d.ts +10 -0
  15. package/dist/cli/commands/create.d.ts.map +1 -0
  16. package/dist/cli/commands/create.js +203 -0
  17. package/dist/cli/commands/create.js.map +1 -0
  18. package/dist/cli/commands/info.d.ts +13 -0
  19. package/dist/cli/commands/info.d.ts.map +1 -0
  20. package/dist/cli/commands/info.js +153 -0
  21. package/dist/cli/commands/info.js.map +1 -0
  22. package/dist/cli/commands/init.d.ts +15 -0
  23. package/dist/cli/commands/init.d.ts.map +1 -0
  24. package/dist/cli/commands/init.js +141 -0
  25. package/dist/cli/commands/init.js.map +1 -0
  26. package/dist/cli/commands/list.d.ts +18 -0
  27. package/dist/cli/commands/list.d.ts.map +1 -0
  28. package/dist/cli/commands/list.js +122 -0
  29. package/dist/cli/commands/list.js.map +1 -0
  30. package/dist/cli/commands/new.d.ts +22 -0
  31. package/dist/cli/commands/new.d.ts.map +1 -0
  32. package/dist/cli/commands/new.js +245 -0
  33. package/dist/cli/commands/new.js.map +1 -0
  34. package/dist/cli/index.d.ts +5 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +99 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/core/config.d.ts +89 -0
  39. package/dist/core/config.d.ts.map +1 -0
  40. package/dist/core/config.js +151 -0
  41. package/dist/core/config.js.map +1 -0
  42. package/dist/core/context.d.ts +47 -0
  43. package/dist/core/context.d.ts.map +1 -0
  44. package/dist/core/context.js +175 -0
  45. package/dist/core/context.js.map +1 -0
  46. package/dist/core/generator.d.ts +44 -0
  47. package/dist/core/generator.d.ts.map +1 -0
  48. package/{src/core/generator.ts → dist/core/generator.js} +394 -484
  49. package/dist/core/generator.js.map +1 -0
  50. package/dist/core/types.d.ts +125 -0
  51. package/dist/core/types.d.ts.map +1 -0
  52. package/dist/core/types.js +22 -0
  53. package/dist/core/types.js.map +1 -0
  54. package/dist/templates/index.d.ts +36 -0
  55. package/dist/templates/index.d.ts.map +1 -0
  56. package/dist/templates/index.js +141 -0
  57. package/dist/templates/index.js.map +1 -0
  58. package/dist/ui/colors.d.ts +40 -0
  59. package/dist/ui/colors.d.ts.map +1 -0
  60. package/dist/ui/colors.js +117 -0
  61. package/dist/ui/colors.js.map +1 -0
  62. package/dist/ui/output.d.ts +69 -0
  63. package/dist/ui/output.d.ts.map +1 -0
  64. package/dist/ui/output.js +199 -0
  65. package/dist/ui/output.js.map +1 -0
  66. package/dist/ui/prompts.d.ts +20 -0
  67. package/dist/ui/prompts.d.ts.map +1 -0
  68. package/dist/ui/prompts.js +118 -0
  69. package/dist/ui/prompts.js.map +1 -0
  70. package/dist/ui/spinners.d.ts +30 -0
  71. package/dist/ui/spinners.d.ts.map +1 -0
  72. package/dist/ui/spinners.js +74 -0
  73. package/dist/ui/spinners.js.map +1 -0
  74. package/dist/ui/types.d.ts +35 -0
  75. package/dist/ui/types.d.ts.map +1 -0
  76. package/dist/ui/types.js +5 -0
  77. package/dist/ui/types.js.map +1 -0
  78. package/dist/utils/filesystem.d.ts +38 -0
  79. package/dist/utils/filesystem.d.ts.map +1 -0
  80. package/dist/utils/filesystem.js +181 -0
  81. package/dist/utils/filesystem.js.map +1 -0
  82. package/dist/utils/logger.d.ts +27 -0
  83. package/dist/utils/logger.d.ts.map +1 -0
  84. package/dist/utils/logger.js +52 -0
  85. package/dist/utils/logger.js.map +1 -0
  86. package/dist/utils/object.d.ts +140 -0
  87. package/dist/utils/object.d.ts.map +1 -0
  88. package/dist/utils/object.js +385 -0
  89. package/dist/utils/object.js.map +1 -0
  90. package/dist/utils/validation.d.ts +35 -0
  91. package/dist/utils/validation.d.ts.map +1 -0
  92. package/dist/utils/validation.js +270 -0
  93. package/dist/utils/validation.js.map +1 -0
  94. package/package.json +8 -19
  95. package/CHANGELOG.md +0 -70
  96. package/CODE_REVIEW_ANALYSIS.md +0 -177
  97. package/CONTRIBUTING.md +0 -132
  98. package/FIXES_IMPLEMENTED.md +0 -546
  99. package/src/__tests__/context.test.ts +0 -133
  100. package/src/__tests__/generator.test.ts +0 -107
  101. package/src/__tests__/validation.test.ts +0 -105
  102. package/src/cli/commands/create.ts +0 -252
  103. package/src/cli/commands/info.ts +0 -178
  104. package/src/cli/commands/init.ts +0 -186
  105. package/src/cli/commands/list.ts +0 -156
  106. package/src/cli/commands/new.ts +0 -316
  107. package/src/cli/index.ts +0 -116
  108. package/src/core/config.ts +0 -172
  109. package/src/core/context.ts +0 -212
  110. package/src/core/types.ts +0 -184
  111. package/src/templates/index.ts +0 -162
  112. package/src/types/gradient-string.d.ts +0 -25
  113. package/src/ui/colors.ts +0 -139
  114. package/src/ui/output.ts +0 -230
  115. package/src/ui/prompts.ts +0 -170
  116. package/src/ui/spinners.ts +0 -95
  117. package/src/ui/types.ts +0 -41
  118. package/src/utils/filesystem.ts +0 -222
  119. package/src/utils/logger.ts +0 -67
  120. package/src/utils/object.ts +0 -456
  121. package/src/utils/validation.ts +0 -345
  122. package/tsconfig.json +0 -25
@@ -0,0 +1,122 @@
1
+ /**
2
+ * List templates command - shows all available templates
3
+ */
4
+ import { gradientTeen, bold, primary, muted } from '../../ui/colors.js';
5
+ import { printSection } from '../../ui/output.js';
6
+ import { getAllTemplates, getTemplatePreview, searchTemplates } from '../../templates/index.js';
7
+ import { TEMPLATE_CONFIGS } from '../../core/config.js';
8
+ import pc from 'picocolors';
9
+ /**
10
+ * List all available templates
11
+ */
12
+ export async function createListCommand(options = { json: false }) {
13
+ // Validate search input
14
+ if (options.search && typeof options.search !== 'string') {
15
+ console.log(pc.red('Error: Search query must be a string'));
16
+ return;
17
+ }
18
+ if (options.search && options.search.length > 100) {
19
+ console.log(pc.red('Error: Search query is too long (maximum 100 characters)'));
20
+ return;
21
+ }
22
+ // Filter templates based on search
23
+ const templates = options.search?.trim()
24
+ ? searchTemplates(options.search.trim())
25
+ : getAllTemplates();
26
+ if (options.json) {
27
+ const templateList = templates.map(t => ({
28
+ id: t.id,
29
+ name: t.name,
30
+ description: t.description,
31
+ language: TEMPLATE_CONFIGS[t.id]?.language === 'kotlin' ? 'Kotlin' : 'Java',
32
+ uiFramework: TEMPLATE_CONFIGS[t.id]?.uiFramework === 'compose' ? 'Compose' : 'XML'
33
+ }));
34
+ console.log(JSON.stringify(templateList, null, 2));
35
+ return;
36
+ }
37
+ if (templates.length === 0) {
38
+ console.log(pc.yellow('No templates found.'));
39
+ return;
40
+ }
41
+ console.log('');
42
+ console.log(gradientTeen('╔══════════════════════════════════════════════════════════════╗'));
43
+ console.log(gradientTeen('║ Android Project Templates ║'));
44
+ console.log(gradientTeen('╚══════════════════════════════════════════════════════════════╝'));
45
+ console.log('');
46
+ templates.forEach((template, index) => {
47
+ printTemplateCard(template, index + 1);
48
+ });
49
+ // Summary
50
+ printSection('Summary');
51
+ console.log(` Total templates: ${bold(templates.length.toString())}`);
52
+ console.log(` Kotlin templates: ${bold(templates.filter(t => TEMPLATE_CONFIGS[t.id]?.language === 'kotlin').length.toString())}`);
53
+ console.log(` Java templates: ${bold(templates.filter(t => TEMPLATE_CONFIGS[t.id]?.language === 'java').length.toString())}`);
54
+ console.log(` Compose templates: ${bold(templates.filter(t => TEMPLATE_CONFIGS[t.id]?.uiFramework === 'compose').length.toString())}`);
55
+ console.log('');
56
+ console.log(muted(' Use ') + primary('andrud info <template>') + muted(' for more details'));
57
+ console.log('');
58
+ }
59
+ /**
60
+ * Print a template as a card
61
+ */
62
+ function printTemplateCard(template, number) {
63
+ const config = TEMPLATE_CONFIGS[template.id];
64
+ if (!config)
65
+ return;
66
+ const isKotlin = config.language === 'kotlin';
67
+ const isCompose = config.uiFramework === 'compose';
68
+ // Template header
69
+ console.log(primary(` ${number}. `) + bold(template.name));
70
+ console.log(` ${template.description}`);
71
+ console.log('');
72
+ // Tags
73
+ const tags = [];
74
+ tags.push(isKotlin ? pc.green('Kotlin') : pc.yellow('Java'));
75
+ tags.push(isCompose ? pc.cyan('Compose') : pc.gray('XML'));
76
+ if (template.id === 'native-cpp') {
77
+ tags.push(pc.magenta('NDK'));
78
+ }
79
+ console.log(` ${tags.join(' ')}`);
80
+ // Key features
81
+ const features = template.features.slice(0, 3);
82
+ console.log(` ${muted('Features:')} ${features.join(pc.gray(', '))}`);
83
+ // Version info
84
+ console.log(` ${muted('Gradle:')} ${config.gradleVersion} ${muted('AGP:')} ${config.agpVersion}`);
85
+ // Command example
86
+ console.log('');
87
+ console.log(` ${muted('Run:')} ${primary(`andrud new MyApp -t ${template.id}`)}`);
88
+ // Code preview snippet
89
+ const preview = getTemplatePreview(template.id);
90
+ if (preview) {
91
+ const lines = preview.split('\n').slice(0, 4);
92
+ console.log('');
93
+ console.log(' ' + pc.gray('┌─ Code preview'));
94
+ lines.forEach((line, i) => {
95
+ const isLast = i === lines.length - 1;
96
+ const prefix = isLast ? ' ' : ' ';
97
+ const linePrefix = isLast ? '└─' : '│ ';
98
+ console.log(prefix + pc.gray(linePrefix) + pc.dim(line.substring(0, 50) + (line.length > 50 ? '...' : '')));
99
+ });
100
+ }
101
+ console.log('');
102
+ console.log(pc.gray(' ' + '─'.repeat(60)));
103
+ console.log('');
104
+ }
105
+ /**
106
+ * Print templates as a compact list
107
+ */
108
+ export function printTemplateList(templates) {
109
+ const maxIdLength = Math.max(...templates.map(t => t.id.length));
110
+ const maxNameLength = Math.max(...templates.map(t => t.name.length));
111
+ templates.forEach((t, i) => {
112
+ const config = TEMPLATE_CONFIGS[t.id];
113
+ if (!config)
114
+ return;
115
+ const id = t.id.padEnd(maxIdLength);
116
+ const name = t.name.padEnd(maxNameLength);
117
+ const lang = config.language === 'kotlin' ? pc.green('K') : pc.yellow('J');
118
+ const ui = config.uiFramework === 'compose' ? pc.cyan('C') : pc.gray('X');
119
+ console.log(` ${primary(String(i + 1).padStart(2))} ${bold(id)} ${name} ${lang}${ui} ${muted(t.description.substring(0, 40))}`);
120
+ });
121
+ }
122
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * New project creation command with interactive prompts
3
+ */
4
+ interface NewCommandOptions {
5
+ name?: string;
6
+ template?: string;
7
+ packageName?: string;
8
+ directory?: string;
9
+ minSdk?: number;
10
+ targetSdk?: number;
11
+ force?: boolean;
12
+ skipInstall?: boolean;
13
+ git?: boolean;
14
+ kotlin?: boolean;
15
+ verbose?: boolean;
16
+ }
17
+ /**
18
+ * Create a new Android project
19
+ */
20
+ export declare function createNewCommand(name?: string, options?: NewCommandOptions): Promise<void>;
21
+ export type { NewCommandOptions };
22
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAsQf;AAGD,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * New project creation command with interactive prompts
3
+ */
4
+ import { select, text, multiselect, isCancel, cancel } from '@clack/prompts';
5
+ import { printWelcome, printSuccess, printError, printSection, printKeyValue, printGoodbye, printSteps } from '../../ui/output.js';
6
+ import { validateAppName, validatePackageStructure, validateDirectoryPath } from '../../utils/validation.js';
7
+ import { generateProject } from '../../core/generator.js';
8
+ import { buildDefaultProjectContext, buildTemplateContext } from '../../core/context.js';
9
+ import { exists } from '../../utils/filesystem.js';
10
+ import { getTemplateMetadata, getAllTemplates } from '../../templates/index.js';
11
+ import pc from 'picocolors';
12
+ /**
13
+ * Create a new Android project
14
+ */
15
+ export async function createNewCommand(name, options = {}) {
16
+ try {
17
+ // Print welcome banner
18
+ printWelcome();
19
+ // Get all available templates
20
+ const templates = getAllTemplates();
21
+ // Step 1: Select template
22
+ let selectedTemplate;
23
+ if (options.template) {
24
+ const meta = getTemplateMetadata(options.template);
25
+ if (!meta) {
26
+ printError(`Unknown template: ${options.template}`);
27
+ console.log('Available templates:');
28
+ templates.forEach(t => console.log(` - ${t.id}`));
29
+ return;
30
+ }
31
+ selectedTemplate = options.template;
32
+ }
33
+ else {
34
+ const templateOptions = templates.map(t => ({
35
+ label: `${t.name}`,
36
+ value: t.id,
37
+ hint: t.keywords.slice(0, 2).join(', ')
38
+ }));
39
+ const templateResult = await select({
40
+ message: '? Select a project template',
41
+ options: templateOptions
42
+ });
43
+ if (isCancel(templateResult)) {
44
+ cancel();
45
+ return;
46
+ }
47
+ selectedTemplate = templateResult;
48
+ }
49
+ printSection(`Template: ${selectedTemplate}`);
50
+ // Step 2: Get app name
51
+ let appName;
52
+ if (name) {
53
+ const validation = validateAppName(name);
54
+ if (!validation.valid) {
55
+ printError('Invalid app name', validation.errors.join(', '));
56
+ return;
57
+ }
58
+ appName = validation.normalized ?? name;
59
+ }
60
+ else {
61
+ const nameResult = await text({
62
+ message: '? What is the app name?',
63
+ placeholder: 'MyAwesomeApp',
64
+ defaultValue: 'MyAwesomeApp',
65
+ validate: (value) => {
66
+ const result = validateAppName(value);
67
+ if (!result.valid) {
68
+ return result.errors[0];
69
+ }
70
+ return undefined;
71
+ }
72
+ });
73
+ if (isCancel(nameResult)) {
74
+ cancel();
75
+ return;
76
+ }
77
+ const validation = validateAppName(nameResult);
78
+ if (!validation.valid) {
79
+ printError('Invalid app name', validation.errors.join(', '));
80
+ return;
81
+ }
82
+ appName = validation.normalized ?? nameResult;
83
+ }
84
+ // Step 3: Get package name
85
+ let packageName;
86
+ if (options.packageName) {
87
+ const validation = validatePackageStructure(options.packageName);
88
+ if (!validation.valid) {
89
+ printError('Invalid package name', validation.errors.join(', '));
90
+ return;
91
+ }
92
+ packageName = options.packageName;
93
+ }
94
+ else {
95
+ // Generate default package name from app name
96
+ const defaultPackage = `com.example.${appName.toLowerCase().replace(/[^a-z0-9]/g, '')}`;
97
+ const packageResult = await text({
98
+ message: '? What is the package name?',
99
+ placeholder: 'com.example.myapp',
100
+ defaultValue: defaultPackage,
101
+ validate: (value) => {
102
+ const result = validatePackageStructure(value);
103
+ if (!result.valid) {
104
+ return result.errors[0];
105
+ }
106
+ return undefined;
107
+ }
108
+ });
109
+ if (isCancel(packageResult)) {
110
+ cancel();
111
+ return;
112
+ }
113
+ const validation = validatePackageStructure(packageResult);
114
+ if (!validation.valid) {
115
+ printError('Invalid package name', validation.errors.join(', '));
116
+ return;
117
+ }
118
+ packageName = packageResult;
119
+ }
120
+ // Step 4: Get project directory
121
+ let projectDirectory;
122
+ if (options.directory) {
123
+ const validation = validateDirectoryPath(options.directory);
124
+ if (!validation.valid) {
125
+ printError('Invalid directory', validation.errors.join(', '));
126
+ return;
127
+ }
128
+ projectDirectory = validation.normalized ?? options.directory;
129
+ }
130
+ else {
131
+ const defaultDir = `./${appName.toLowerCase().replace(/[^a-z0-9]/g, '-')}`;
132
+ const dirResult = await text({
133
+ message: '? In which directory should the project be created?',
134
+ placeholder: defaultDir,
135
+ defaultValue: defaultDir,
136
+ validate: (value) => {
137
+ const result = validateDirectoryPath(value);
138
+ if (!result.valid) {
139
+ return result.errors[0];
140
+ }
141
+ return undefined;
142
+ }
143
+ });
144
+ if (isCancel(dirResult)) {
145
+ cancel();
146
+ return;
147
+ }
148
+ const validation = validateDirectoryPath(dirResult);
149
+ if (!validation.valid) {
150
+ printError('Invalid directory', validation.errors.join(', '));
151
+ return;
152
+ }
153
+ projectDirectory = validation.normalized ?? dirResult;
154
+ }
155
+ // Step 5: Optional features
156
+ const featureOptions = [
157
+ { label: 'Git repository', value: 'git', hint: 'Initialize with git' },
158
+ { label: 'README.md', value: 'readme', hint: 'Generate readme' },
159
+ { label: 'AndroidX libraries', value: 'androidX', hint: 'Use AndroidX (recommended)', selected: true },
160
+ { label: 'Kotlin DSL', value: 'kotlinDsl', hint: 'Use Kotlin DSL for Gradle', selected: true }
161
+ ];
162
+ const featuresResult = await multiselect({
163
+ message: '? Select additional features (optional)',
164
+ options: featureOptions,
165
+ required: false
166
+ });
167
+ if (isCancel(featuresResult)) {
168
+ cancel();
169
+ return;
170
+ }
171
+ const selectedFeatures = featuresResult;
172
+ const features = {
173
+ git: selectedFeatures.includes('git') || options.git === true,
174
+ readme: selectedFeatures.includes('readme'),
175
+ androidX: selectedFeatures.includes('androidX'),
176
+ kotlinDsl: selectedFeatures.includes('kotlinDsl')
177
+ };
178
+ // Build context
179
+ const baseContext = buildDefaultProjectContext(appName, packageName, projectDirectory, selectedTemplate, features, options.minSdk, options.targetSdk);
180
+ const context = buildTemplateContext({
181
+ appName: baseContext.appName,
182
+ packageName: baseContext.packageName,
183
+ projectDirectory: baseContext.projectDirectory,
184
+ template: baseContext.template,
185
+ uiFramework: baseContext.uiFramework,
186
+ language: baseContext.language,
187
+ android: baseContext.android,
188
+ gradle: baseContext.gradle,
189
+ features: baseContext,
190
+ nativeCpp: baseContext.nativeCpp
191
+ });
192
+ // Check if directory exists
193
+ const dirExists = await exists(projectDirectory);
194
+ if (dirExists && !options.force) {
195
+ printError(`Directory "${projectDirectory}" already exists`, 'Use --force to overwrite existing files');
196
+ return;
197
+ }
198
+ // Generate project
199
+ console.log('');
200
+ printSection('Generating Project');
201
+ const result = await generateProject(context, {
202
+ overwrite: options.force,
203
+ dryRun: false,
204
+ skipInstall: options.skipInstall,
205
+ verbose: options.verbose ?? false
206
+ });
207
+ if (result.success) {
208
+ printSuccess('Project generated successfully!');
209
+ printKeyValue([
210
+ { key: 'Project', value: appName },
211
+ { key: 'Package', value: packageName },
212
+ { key: 'Template', value: selectedTemplate },
213
+ { key: 'Location', value: projectDirectory },
214
+ { key: 'Files created', value: result.generatedFiles.length.toString() },
215
+ { key: 'Duration', value: `${(result.duration / 1000).toFixed(1)}s` }
216
+ ]);
217
+ console.log('');
218
+ printSteps([
219
+ `cd ${projectDirectory}`,
220
+ 'Open in Android Studio: studio .',
221
+ 'Or build from command line: ./gradlew assembleDebug'
222
+ ]);
223
+ printGoodbye(true);
224
+ }
225
+ else {
226
+ printError('Project generation failed');
227
+ if (result.errors.length > 0) {
228
+ console.log('');
229
+ result.errors.forEach(err => {
230
+ console.log(` ${pc.red('•')} ${err.file ? `${err.file}: ` : ''}${err.message}`);
231
+ });
232
+ }
233
+ printGoodbye(false);
234
+ }
235
+ }
236
+ catch (error) {
237
+ printError('An unexpected error occurred', error.message);
238
+ if (process.env.DEBUG || process.env.VERBOSE) {
239
+ console.error(error);
240
+ }
241
+ printGoodbye(false);
242
+ process.exit(1);
243
+ }
244
+ }
245
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/cli/commands/new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Command registration and main CLI entry point
3
+ */
4
+ export declare function runCli(): void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+EH,wBAAgB,MAAM,IAAI,IAAI,CAgC7B"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Command registration and main CLI entry point
3
+ */
4
+ import { cac } from 'cac';
5
+ import pc from 'picocolors';
6
+ import { createCommand } from './commands/create.js';
7
+ import { createNewCommand } from './commands/new.js';
8
+ import { createInitCommand } from './commands/init.js';
9
+ import { createInfoCommand } from './commands/info.js';
10
+ import { createListCommand } from './commands/list.js';
11
+ const pkg = { version: '1.0.0' };
12
+ const cli = cac('andrud');
13
+ cli.version(pkg.version);
14
+ // Clean minimal help
15
+ function printHelp() {
16
+ console.log('');
17
+ console.log(` ${pc.cyan('andrud')} - Android Project Scaffolding`);
18
+ console.log('');
19
+ console.log(` ${pc.gray('andrud create')} Create a new project`);
20
+ console.log(` ${pc.gray('andrud list')} Show available templates`);
21
+ console.log(` ${pc.gray('andrud info <template>')} View template details`);
22
+ console.log('');
23
+ console.log(` ${pc.gray('andrud create MyApp')} Create with name`);
24
+ console.log('');
25
+ }
26
+ // Commands
27
+ cli
28
+ .command('create', 'Create a new Android project')
29
+ .alias('c')
30
+ .option('-f, --force', 'Overwrite existing files')
31
+ .example('andrud create')
32
+ .example('andrud create --force')
33
+ .action(createCommand);
34
+ cli
35
+ .command('new [name]', 'Create a new project')
36
+ .alias('n')
37
+ .option('-t, --template <type>', 'Template type')
38
+ .option('-p, --package <name>', 'Package name')
39
+ .option('-f, --force', 'Overwrite')
40
+ .example('andrud new MyApp -t kotlin-compose')
41
+ .action(createNewCommand);
42
+ cli
43
+ .command('init', 'Initialize in current directory')
44
+ .alias('i')
45
+ .option('-f, --force', 'Overwrite')
46
+ .example('andrud init')
47
+ .action(createInitCommand);
48
+ cli
49
+ .command('info [template]', 'Show template info')
50
+ .example('andrud info kotlin-compose')
51
+ .action(createInfoCommand);
52
+ cli
53
+ .command('list', 'List all templates')
54
+ .alias('ls')
55
+ .option('--json', 'Output as JSON')
56
+ .action(createListCommand);
57
+ cli.on('command:!', () => {
58
+ console.error(pc.red(` Unknown command. See ${pc.cyan('--help')}\n`));
59
+ });
60
+ process.on('uncaughtException', (error) => {
61
+ console.error(pc.red(` ${error.message}\n`));
62
+ process.exit(1);
63
+ });
64
+ process.on('unhandledRejection', (reason) => {
65
+ console.error(pc.red(` ${reason}\n`));
66
+ process.exit(1);
67
+ });
68
+ export function runCli() {
69
+ try {
70
+ const args = process.argv.slice(2);
71
+ // Show help
72
+ if (args.includes('--help') || args.includes('-h')) {
73
+ printHelp();
74
+ return;
75
+ }
76
+ // Show version
77
+ if (args.includes('--version') || args.includes('-V')) {
78
+ console.log(pkg.version);
79
+ return;
80
+ }
81
+ // Quick help on no args
82
+ if (args.length === 0) {
83
+ console.log('');
84
+ console.log(` ${pc.cyan('andrud')} - Create Android projects`);
85
+ console.log('');
86
+ console.log(` ${pc.gray('andrud create')} Start interactive setup`);
87
+ console.log(` ${pc.gray('andrud --help')} Show all commands`);
88
+ console.log('');
89
+ return;
90
+ }
91
+ cli.parse(process.argv, { run: true });
92
+ }
93
+ catch (error) {
94
+ console.error(pc.red(` ${error.message}\n`));
95
+ process.exit(1);
96
+ }
97
+ }
98
+ // Note: runCli() is called from bin/andrud.js
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Configuration constants for Android and Gradle versions
3
+ */
4
+ /**
5
+ * Default Android SDK configuration
6
+ */
7
+ export declare const ANDROID_SDK_DEFAULTS: {
8
+ MIN_SDK: number;
9
+ TARGET_SDK: number;
10
+ COMPILE_SDK: number;
11
+ BUILD_TOOLS_VERSION: string;
12
+ };
13
+ /**
14
+ * Gradle-related versions
15
+ */
16
+ export declare const GRADLE_VERSIONS: {
17
+ AGP: string;
18
+ GRADLE: string;
19
+ KOTLIN: string;
20
+ COMPOSE_COMPILER: string;
21
+ COMPOSE_BOM: string;
22
+ NDK: string;
23
+ };
24
+ /**
25
+ * AndroidX library versions
26
+ */
27
+ export declare const ANDROIDX_VERSIONS: {
28
+ CORE_KTX: string;
29
+ APP_COMPAT: string;
30
+ MATERIAL: string;
31
+ LIFECYCLE: string;
32
+ ACTIVITY: string;
33
+ CONSTRAINT_LAYOUT: string;
34
+ RECYCLER_VIEW: string;
35
+ CARD_VIEW: string;
36
+ SWIPE_REFRESH: string;
37
+ NAVIGATION: string;
38
+ ROOM: string;
39
+ WORK: string;
40
+ HILT: string;
41
+ };
42
+ /**
43
+ * Compose versions
44
+ */
45
+ export declare const COMPOSE_VERSIONS: {
46
+ BOM: string;
47
+ UI: string;
48
+ UI_GRAPHICS: string;
49
+ UI_TOOLING: string;
50
+ MATERIAL3: string;
51
+ MATERIAL_ICONS: string;
52
+ FOUNDATION: string;
53
+ ACTIVITY: string;
54
+ LIFECYCLE: string;
55
+ NAVIGATION: string;
56
+ };
57
+ /**
58
+ * Default Gradle properties for Android projects
59
+ */
60
+ export declare function getDefaultGradleProperties(): Record<string, string | number | boolean>;
61
+ /**
62
+ * Get recommended minimum SDK based on year
63
+ */
64
+ export declare function getRecommendedMinSdk(): number;
65
+ /**
66
+ * Get target SDK for a given year
67
+ */
68
+ export declare function getTargetSdkForYear(year: number): number;
69
+ /**
70
+ * Template-specific configurations
71
+ */
72
+ export interface TemplateConfig {
73
+ language: 'kotlin' | 'java';
74
+ uiFramework: 'xml' | 'compose' | 'none';
75
+ minSdk: number;
76
+ targetSdk: number;
77
+ compileSdk: number;
78
+ kotlinVersion: string;
79
+ agpVersion: string;
80
+ gradleVersion: string;
81
+ composeEnabled: boolean;
82
+ ndkVersion?: string;
83
+ }
84
+ export declare const TEMPLATE_CONFIGS: Record<string, TemplateConfig>;
85
+ /**
86
+ * Get template configuration
87
+ */
88
+ export declare function getTemplateConfig(template: string): TemplateConfig;
89
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;CAO3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;CAc7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;CAW5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAYtF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,WAAW,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CA8C3D,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAGlE"}