andrud 1.0.1 → 1.0.3

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 (121) hide show
  1. package/README.md +295 -306
  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 +157 -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 +10 -21
  95. package/CHANGELOG.md +0 -70
  96. package/CONTRIBUTING.md +0 -132
  97. package/sc.png +0 -0
  98. package/src/__tests__/context.test.ts +0 -133
  99. package/src/__tests__/generator.test.ts +0 -107
  100. package/src/__tests__/validation.test.ts +0 -105
  101. package/src/cli/commands/create.ts +0 -252
  102. package/src/cli/commands/info.ts +0 -178
  103. package/src/cli/commands/init.ts +0 -186
  104. package/src/cli/commands/list.ts +0 -156
  105. package/src/cli/commands/new.ts +0 -316
  106. package/src/cli/index.ts +0 -116
  107. package/src/core/config.ts +0 -172
  108. package/src/core/context.ts +0 -212
  109. package/src/core/types.ts +0 -184
  110. package/src/templates/index.ts +0 -162
  111. package/src/types/gradient-string.d.ts +0 -25
  112. package/src/ui/colors.ts +0 -139
  113. package/src/ui/output.ts +0 -230
  114. package/src/ui/prompts.ts +0 -170
  115. package/src/ui/spinners.ts +0 -95
  116. package/src/ui/types.ts +0 -41
  117. package/src/utils/filesystem.ts +0 -222
  118. package/src/utils/logger.ts +0 -67
  119. package/src/utils/object.ts +0 -456
  120. package/src/utils/validation.ts +0 -345
  121. package/tsconfig.json +0 -25
@@ -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;AAkHH,wBAAgB,MAAM,IAAI,IAAI,CAqC7B"}
@@ -0,0 +1,157 @@
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
+ import { readFileSync } from 'fs';
12
+ import { join, dirname } from 'path';
13
+ import { fileURLToPath } from 'url';
14
+ // Get version from package.json
15
+ function getVersion() {
16
+ try {
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const pkgPath = join(__dirname, '../../package.json');
19
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
20
+ return pkg.version || '1.0.0';
21
+ }
22
+ catch {
23
+ return '1.0.0';
24
+ }
25
+ }
26
+ const version = getVersion();
27
+ const cli = cac('andrud');
28
+ cli.version(version);
29
+ // Clean minimal help
30
+ function printHelp() {
31
+ console.log('');
32
+ console.log(` ${pc.cyan('andrud')} - Android Project Scaffolding`);
33
+ console.log('');
34
+ console.log(` ${pc.gray('andrud create')} Create a new project`);
35
+ console.log(` ${pc.gray('andrud list')} Show available templates`);
36
+ console.log(` ${pc.gray('andrud info <template>')} View template details`);
37
+ console.log('');
38
+ console.log(` ${pc.gray('andrud create MyApp')} Create with name`);
39
+ console.log('');
40
+ }
41
+ // Commands
42
+ cli
43
+ .command('create', 'Create a new Android project')
44
+ .alias('c')
45
+ .option('-f, --force', 'Overwrite existing files')
46
+ .example('andrud create')
47
+ .example('andrud create --force')
48
+ .action(createCommand);
49
+ cli
50
+ .command('new [name]', 'Create a new project')
51
+ .alias('n')
52
+ .option('-t, --template <type>', 'Template type')
53
+ .option('-p, --package <name>', 'Package name')
54
+ .option('-f, --force', 'Overwrite')
55
+ .example('andrud new MyApp -t kotlin-compose')
56
+ .action(createNewCommand);
57
+ cli
58
+ .command('init', 'Initialize in current directory')
59
+ .alias('i')
60
+ .option('-f, --force', 'Overwrite')
61
+ .example('andrud init')
62
+ .action(createInitCommand);
63
+ cli
64
+ .command('info [template]', 'Show template info')
65
+ .example('andrud info kotlin-compose')
66
+ .action(createInfoCommand);
67
+ cli
68
+ .command('list', 'List all templates')
69
+ .alias('ls')
70
+ .option('--json', 'Output as JSON')
71
+ .action(createListCommand);
72
+ cli
73
+ .command('update', 'Check for updates')
74
+ .action(async () => {
75
+ const updateNotifier = await import('update-notifier');
76
+ const pkg = { name: 'andrud', version };
77
+ const notifier = updateNotifier.default({ pkg });
78
+ if (notifier.update) {
79
+ console.log(` ${pc.yellow('Update available:')} ${pc.cyan(notifier.update.latest)}`);
80
+ console.log(` ${pc.gray('Current:')} ${version}`);
81
+ console.log('');
82
+ console.log(` Run ${pc.cyan('npm install -g andrud')} to update`);
83
+ console.log('');
84
+ console.log(` Options:`);
85
+ console.log(` ${pc.gray('--skip')} Skip this update`);
86
+ console.log(` ${pc.gray('--never')} Never remind again`);
87
+ }
88
+ else {
89
+ console.log(` ${pc.green('You are on the latest version:')} ${version}`);
90
+ }
91
+ });
92
+ cli.on('command:!', () => {
93
+ console.error(pc.red(` Unknown command. See ${pc.cyan('--help')}\n`));
94
+ });
95
+ process.on('uncaughtException', (error) => {
96
+ console.error(pc.red(` ${error.message}\n`));
97
+ process.exit(1);
98
+ });
99
+ process.on('unhandledRejection', (reason) => {
100
+ console.error(pc.red(` ${reason}\n`));
101
+ process.exit(1);
102
+ });
103
+ export function runCli() {
104
+ try {
105
+ const args = process.argv.slice(2);
106
+ // Show help
107
+ if (args.includes('--help') || args.includes('-h')) {
108
+ printHelp();
109
+ return;
110
+ }
111
+ // Show version
112
+ if (args.includes('--version') || args.includes('-V')) {
113
+ console.log(version);
114
+ return;
115
+ }
116
+ // Check for updates in background (non-blocking)
117
+ if (!args.includes('update')) {
118
+ checkForUpdates();
119
+ }
120
+ // Quick help on no args
121
+ if (args.length === 0) {
122
+ console.log('');
123
+ console.log(` ${pc.cyan('andrud')} - Create Android projects`);
124
+ console.log('');
125
+ console.log(` ${pc.gray('andrud create')} Start interactive setup`);
126
+ console.log(` ${pc.gray('andrud --help')} Show all commands`);
127
+ console.log('');
128
+ return;
129
+ }
130
+ cli.parse(process.argv, { run: true });
131
+ }
132
+ catch (error) {
133
+ console.error(pc.red(` ${error.message}\n`));
134
+ process.exit(1);
135
+ }
136
+ }
137
+ // Check for updates (non-blocking)
138
+ async function checkForUpdates() {
139
+ try {
140
+ const updateNotifier = await import('update-notifier');
141
+ const pkg = { name: 'andrud', version };
142
+ const notifier = updateNotifier.default({ pkg });
143
+ notifier.notify({
144
+ defer: true,
145
+ isGlobal: true,
146
+ updateConfig: {
147
+ behavior: 'default',
148
+ excludePrerelease: true
149
+ }
150
+ });
151
+ }
152
+ catch {
153
+ // Silently fail - don't interrupt user
154
+ }
155
+ }
156
+ // Note: runCli() is called from bin/andrud.js
157
+ //# 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"}