kappmaker 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +232 -8
  2. package/dist/cli.js +60 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/android-release-build.d.ts +7 -0
  5. package/dist/commands/android-release-build.js +51 -0
  6. package/dist/commands/android-release-build.js.map +1 -0
  7. package/dist/commands/create.js +14 -19
  8. package/dist/commands/create.js.map +1 -1
  9. package/dist/commands/generate-keystore.d.ts +7 -0
  10. package/dist/commands/generate-keystore.js +14 -0
  11. package/dist/commands/generate-keystore.js.map +1 -0
  12. package/dist/commands/publish.d.ts +10 -0
  13. package/dist/commands/publish.js +38 -0
  14. package/dist/commands/publish.js.map +1 -0
  15. package/dist/commands/refactor.d.ts +9 -0
  16. package/dist/commands/refactor.js +9 -0
  17. package/dist/commands/refactor.js.map +1 -0
  18. package/dist/commands/update-version.d.ts +5 -0
  19. package/dist/commands/update-version.js +21 -0
  20. package/dist/commands/update-version.js.map +1 -0
  21. package/dist/services/fastlane.service.js +20 -8
  22. package/dist/services/fastlane.service.js.map +1 -1
  23. package/dist/services/gradle.service.d.ts +0 -3
  24. package/dist/services/gradle.service.js +0 -24
  25. package/dist/services/gradle.service.js.map +1 -1
  26. package/dist/services/keystore.service.d.ts +6 -0
  27. package/dist/services/keystore.service.js +44 -0
  28. package/dist/services/keystore.service.js.map +1 -0
  29. package/dist/services/publish.service.d.ts +10 -0
  30. package/dist/services/publish.service.js +59 -0
  31. package/dist/services/publish.service.js.map +1 -0
  32. package/dist/services/refactor.service.d.ts +3 -0
  33. package/dist/services/refactor.service.js +192 -0
  34. package/dist/services/refactor.service.js.map +1 -0
  35. package/dist/services/version.service.d.ts +10 -0
  36. package/dist/services/version.service.js +75 -0
  37. package/dist/services/version.service.js.map +1 -0
  38. package/dist/types/index.d.ts +1 -0
  39. package/dist/utils/config.js +1 -0
  40. package/dist/utils/config.js.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-keystore.js","sourceRoot":"","sources":["../../src/commands/generate-keystore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAgC;IAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAEhD,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,10 @@
1
+ interface PublishCommandOptions {
2
+ platform: string[];
3
+ track: string;
4
+ uploadMetadata: boolean;
5
+ uploadScreenshots: boolean;
6
+ uploadImages: boolean;
7
+ submitForReview: boolean;
8
+ }
9
+ export declare function publishCommand(options: PublishCommandOptions): Promise<void>;
10
+ export {};
@@ -0,0 +1,38 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { logger } from '../utils/logger.js';
4
+ import { resolveMobileDir } from '../services/version.service.js';
5
+ import { loadConfig } from '../utils/config.js';
6
+ import { publishAndroid, publishIos } from '../services/publish.service.js';
7
+ export async function publishCommand(options) {
8
+ const mobileDir = resolveMobileDir();
9
+ const config = await loadConfig();
10
+ // Check Fastlane prerequisites
11
+ const gemfilePath = path.join(mobileDir, 'Gemfile');
12
+ const fastfilePath = path.join(mobileDir, 'fastlane', 'Fastfile');
13
+ if (!(await fs.pathExists(gemfilePath))) {
14
+ logger.error('Gemfile not found — Fastlane/Bundler is required for publishing.');
15
+ process.exit(1);
16
+ }
17
+ if (!(await fs.pathExists(fastfilePath))) {
18
+ logger.error('fastlane/Fastfile not found — required for publishing.');
19
+ process.exit(1);
20
+ }
21
+ const platforms = options.platform.length > 0
22
+ ? options.platform
23
+ : ['android', 'ios'];
24
+ const pubOptions = {
25
+ track: options.track,
26
+ uploadMetadata: options.uploadMetadata,
27
+ uploadScreenshots: options.uploadScreenshots,
28
+ uploadImages: options.uploadImages,
29
+ submitForReview: options.submitForReview,
30
+ };
31
+ if (platforms.includes('android')) {
32
+ await publishAndroid(mobileDir, pubOptions, config);
33
+ }
34
+ if (platforms.includes('ios')) {
35
+ await publishIos(mobileDir, pubOptions, config);
36
+ }
37
+ }
38
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAY5E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IACjE,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,+BAA+B;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAClE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,QAAQ;QAClB,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAEvB,MAAM,UAAU,GAAmB;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC;IAEF,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAClC,MAAM,cAAc,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,MAAM,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ interface RefactorOptions {
2
+ appId: string;
3
+ appName: string;
4
+ oldAppId?: string;
5
+ oldAppName?: string;
6
+ skipPackageRename?: boolean;
7
+ }
8
+ export declare function refactorCommand(options: RefactorOptions): Promise<void>;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { resolveMobileDir } from '../services/version.service.js';
3
+ import { refactor } from '../services/refactor.service.js';
4
+ export async function refactorCommand(options) {
5
+ const mobileDir = resolveMobileDir();
6
+ logger.info(`Mobile app directory: ${mobileDir}`);
7
+ await refactor(mobileDir, options.appId, options.appName, options.skipPackageRename ?? false, options.oldAppId, options.oldAppName);
8
+ }
9
+ //# sourceMappingURL=refactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.js","sourceRoot":"","sources":["../../src/commands/refactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAU3D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAwB;IAC5D,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC;IAClD,MAAM,QAAQ,CACZ,SAAS,EACT,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,iBAAiB,IAAI,KAAK,EAClC,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,UAAU,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ interface UpdateVersionOptions {
2
+ version?: string;
3
+ }
4
+ export declare function updateVersion(options: UpdateVersionOptions): Promise<void>;
5
+ export {};
@@ -0,0 +1,21 @@
1
+ import { logger } from '../utils/logger.js';
2
+ import { resolveMobileDir, updateAndroidVersion, updateIosVersion, } from '../services/version.service.js';
3
+ export async function updateVersion(options) {
4
+ const mobileDir = resolveMobileDir();
5
+ const newVersionName = options.version;
6
+ const android = await updateAndroidVersion(mobileDir, newVersionName);
7
+ if (android) {
8
+ logger.success(`Android: versionCode ${android.oldCode} → ${android.newCode}, ` +
9
+ `versionName "${android.oldName}" → "${android.newName}"`);
10
+ }
11
+ const ios = await updateIosVersion(mobileDir, newVersionName);
12
+ if (ios) {
13
+ logger.success(`iOS: version ${ios.oldCode} → ${ios.newCode}, ` +
14
+ `marketing "${ios.oldName}" → "${ios.newName}"`);
15
+ }
16
+ if (!android && !ios) {
17
+ logger.error('No platform files found — nothing was updated.');
18
+ process.exit(1);
19
+ }
20
+ }
21
+ //# sourceMappingURL=update-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-version.js","sourceRoot":"","sources":["../../src/commands/update-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;IACrC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAEvC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACtE,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,OAAO,CACZ,wBAAwB,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,OAAO,IAAI;YAChE,gBAAgB,OAAO,CAAC,OAAO,QAAQ,OAAO,CAAC,OAAO,GAAG,CAC1D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAC9D,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,OAAO,CACZ,gBAAgB,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,OAAO,IAAI;YAChD,cAAc,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,OAAO,GAAG,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,20 +1,32 @@
1
1
  import path from 'node:path';
2
2
  import fs from 'fs-extra';
3
3
  import { run } from '../utils/exec.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { hasKeystore, generateKeystore } from './keystore.service.js';
4
6
  export async function firstTimeBuild(mobileDir, organization) {
5
- await run('bundle', [
6
- 'exec',
7
- 'fastlane',
8
- 'android',
9
- 'first_time_build',
10
- `organization:${organization}`,
11
- ], {
7
+ // Ensure keystore exists
8
+ if (!(await hasKeystore(mobileDir))) {
9
+ logger.info('Keystore not found — generating a new one...');
10
+ await generateKeystore(mobileDir, '', organization);
11
+ }
12
+ // Build AAB
13
+ await run('./gradlew', [':composeApp:bundleRelease'], {
12
14
  cwd: mobileDir,
13
- label: 'Running Fastlane first_time_build for Android',
15
+ label: 'Building Android release AAB (this may take a few minutes)',
14
16
  });
17
+ // Copy AAB to distribution
18
+ const builtAab = path.join(mobileDir, 'composeApp', 'build', 'outputs', 'bundle', 'release', 'composeApp-release.aab');
19
+ if (await fs.pathExists(builtAab)) {
20
+ const outputDir = path.join(mobileDir, 'distribution', 'android');
21
+ await fs.ensureDir(outputDir);
22
+ const outputPath = path.join(outputDir, 'app-release.aab');
23
+ await fs.copy(builtAab, outputPath, { overwrite: true });
24
+ logger.success(`AAB copied to ${outputPath}`);
25
+ }
15
26
  }
16
27
  export async function findAabPath(mobileDir) {
17
28
  const searchDirs = [
29
+ path.join(mobileDir, 'distribution', 'android'),
18
30
  path.join(mobileDir, 'composeApp', 'build', 'outputs', 'bundle', 'release'),
19
31
  path.join(mobileDir, 'composeApp', 'build', 'outputs', 'bundle'),
20
32
  path.join(mobileDir, 'app', 'build', 'outputs', 'bundle', 'release'),
@@ -1 +1 @@
1
- {"version":3,"file":"fastlane.service.js","sourceRoot":"","sources":["../../src/services/fastlane.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,YAAoB;IAEpB,MAAM,GAAG,CACP,QAAQ,EACR;QACE,MAAM;QACN,UAAU;QACV,SAAS;QACT,kBAAkB;QAClB,gBAAgB,YAAY,EAAE;KAC/B,EACD;QACE,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,+CAA+C;KACvD,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;KACrE,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"fastlane.service.js","sourceRoot":"","sources":["../../src/services/fastlane.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,YAAoB;IAEpB,yBAAyB;IACzB,IAAI,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC;IAED,YAAY;IACZ,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,2BAA2B,CAAC,EAAE;QACpD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,4DAA4D;KACpE,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACvH,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC3D,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC3E,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;KACrE,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,IAAI,GAAG;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,5 +1,2 @@
1
- import type { DerivedConfig } from '../types/index.js';
2
- export declare function hasRefactorPackageTask(mobileDir: string): Promise<boolean>;
3
- export declare function refactorPackage(config: DerivedConfig, mobileDir: string, shouldUpdatePackageName: boolean): Promise<void>;
4
1
  export declare function createLocalProperties(mobileDir: string, androidSdkPath: string): Promise<void>;
5
2
  export declare function cleanAndBuild(mobileDir: string): Promise<void>;
@@ -1,31 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import fs from 'fs-extra';
3
- import { execa } from 'execa';
4
3
  import { run } from '../utils/exec.js';
5
4
  import { logger } from '../utils/logger.js';
6
- export async function hasRefactorPackageTask(mobileDir) {
7
- const gradlewPath = path.join(mobileDir, 'gradlew');
8
- if (!(await fs.pathExists(gradlewPath)))
9
- return false;
10
- try {
11
- const { stdout } = await execa('./gradlew', ['tasks', '--all'], { cwd: mobileDir });
12
- return stdout.includes('refactorPackage');
13
- }
14
- catch {
15
- return false;
16
- }
17
- }
18
- export async function refactorPackage(config, mobileDir, shouldUpdatePackageName) {
19
- await run('./gradlew', [
20
- 'refactorPackage',
21
- `-PnewAppId=${config.packageName}`,
22
- `-PnewAppName=${config.appName}`,
23
- `-PshouldUpdatePackageName=${shouldUpdatePackageName}`,
24
- ], {
25
- cwd: mobileDir,
26
- label: 'Running Gradle refactor (setting package name and app name)',
27
- });
28
- }
29
5
  export async function createLocalProperties(mobileDir, androidSdkPath) {
30
6
  const propsPath = path.join(mobileDir, 'local.properties');
31
7
  await fs.writeFile(propsPath, `sdk.dir=${androidSdkPath}\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"gradle.service.js","sourceRoot":"","sources":["../../src/services/gradle.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QACpF,OAAO,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAqB,EACrB,SAAiB,EACjB,uBAAgC;IAEhC,MAAM,GAAG,CACP,WAAW,EACX;QACE,iBAAiB;QACjB,cAAc,MAAM,CAAC,WAAW,EAAE;QAClC,gBAAgB,MAAM,CAAC,OAAO,EAAE;QAChC,6BAA6B,uBAAuB,EAAE;KACvD,EACD;QACE,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,6DAA6D;KACrE,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,cAAsB;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,cAAc,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;QAC/C,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,sBAAsB;KAC9B,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE;QACvD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,4DAA4D;KACpE,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"gradle.service.js","sourceRoot":"","sources":["../../src/services/gradle.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,cAAsB;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC3D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,cAAc,IAAI,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,EAAE;QAC/C,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,sBAAsB;KAC9B,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE;QACvD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,4DAA4D;KACpE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface KeystoreResult {
2
+ keystorePath: string;
3
+ propertiesPath: string;
4
+ }
5
+ export declare function hasKeystore(mobileDir: string): Promise<boolean>;
6
+ export declare function generateKeystore(mobileDir: string, firstName: string, organization: string, outputDir?: string): Promise<KeystoreResult>;
@@ -0,0 +1,44 @@
1
+ import path from 'path';
2
+ import crypto from 'crypto';
3
+ import fs from 'fs-extra';
4
+ import { run } from '../utils/exec.js';
5
+ import { logger } from '../utils/logger.js';
6
+ const KEY_ALIAS = 'aliasKey';
7
+ const KEY_VALIDITY = 10000;
8
+ export async function hasKeystore(mobileDir) {
9
+ const propsPath = path.join(mobileDir, 'distribution', 'android', 'keystore', 'keystore.properties');
10
+ return fs.pathExists(propsPath);
11
+ }
12
+ export async function generateKeystore(mobileDir, firstName, organization, outputDir) {
13
+ const keystoreDir = outputDir
14
+ ? path.resolve(outputDir)
15
+ : path.join(mobileDir, 'distribution', 'android', 'keystore');
16
+ const keystorePath = path.join(keystoreDir, 'keystore.jks');
17
+ const propertiesPath = path.join(keystoreDir, 'keystore.properties');
18
+ await fs.ensureDir(keystoreDir);
19
+ const password = crypto.randomBytes(18).toString('base64url').slice(0, 24);
20
+ await run('keytool', [
21
+ '-genkeypair',
22
+ '-v',
23
+ '-keystore', keystorePath,
24
+ '-storepass', password,
25
+ '-alias', KEY_ALIAS,
26
+ '-keypass', password,
27
+ '-keyalg', 'RSA',
28
+ '-keysize', '2048',
29
+ '-validity', String(KEY_VALIDITY),
30
+ '-dname', `CN=${firstName}, O=${organization}`,
31
+ ], { label: 'Generating Android keystore' });
32
+ const propsContent = [
33
+ `keystorePassword=${password}`,
34
+ `keyPassword=${password}`,
35
+ `keyAlias=${KEY_ALIAS}`,
36
+ `storeFile=../distribution/android/keystore/keystore.jks`,
37
+ '',
38
+ ].join('\n');
39
+ await fs.writeFile(propertiesPath, propsContent, 'utf8');
40
+ logger.success(`Keystore: ${keystorePath}`);
41
+ logger.success(`Properties: ${propertiesPath}`);
42
+ return { keystorePath, propertiesPath };
43
+ }
44
+ //# sourceMappingURL=keystore.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keystore.service.js","sourceRoot":"","sources":["../../src/services/keystore.service.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,YAAY,GAAG,KAAK,CAAC;AAO3B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACrG,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,SAAiB,EACjB,YAAoB,EACpB,SAAkB;IAElB,MAAM,WAAW,GAAG,SAAS;QAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAEhE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IAErE,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAEhC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,MAAM,GAAG,CACP,SAAS,EACT;QACE,aAAa;QACb,IAAI;QACJ,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,QAAQ;QACtB,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC;QACjC,QAAQ,EAAE,MAAM,SAAS,OAAO,YAAY,EAAE;KAC/C,EACD,EAAE,KAAK,EAAE,6BAA6B,EAAE,CACzC,CAAC;IAEF,MAAM,YAAY,GAAG;QACnB,oBAAoB,QAAQ,EAAE;QAC9B,eAAe,QAAQ,EAAE;QACzB,YAAY,SAAS,EAAE;QACvB,yDAAyD;QACzD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,CAAC,aAAa,YAAY,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,CAAC,eAAe,cAAc,EAAE,CAAC,CAAC;IAEhD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { KAppMakerConfig } from '../types/index.js';
2
+ export interface PublishOptions {
3
+ track: string;
4
+ uploadMetadata: boolean;
5
+ uploadScreenshots: boolean;
6
+ uploadImages: boolean;
7
+ submitForReview: boolean;
8
+ }
9
+ export declare function publishAndroid(mobileDir: string, options: PublishOptions, config: KAppMakerConfig): Promise<void>;
10
+ export declare function publishIos(mobileDir: string, options: PublishOptions, config: KAppMakerConfig): Promise<void>;
@@ -0,0 +1,59 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { runStreaming } from '../utils/exec.js';
4
+ import { logger } from '../utils/logger.js';
5
+ import { getConfigDir } from '../utils/config.js';
6
+ async function ensureAppStorePublisherJson(config) {
7
+ if (!config.ascKeyId || !config.ascIssuerId || !config.ascPrivateKeyPath) {
8
+ logger.error('iOS publishing requires ascKeyId, ascIssuerId, and ascPrivateKeyPath in config.');
9
+ logger.info('Run: kappmaker config set ascKeyId <key-id>');
10
+ logger.info('Run: kappmaker config set ascIssuerId <issuer-id>');
11
+ logger.info('Run: kappmaker config set ascPrivateKeyPath /path/to/AuthKey.p8');
12
+ process.exit(1);
13
+ }
14
+ const p8Path = path.resolve(config.ascPrivateKeyPath);
15
+ if (!(await fs.pathExists(p8Path))) {
16
+ logger.error(`Private key file not found: ${p8Path}`);
17
+ process.exit(1);
18
+ }
19
+ const keyContent = await fs.readFile(p8Path, 'utf8');
20
+ const publisherJson = {
21
+ key_id: config.ascKeyId,
22
+ issuer_id: config.ascIssuerId,
23
+ key: keyContent.trim(),
24
+ };
25
+ const outputPath = path.join(getConfigDir(), 'appstore-publisher.json');
26
+ await fs.writeJson(outputPath, publisherJson, { spaces: 2 });
27
+ return outputPath;
28
+ }
29
+ export async function publishAndroid(mobileDir, options, config) {
30
+ const serviceAccountPath = path.resolve(config.googleServiceAccountPath);
31
+ if (!(await fs.pathExists(serviceAccountPath))) {
32
+ logger.error(`Google Play service account not found: ${serviceAccountPath}`);
33
+ logger.info('Run: kappmaker config set googleServiceAccountPath /path/to/service-account.json');
34
+ process.exit(1);
35
+ }
36
+ logger.info(`Publishing Android to ${options.track} track...`);
37
+ await runStreaming('bundle', [
38
+ 'exec', 'fastlane', 'android', 'playstore_release',
39
+ `track:${options.track}`,
40
+ `service_account:${serviceAccountPath}`,
41
+ `upload_metadata:${options.uploadMetadata}`,
42
+ `upload_screenshots:${options.uploadScreenshots}`,
43
+ `upload_images:${options.uploadImages}`,
44
+ `submit_for_review:${options.submitForReview}`,
45
+ ], { cwd: mobileDir, label: 'Fastlane: Android Play Store release' });
46
+ logger.success('Android publish complete!');
47
+ }
48
+ export async function publishIos(mobileDir, options, config) {
49
+ const apiKeyPath = await ensureAppStorePublisherJson(config);
50
+ logger.info('Publishing iOS to App Store...');
51
+ await runStreaming('bundle', [
52
+ 'exec', 'fastlane', 'ios', 'appstore_release',
53
+ `upload_metadata:${options.uploadMetadata}`,
54
+ `upload_screenshots:${options.uploadScreenshots}`,
55
+ `submit_for_review:${options.submitForReview}`,
56
+ ], { cwd: mobileDir, label: 'Fastlane: iOS App Store release' });
57
+ logger.success('iOS publish complete!');
58
+ }
59
+ //# sourceMappingURL=publish.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.service.js","sourceRoot":"","sources":["../../src/services/publish.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const DEFAULT_OLD_APP_ID = "com.measify.kappmaker";
2
+ export declare const DEFAULT_OLD_APP_NAME = "KAppMakerAllModules";
3
+ export declare function refactor(mobileDir: string, newAppId: string, newAppName: string, skipPackageRename: boolean, oldAppId?: string, oldAppName?: string): Promise<void>;
@@ -0,0 +1,192 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { logger } from '../utils/logger.js';
4
+ export const DEFAULT_OLD_APP_ID = 'com.measify.kappmaker';
5
+ export const DEFAULT_OLD_APP_NAME = 'KAppMakerAllModules';
6
+ const SOURCE_DIRS = [
7
+ 'src/commonMain/kotlin',
8
+ 'src/commonTest/kotlin',
9
+ 'src/androidMain/kotlin',
10
+ 'src/iosMain/kotlin',
11
+ 'src/jvmMain/kotlin',
12
+ 'src/nonMobileMain/kotlin',
13
+ 'src/mobileMain/kotlin',
14
+ 'src/webMain/kotlin',
15
+ 'src/nonWebMain/kotlin',
16
+ 'src/jsMain/kotlin',
17
+ 'src/wasmJsMain/kotlin',
18
+ ];
19
+ const FILE_EXTENSIONS = ['kt', 'kts', 'gradle', 'xml', 'json'];
20
+ async function replaceInFile(filePath, oldStr, newStr) {
21
+ if (!(await fs.pathExists(filePath)))
22
+ return false;
23
+ const content = await fs.readFile(filePath, 'utf8');
24
+ const updated = content.replaceAll(oldStr, newStr);
25
+ if (content !== updated) {
26
+ await fs.writeFile(filePath, updated, 'utf8');
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+ async function walkFiles(dir, extensions) {
32
+ const results = [];
33
+ if (!(await fs.pathExists(dir)))
34
+ return results;
35
+ const entries = await fs.readdir(dir, { withFileTypes: true });
36
+ for (const entry of entries) {
37
+ const fullPath = path.join(dir, entry.name);
38
+ if (entry.isDirectory()) {
39
+ results.push(...await walkFiles(fullPath, extensions));
40
+ }
41
+ else if (extensions.some(ext => entry.name.endsWith(`.${ext}`))) {
42
+ results.push(fullPath);
43
+ }
44
+ }
45
+ return results;
46
+ }
47
+ async function updatePackageNamesInFiles(composeDir, oldId, newId) {
48
+ for (const dir of SOURCE_DIRS) {
49
+ const rootDir = path.join(composeDir, dir);
50
+ const files = await walkFiles(rootDir, FILE_EXTENSIONS);
51
+ for (const file of files) {
52
+ if (await replaceInFile(file, oldId, newId)) {
53
+ logger.info(`Updated package in: ${path.relative(composeDir, file)}`);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ async function movePackageDirectories(composeDir, oldId, newId) {
59
+ const oldPkgDir = oldId.replace(/\./g, '/');
60
+ const newPkgDir = newId.replace(/\./g, '/');
61
+ for (const dir of SOURCE_DIRS) {
62
+ const sourceDir = path.join(composeDir, dir);
63
+ if (!(await fs.pathExists(sourceDir)))
64
+ continue;
65
+ const oldPath = path.join(sourceDir, oldPkgDir);
66
+ const newPath = path.join(sourceDir, newPkgDir);
67
+ if (!(await fs.pathExists(oldPath)))
68
+ continue;
69
+ if (await fs.pathExists(newPath)) {
70
+ logger.warn(`Target already exists: ${newPath} — skipping move`);
71
+ continue;
72
+ }
73
+ await fs.ensureDir(path.dirname(newPath));
74
+ await fs.copy(oldPath, newPath);
75
+ await fs.remove(oldPath);
76
+ logger.info(`Moved: ${path.relative(composeDir, oldPath)} → ${path.relative(composeDir, newPath)}`);
77
+ }
78
+ }
79
+ async function updateGradleFiles(mobileDir, oldId, newId) {
80
+ const files = [
81
+ 'composeApp/build.gradle.kts',
82
+ 'designsystem/build.gradle.kts',
83
+ 'gradle/scripts/generateNewScreen.gradle.kts',
84
+ 'scripts/make_local.sh',
85
+ 'scripts/create_module.sh',
86
+ ];
87
+ for (const f of files) {
88
+ if (await replaceInFile(path.join(mobileDir, f), oldId, newId)) {
89
+ logger.info(`Updated: ${f}`);
90
+ }
91
+ }
92
+ }
93
+ async function updateApplicationIdOnly(mobileDir, newId) {
94
+ const buildFile = path.join(mobileDir, 'composeApp', 'build.gradle.kts');
95
+ if (!(await fs.pathExists(buildFile)))
96
+ return;
97
+ const content = await fs.readFile(buildFile, 'utf8');
98
+ const updated = content.replace(/applicationId\s*=\s*["'][^"']+["']/, `applicationId = "${newId}"`);
99
+ if (content !== updated) {
100
+ await fs.writeFile(buildFile, updated, 'utf8');
101
+ logger.info('Updated applicationId in build.gradle.kts');
102
+ }
103
+ }
104
+ async function updateFirebaseConfigs(mobileDir, oldId, newId) {
105
+ const files = [
106
+ 'composeApp/google-services.json',
107
+ 'iosApp/iosApp/GoogleService-Info.plist',
108
+ ];
109
+ for (const f of files) {
110
+ if (await replaceInFile(path.join(mobileDir, f), oldId, newId)) {
111
+ logger.info(`Updated: ${f}`);
112
+ }
113
+ }
114
+ }
115
+ async function updateIosFiles(mobileDir, oldId, newId) {
116
+ const files = [
117
+ 'iosApp/iosApp/Info.plist',
118
+ 'iosApp/iosApp.xcodeproj/project.pbxproj',
119
+ ];
120
+ for (const f of files) {
121
+ if (await replaceInFile(path.join(mobileDir, f), oldId, newId)) {
122
+ logger.info(`Updated: ${f}`);
123
+ }
124
+ }
125
+ }
126
+ async function updateGithubWorkflows(mobileDir, oldId, newId) {
127
+ const files = [
128
+ '.github/workflows/publish_android_playstore.yml',
129
+ '.github/workflows/publish_ios_appstore.yml',
130
+ ];
131
+ for (const f of files) {
132
+ if (await replaceInFile(path.join(mobileDir, f), oldId, newId)) {
133
+ logger.info(`Updated: ${f}`);
134
+ }
135
+ }
136
+ }
137
+ async function cleanUpOldDirectories(composeDir, oldId, newId) {
138
+ const oldParent = oldId.replace(/\./g, '/').replace(/\/[^/]+$/, '');
139
+ const newParent = newId.replace(/\./g, '/').replace(/\/[^/]+$/, '');
140
+ if (oldParent === newParent)
141
+ return;
142
+ for (const dir of SOURCE_DIRS) {
143
+ const sourceDir = path.join(composeDir, dir);
144
+ const oldPath = path.join(sourceDir, oldParent);
145
+ if (await fs.pathExists(oldPath)) {
146
+ await fs.remove(oldPath);
147
+ logger.info(`Cleaned up: ${path.relative(composeDir, oldPath)}`);
148
+ }
149
+ }
150
+ }
151
+ async function updateAppName(mobileDir, oldName, newName) {
152
+ const files = [
153
+ 'composeApp/src/androidMain/AndroidManifest.xml',
154
+ 'settings.gradle.kts',
155
+ 'iosApp/iosApp.xcodeproj/project.pbxproj',
156
+ '.github/workflows/publish_ios_appstore.yml',
157
+ 'composeApp/src/webMain/resources/index.html',
158
+ `composeApp/src/jvmMain/kotlin/com/measify/kappmaker/main.kt`,
159
+ `composeApp/src/jvmMain/kotlin/com/measify/kappmaker/util/AppUtilImpl.jvm.kt`,
160
+ ];
161
+ for (const f of files) {
162
+ if (await replaceInFile(path.join(mobileDir, f), oldName, newName)) {
163
+ logger.info(`Updated app name in: ${f}`);
164
+ }
165
+ }
166
+ }
167
+ export async function refactor(mobileDir, newAppId, newAppName, skipPackageRename, oldAppId = DEFAULT_OLD_APP_ID, oldAppName = DEFAULT_OLD_APP_NAME) {
168
+ const composeDir = path.join(mobileDir, 'composeApp');
169
+ logger.info(`Refactoring from ${oldAppId} → ${newAppId}, ${oldAppName} → ${newAppName}`);
170
+ if (!skipPackageRename) {
171
+ logger.info('Updating package names in source files...');
172
+ await updatePackageNamesInFiles(composeDir, oldAppId, newAppId);
173
+ logger.info('Moving package directories...');
174
+ await movePackageDirectories(composeDir, oldAppId, newAppId);
175
+ await updateGradleFiles(mobileDir, oldAppId, newAppId);
176
+ await updateFirebaseConfigs(mobileDir, oldAppId, newAppId);
177
+ await updateIosFiles(mobileDir, oldAppId, newAppId);
178
+ await updateGithubWorkflows(mobileDir, oldAppId, newAppId);
179
+ await cleanUpOldDirectories(composeDir, oldAppId, newAppId);
180
+ await updateAppName(mobileDir, oldAppName, newAppName);
181
+ }
182
+ else {
183
+ logger.info('Skipping package rename — updating IDs and app name only...');
184
+ await updateApplicationIdOnly(mobileDir, newAppId);
185
+ await updateFirebaseConfigs(mobileDir, oldAppId, newAppId);
186
+ await updateIosFiles(mobileDir, oldAppId, newAppId);
187
+ await updateGithubWorkflows(mobileDir, oldAppId, newAppId);
188
+ await updateAppName(mobileDir, oldAppName, newAppName);
189
+ }
190
+ logger.success('Package refactoring completed.');
191
+ }
192
+ //# sourceMappingURL=refactor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refactor.service.js","sourceRoot":"","sources":["../../src/services/refactor.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface VersionResult {
2
+ oldCode: number;
3
+ newCode: number;
4
+ oldName: string;
5
+ newName: string;
6
+ }
7
+ export declare function resolveMobileDir(): string;
8
+ export declare function incrementPatch(version: string): string;
9
+ export declare function updateAndroidVersion(mobileDir: string, newVersionName?: string): Promise<VersionResult | null>;
10
+ export declare function updateIosVersion(mobileDir: string, newVersionName?: string): Promise<VersionResult | null>;