expo-release-it 0.1.1 → 0.1.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 (65) hide show
  1. package/build/command/build.js +119 -95
  2. package/build/command/build.js.map +1 -1
  3. package/build/command/bump.js +33 -27
  4. package/build/command/bump.js.map +1 -1
  5. package/build/command/init.js +75 -63
  6. package/build/command/init.js.map +1 -1
  7. package/build/command/pull.d.ts +5 -0
  8. package/build/command/pull.js +525 -0
  9. package/build/command/pull.js.map +1 -0
  10. package/build/command/submit.js +102 -85
  11. package/build/command/submit.js.map +1 -1
  12. package/build/command/upload.js +117 -105
  13. package/build/command/upload.js.map +1 -1
  14. package/build/index.js +328 -240
  15. package/build/index.js.map +1 -1
  16. package/build/util/FastlaneOption.js +9 -14
  17. package/build/util/FastlaneOption.js.map +1 -1
  18. package/build/util/FileUtil.d.ts +2 -1
  19. package/build/util/FileUtil.js +4 -0
  20. package/build/util/FileUtil.js.map +1 -1
  21. package/build/util/OptionHolder.d.ts +1 -2
  22. package/build/util/OptionHolder.js +7 -8
  23. package/build/util/OptionHolder.js.map +1 -1
  24. package/build/util/generateAppStoreConnectApiKeyFile.d.ts +3 -0
  25. package/build/util/{setup/promptCommonInputs.js → generateAppStoreConnectApiKeyFile.js} +36 -20
  26. package/build/util/generateAppStoreConnectApiKeyFile.js.map +1 -0
  27. package/build/util/injectTemplatePlaceHolders.js +8 -11
  28. package/build/util/injectTemplatePlaceHolders.js.map +1 -1
  29. package/build/util/input/InqueryInputs.js +7 -8
  30. package/build/util/input/InqueryInputs.js.map +1 -1
  31. package/build/util/iterateAllFiles.js.map +1 -1
  32. package/build/util/logger.d.ts +1 -0
  33. package/build/util/logger.js +1 -0
  34. package/build/util/logger.js.map +1 -1
  35. package/build/util/{VersionUtil.js → setup/VersionUtil.js} +9 -9
  36. package/build/util/setup/VersionUtil.js.map +1 -0
  37. package/build/util/setup/execShellScript.d.ts +19 -0
  38. package/build/util/setup/execShellScript.js +19 -0
  39. package/build/util/setup/execShellScript.js.map +1 -0
  40. package/build/util/{hydrateKeyholderFileValues.js → setup/hydrateKeyholderFileValues.js} +14 -10
  41. package/build/util/setup/hydrateKeyholderFileValues.js.map +1 -0
  42. package/build/util/setup/prepareAndroid.js +64 -37
  43. package/build/util/setup/prepareAndroid.js.map +1 -1
  44. package/build/util/setup/prepareIos.js +63 -35
  45. package/build/util/setup/prepareIos.js.map +1 -1
  46. package/build/util/setup/setup.d.ts +2 -1
  47. package/build/util/setup/setup.js +30 -25
  48. package/build/util/setup/setup.js.map +1 -1
  49. package/build/util/spinner.d.ts +3 -0
  50. package/build/util/spinner.js +14 -0
  51. package/build/util/spinner.js.map +1 -0
  52. package/build/util/throwError.js +1 -0
  53. package/build/util/throwError.js.map +1 -1
  54. package/package.json +5 -5
  55. package/template/android/Gemfile +1 -1
  56. package/template/android/fastlane/Fastfile +2 -2
  57. package/template/ios/Gemfile +2 -1
  58. package/template/ios/fastlane/Fastfile +20 -3
  59. package/build/util/VersionUtil.js.map +0 -1
  60. package/build/util/hydrateKeyholderFileValues.js.map +0 -1
  61. package/build/util/setup/promptCommonInputs.d.ts +0 -3
  62. package/build/util/setup/promptCommonInputs.js.map +0 -1
  63. package/template/ios/fastlane/Matchfile +0 -5
  64. /package/build/util/{VersionUtil.d.ts → setup/VersionUtil.d.ts} +0 -0
  65. /package/build/util/{hydrateKeyholderFileValues.d.ts → setup/hydrateKeyholderFileValues.d.ts} +0 -0
@@ -3,11 +3,11 @@ var package_default = {
3
3
  name: "expo-release-it",
4
4
  module: "src/index.ts",
5
5
  type: "module",
6
- version: "0.1.0",
6
+ version: "0.1.1",
7
7
  license: "MIT",
8
8
  scripts: {
9
9
  build: "tsup",
10
- dev: "bun run build && NODE_ENV=development node bin/expo-release-it.mjs",
10
+ dev: "yarn run build && NODE_ENV=development node bin/expo-release-it.mjs",
11
11
  release: "yarn build && release-it",
12
12
  android: "expo run:android",
13
13
  ios: "expo run:ios",
@@ -18,15 +18,15 @@ var package_default = {
18
18
  "@mj-studio/js-util": "^1.1.20",
19
19
  chalk: "^5.4.1",
20
20
  commander: "^13.1.0",
21
+ execa: "^9.5.2",
21
22
  "fs-extra": "^11.3.0",
23
+ ora: "^8.2.0",
22
24
  react: "18.3.1",
23
25
  "react-native": "0.76.9",
24
26
  semver: "^7.7.1",
25
- url: "^0.11.4",
26
- zx: "^8.5.3"
27
+ url: "^0.11.4"
27
28
  },
28
29
  devDependencies: {
29
- "@types/bun": "latest",
30
30
  "@types/fs-extra": "^11.0.4",
31
31
  "@types/semver": "^7.7.0",
32
32
  prettier: "3.5.3",
@@ -86,20 +86,20 @@ var OptionHolder = {
86
86
  input: {},
87
87
  keyholderMap: {},
88
88
  templateDirNames: ["key"],
89
- iosBundleIdentifier: "",
90
- androidPackageName: "",
91
89
  projectDir: "",
92
90
  outputOfInitDir: "",
93
91
  keyDir: "",
94
92
  keyholderFilePath: "",
95
93
  versionName: "",
96
- versionCode: ""
94
+ versionCode: "",
95
+ tempDir: ""
97
96
  };
98
97
 
99
98
  // src/util/logger.ts
100
99
  import chalk from "chalk";
101
100
  var logger = {
102
101
  success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
102
+ done: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")} - Done`)),
103
103
  error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
104
104
  warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
105
105
  info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
@@ -118,7 +118,7 @@ function throwError(message, e) {
118
118
  process.exit(1);
119
119
  }
120
120
 
121
- // src/util/VersionUtil.ts
121
+ // src/util/setup/VersionUtil.ts
122
122
  import semver from "semver";
123
123
  async function parseBinaryVersions() {
124
124
  const files = readdir(OptionHolder.projectDir);
@@ -218,32 +218,39 @@ async function injectBinaryVersions({
218
218
  // src/command/bump.ts
219
219
  import semver2 from "semver";
220
220
 
221
+ // src/util/setup/hydrateKeyholderFileValues.ts
222
+ async function hydrateKeyholderFileValues() {
223
+ if (exist(OptionHolder.keyholderFilePath)) {
224
+ Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));
225
+ }
226
+ }
227
+
221
228
  // src/util/EnvUtil.ts
222
229
  var isDev = process.env.NODE_ENV === "development";
223
230
  var isWin = process.platform.startsWith("win");
224
231
 
225
- // src/command/bump.ts
226
- import { $ } from "zx";
227
-
228
- // src/util/setup/promptCommonInputs.ts
229
- async function promptCommonInputs() {
232
+ // src/util/setup/setup.ts
233
+ async function setup() {
234
+ await setupBasicOptions();
235
+ await hydrateKeyholderFileValues();
236
+ await parseBinaryVersions();
237
+ }
238
+ async function setupBasicOptions() {
230
239
  OptionHolder.projectDir = isDev ? resolve2("example") : resolve2(".");
231
240
  OptionHolder.outputOfInitDir = resolve2(OptionHolder.projectDir, "expo-release-it");
232
241
  OptionHolder.keyDir = resolve2(OptionHolder.outputOfInitDir, "key");
233
242
  OptionHolder.keyholderFilePath = resolve2(OptionHolder.outputOfInitDir, "keyholder.json");
243
+ OptionHolder.tempDir = resolve2(OptionHolder.outputOfInitDir, ".temp");
234
244
  }
235
245
 
236
- // src/util/hydrateKeyholderFileValues.ts
237
- async function hydrateKeyholderFileValues() {
238
- Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));
239
- }
240
-
241
- // src/util/setup/setup.ts
242
- async function setup() {
243
- await promptCommonInputs();
244
- await hydrateKeyholderFileValues();
245
- await parseBinaryVersions();
246
- }
246
+ // src/util/setup/execShellScript.ts
247
+ import { execa } from "execa";
248
+ var exe = execa({
249
+ stdin: "pipe",
250
+ stdout: "inherit",
251
+ stderr: "inherit",
252
+ shell: false
253
+ });
247
254
 
248
255
  // src/command/bump.ts
249
256
  async function bump({ options }) {
@@ -258,11 +265,10 @@ async function bump({ options }) {
258
265
  logger.success("Binary versions have been bumped in expo config file");
259
266
  }
260
267
  async function preCheck() {
261
- if (isDev) return;
262
268
  try {
263
269
  let hasChange = false;
264
270
  try {
265
- await $`git diff --quiet HEAD`;
271
+ await exe("git", ["diff", "--quiet", "HEAD"]);
266
272
  } catch (_) {
267
273
  hasChange = true;
268
274
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json","../../src/util/FileUtil.ts","../../src/util/OptionHolder.ts","../../src/util/logger.ts","../../src/util/throwError.ts","../../src/util/VersionUtil.ts","../../src/command/bump.ts","../../src/util/EnvUtil.ts","../../src/util/setup/promptCommonInputs.ts","../../src/util/hydrateKeyholderFileValues.ts","../../src/util/setup/setup.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.1.0\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"bun run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"fs-extra\": \"^11.3.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\",\n \"zx\": \"^8.5.3\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n input: {\n platform: 'android' | 'ios';\n uploadMetadata: boolean;\n androidOutput: 'apk' | 'aab';\n pod: boolean;\n };\n keyholderMap: {\n ios_app_identifier: string;\n ios_developer_team_id: string;\n ios_match_git_url: string;\n ios_app_store_connect_api_key_id: string;\n ios_app_store_connect_api_key_issuer_id: string;\n ios_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n iosBundleIdentifier: string;\n androidPackageName: string;\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n input: {} as any,\n keyholderMap: {} as any,\n templateDirNames: ['key'],\n iosBundleIdentifier: '',\n androidPackageName: '',\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n","import { logger } from './logger';\n\nexport function throwError(message: string, e?: any): never {\n if (e) {\n logger.error(message, e);\n } else {\n logger.error(message);\n }\n process.exit(1);\n}\n","import { OptionHolder } from './OptionHolder';\nimport { throwError } from './throwError';\nimport semver from 'semver';\nimport { readdir, read, readJsonSlow, write, writeJson, resolve } from './FileUtil';\n\nexport async function parseBinaryVersions() {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await parseFromJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await parseFromJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function parseFromJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const content = read(filePath);\n\n const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];\n const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];\n\n if (!VERSION_NAME) {\n throwError('cannot parse version name');\n }\n if (!VERSION_CODE) {\n throwError('cannot parse version code');\n }\n\n if (!semver.valid(VERSION_NAME)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = VERSION_NAME;\n OptionHolder.versionCode = VERSION_CODE;\n }\n\n async function parseFromJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n const versionName = json.expo?.version + '';\n const iosVersionCode = json.expo?.ios?.buildNumber + '';\n const androidVersionCode = json.expo?.android?.versionCode + '';\n\n if (!/\\d+/.test(iosVersionCode)) {\n throwError('app.json expo.ios.buildNumber is not an integer');\n }\n\n if (!/\\d+/.test(androidVersionCode)) {\n throwError('app.json expo.android.versionCode is not an integer');\n }\n\n if (iosVersionCode !== androidVersionCode) {\n throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');\n }\n\n if (!semver.valid(versionName)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = versionName;\n OptionHolder.versionCode = iosVersionCode;\n }\n}\n\nexport async function injectBinaryVersions({\n versionCode,\n versionName,\n}: {\n versionName: string;\n versionCode: string;\n}) {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await injectToJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await injectToJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function injectToJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n let content = read(filePath);\n\n content = content.replace(\n /const VERSION_NAME = '(.*?)';/,\n `const VERSION_NAME = '${versionName}';`,\n );\n content = content.replace(\n /const VERSION_CODE = (.*?);/,\n `const VERSION_CODE = ${versionCode};`,\n );\n\n write(filePath, content);\n }\n\n async function injectToJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n json.expo.version = versionName;\n json.expo.ios.buildNumber = versionCode;\n json.expo.android.versionCode = +versionCode;\n\n writeJson(filePath, json);\n }\n}\n","import { injectBinaryVersions } from '../util/VersionUtil';\nimport { throwError } from '../util/throwError';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport semver from 'semver';\nimport { isDev } from '../util/EnvUtil';\nimport { $ } from 'zx';\nimport { setup } from '../util/setup/setup';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);\n const nextVersionName = semver.inc(OptionHolder.versionName, 'patch')!;\n const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';\n logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);\n\n await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });\n logger.success('Binary versions have been bumped in expo config file');\n}\n\nasync function preCheck() {\n if (isDev) return;\n try {\n let hasChange = false;\n try {\n await $`git diff --quiet HEAD`;\n } catch (_) {\n hasChange = true;\n }\n if (hasChange) {\n throwError('Workspace is not clean. Before bump version, you should commit all changes.');\n }\n } catch (e) {\n throwError('Precheck Failed', e);\n }\n}\n","export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\n","import { OptionHolder } from '../OptionHolder';\nimport { isDev } from '../EnvUtil';\nimport { resolve } from '../FileUtil';\n\nexport async function promptCommonInputs() {\n OptionHolder.projectDir = isDev ? resolve('example') : resolve('.');\n\n OptionHolder.outputOfInitDir = resolve(OptionHolder.projectDir, 'expo-release-it');\n OptionHolder.keyDir = resolve(OptionHolder.outputOfInitDir, 'key');\n OptionHolder.keyholderFilePath = resolve(OptionHolder.outputOfInitDir, 'keyholder.json');\n}\n","import { OptionHolder } from './OptionHolder';\nimport { readJsonSlow } from './FileUtil';\n\nexport async function hydrateKeyholderFileValues() {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n}\n","import { promptCommonInputs } from './promptCommonInputs';\nimport { hydrateKeyholderFileValues } from '../hydrateKeyholderFileValues';\nimport { parseBinaryVersions } from '../VersionUtil';\n\nexport async function setup() {\n await promptCommonInputs();\n await hydrateKeyholderFileValues();\n await parseBinaryVersions();\n}\n"],"mappings":"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","names":["resolve","path","path","path","resolve","resolve","semver","resolve","semver"]}
1
+ {"version":3,"sources":["../../package.json","../../src/util/FileUtil.ts","../../src/util/OptionHolder.ts","../../src/util/logger.ts","../../src/util/throwError.ts","../../src/util/setup/VersionUtil.ts","../../src/command/bump.ts","../../src/util/setup/hydrateKeyholderFileValues.ts","../../src/util/EnvUtil.ts","../../src/util/setup/setup.ts","../../src/util/setup/execShellScript.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.1.1\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"yarn run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"execa\": \"^9.5.2\",\n \"fs-extra\": \"^11.3.0\",\n \"ora\": \"^8.2.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\nexport function move(src: string, dest: string, options?: fs.MoveOptions) {\n fs.moveSync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n input: {\n platform: 'android' | 'ios';\n uploadMetadata: boolean;\n androidOutput: 'apk' | 'aab';\n pod: boolean;\n };\n keyholderMap: {\n ios_app_identifier: string;\n ios_developer_team_id: string;\n ios_match_git_url: string;\n ios_app_store_connect_api_key_id: string;\n ios_app_store_connect_api_key_issuer_id: string;\n ios_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n tempDir: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n input: {} as any,\n keyholderMap: {} as any,\n templateDirNames: ['key'],\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n tempDir: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n done: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')} - Done`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n","import { logger } from './logger';\n\nexport function throwError(message: string, e?: any): never {\n if (e) {\n logger.error(message, e);\n } else {\n logger.error(message);\n }\n process.exit(1);\n}\n","import { OptionHolder } from '../OptionHolder';\nimport { throwError } from '../throwError';\nimport semver from 'semver';\nimport { readdir, read, readJsonSlow, write, writeJson, resolve } from '../FileUtil';\n\nexport async function parseBinaryVersions() {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await parseFromJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await parseFromJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function parseFromJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const content = read(filePath);\n\n const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];\n const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];\n\n if (!VERSION_NAME) {\n throwError('cannot parse version name');\n }\n if (!VERSION_CODE) {\n throwError('cannot parse version code');\n }\n\n if (!semver.valid(VERSION_NAME)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = VERSION_NAME;\n OptionHolder.versionCode = VERSION_CODE;\n }\n\n async function parseFromJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n const versionName = json.expo?.version + '';\n const iosVersionCode = json.expo?.ios?.buildNumber + '';\n const androidVersionCode = json.expo?.android?.versionCode + '';\n\n if (!/\\d+/.test(iosVersionCode)) {\n throwError('app.json expo.ios.buildNumber is not an integer');\n }\n\n if (!/\\d+/.test(androidVersionCode)) {\n throwError('app.json expo.android.versionCode is not an integer');\n }\n\n if (iosVersionCode !== androidVersionCode) {\n throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');\n }\n\n if (!semver.valid(versionName)) {\n throwError('VERSION_NAME is not a valid semver format');\n }\n\n OptionHolder.versionName = versionName;\n OptionHolder.versionCode = iosVersionCode;\n }\n}\n\nexport async function injectBinaryVersions({\n versionCode,\n versionName,\n}: {\n versionName: string;\n versionCode: string;\n}) {\n const files = readdir(OptionHolder.projectDir);\n\n const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];\n const jsonConfigFile = 'app.json';\n\n for (const jsConfigFile of jsConfigFiles) {\n if (files.includes(jsConfigFile)) {\n await injectToJsConfigFile(jsConfigFile);\n return;\n }\n }\n\n if (files.includes(jsonConfigFile)) {\n await injectToJsonConfigFile(jsonConfigFile);\n return;\n }\n\n throwError('expo config file not found');\n\n async function injectToJsConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n let content = read(filePath);\n\n content = content.replace(\n /const VERSION_NAME = '(.*?)';/,\n `const VERSION_NAME = '${versionName}';`,\n );\n content = content.replace(\n /const VERSION_CODE = (.*?);/,\n `const VERSION_CODE = ${versionCode};`,\n );\n\n write(filePath, content);\n }\n\n async function injectToJsonConfigFile(filename: string) {\n const filePath = resolve(OptionHolder.projectDir, filename);\n const json = readJsonSlow(filePath);\n\n json.expo.version = versionName;\n json.expo.ios.buildNumber = versionCode;\n json.expo.android.versionCode = +versionCode;\n\n writeJson(filePath, json);\n }\n}\n","import { injectBinaryVersions } from '../util/setup/VersionUtil';\nimport { throwError } from '../util/throwError';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport semver from 'semver';\nimport { setup } from '../util/setup/setup';\nimport { exe } from '../util/setup/execShellScript';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);\n const nextVersionName = semver.inc(OptionHolder.versionName, 'patch')!;\n const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';\n logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);\n\n await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });\n logger.success('Binary versions have been bumped in expo config file');\n}\n\nasync function preCheck() {\n try {\n let hasChange = false;\n try {\n await exe('git', ['diff', '--quiet', 'HEAD']);\n } catch (_) {\n hasChange = true;\n }\n if (hasChange) {\n throwError('Workspace is not clean. Before bump version, you should commit all changes.');\n }\n } catch (e) {\n throwError('Precheck Failed', e);\n }\n}\n","import { OptionHolder } from '../OptionHolder';\nimport { readJsonSlow, exist } from '../FileUtil';\n\nexport async function hydrateKeyholderFileValues() {\n if (exist(OptionHolder.keyholderFilePath)) {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n }\n}\n","export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\n","import { hydrateKeyholderFileValues } from './hydrateKeyholderFileValues';\nimport { parseBinaryVersions } from './VersionUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { isDev } from '../EnvUtil';\nimport { resolve } from '../FileUtil';\n\nexport async function setup() {\n await setupBasicOptions();\n await hydrateKeyholderFileValues();\n await parseBinaryVersions();\n}\n\nexport async function setupBasicOptions() {\n OptionHolder.projectDir = isDev ? resolve('example') : resolve('.');\n OptionHolder.outputOfInitDir = resolve(OptionHolder.projectDir, 'expo-release-it');\n OptionHolder.keyDir = resolve(OptionHolder.outputOfInitDir, 'key');\n OptionHolder.keyholderFilePath = resolve(OptionHolder.outputOfInitDir, 'keyholder.json');\n OptionHolder.tempDir = resolve(OptionHolder.outputOfInitDir, '.temp');\n}\n","import { execa, type Options } from 'execa';\n\nexport const exe = execa({\n stdin: 'pipe',\n stdout: 'inherit',\n stderr: 'inherit',\n shell: false,\n});\n\nexport const yesShell = <OptionsType extends Options>(\n command: string,\n args: string[] = [],\n options: OptionsType,\n) => {\n const subProcess = exe(command, args, { ...options, stdin: 'pipe' });\n subProcess.stdin?.write('y\\n');\n subProcess.stdin?.end();\n return subProcess;\n};\n"],"mappings":"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","names":["resolve","path","path","path","resolve","resolve","semver","resolve","semver"]}
@@ -3,11 +3,11 @@ var package_default = {
3
3
  name: "expo-release-it",
4
4
  module: "src/index.ts",
5
5
  type: "module",
6
- version: "0.1.0",
6
+ version: "0.1.1",
7
7
  license: "MIT",
8
8
  scripts: {
9
9
  build: "tsup",
10
- dev: "bun run build && NODE_ENV=development node bin/expo-release-it.mjs",
10
+ dev: "yarn run build && NODE_ENV=development node bin/expo-release-it.mjs",
11
11
  release: "yarn build && release-it",
12
12
  android: "expo run:android",
13
13
  ios: "expo run:ios",
@@ -18,15 +18,15 @@ var package_default = {
18
18
  "@mj-studio/js-util": "^1.1.20",
19
19
  chalk: "^5.4.1",
20
20
  commander: "^13.1.0",
21
+ execa: "^9.5.2",
21
22
  "fs-extra": "^11.3.0",
23
+ ora: "^8.2.0",
22
24
  react: "18.3.1",
23
25
  "react-native": "0.76.9",
24
26
  semver: "^7.7.1",
25
- url: "^0.11.4",
26
- zx: "^8.5.3"
27
+ url: "^0.11.4"
27
28
  },
28
29
  devDependencies: {
29
- "@types/bun": "latest",
30
30
  "@types/fs-extra": "^11.0.4",
31
31
  "@types/semver": "^7.7.0",
32
32
  prettier: "3.5.3",
@@ -90,20 +90,20 @@ var OptionHolder = {
90
90
  input: {},
91
91
  keyholderMap: {},
92
92
  templateDirNames: ["key"],
93
- iosBundleIdentifier: "",
94
- androidPackageName: "",
95
93
  projectDir: "",
96
94
  outputOfInitDir: "",
97
95
  keyDir: "",
98
96
  keyholderFilePath: "",
99
97
  versionName: "",
100
- versionCode: ""
98
+ versionCode: "",
99
+ tempDir: ""
101
100
  };
102
101
 
103
102
  // src/util/logger.ts
104
103
  import chalk from "chalk";
105
104
  var logger = {
106
105
  success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
106
+ done: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")} - Done`)),
107
107
  error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
108
108
  warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
109
109
  info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
@@ -116,9 +116,45 @@ ${msg.join(", ")}`)),
116
116
  import chalk3 from "chalk";
117
117
  import { input } from "@inquirer/prompts";
118
118
 
119
- // src/util/EnvUtil.ts
120
- var isDev = process.env.NODE_ENV === "development";
121
- var isWin = process.platform.startsWith("win");
119
+ // src/util/input/InqueryInputs.ts
120
+ import { select } from "@inquirer/prompts";
121
+ import { is } from "@mj-studio/js-util";
122
+ import chalk2 from "chalk";
123
+ function constructInquirerFormattedMessage({
124
+ example,
125
+ explanation,
126
+ referUrl,
127
+ name
128
+ }) {
129
+ let ret = `${chalk2.bold(name)}`;
130
+ if (explanation) {
131
+ ret += `
132
+
133
+ ${chalk2.italic.blue(explanation)}`;
134
+ }
135
+ if (example) {
136
+ ret += `
137
+ ${chalk2.italic(`${chalk2.greenBright("example :")} ${example}`)}`;
138
+ }
139
+ if (referUrl) {
140
+ ret += `
141
+ ${chalk2.italic(`${chalk2.greenBright("references :")} ${chalk2.underline.blue(referUrl)}`)}`;
142
+ }
143
+ if (explanation) {
144
+ ret += "\n";
145
+ if (example || referUrl) {
146
+ ret += "\n";
147
+ }
148
+ }
149
+ return ret;
150
+ }
151
+
152
+ // src/util/setup/hydrateKeyholderFileValues.ts
153
+ async function hydrateKeyholderFileValues() {
154
+ if (exist(OptionHolder.keyholderFilePath)) {
155
+ Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));
156
+ }
157
+ }
122
158
 
123
159
  // src/util/throwError.ts
124
160
  function throwError(message, e) {
@@ -130,7 +166,7 @@ function throwError(message, e) {
130
166
  process.exit(1);
131
167
  }
132
168
 
133
- // src/util/VersionUtil.ts
169
+ // src/util/setup/VersionUtil.ts
134
170
  import semver from "semver";
135
171
  async function parseBinaryVersions() {
136
172
  const files = readdir(OptionHolder.projectDir);
@@ -187,53 +223,29 @@ async function parseBinaryVersions() {
187
223
  }
188
224
  }
189
225
 
190
- // src/util/setup/promptCommonInputs.ts
191
- async function promptCommonInputs() {
226
+ // src/util/EnvUtil.ts
227
+ var isDev = process.env.NODE_ENV === "development";
228
+ var isWin = process.platform.startsWith("win");
229
+
230
+ // src/util/setup/setup.ts
231
+ async function setup() {
232
+ await setupBasicOptions();
233
+ await hydrateKeyholderFileValues();
234
+ await parseBinaryVersions();
235
+ }
236
+ async function setupBasicOptions() {
192
237
  OptionHolder.projectDir = isDev ? resolve2("example") : resolve2(".");
193
238
  OptionHolder.outputOfInitDir = resolve2(OptionHolder.projectDir, "expo-release-it");
194
239
  OptionHolder.keyDir = resolve2(OptionHolder.outputOfInitDir, "key");
195
240
  OptionHolder.keyholderFilePath = resolve2(OptionHolder.outputOfInitDir, "keyholder.json");
196
- }
197
-
198
- // src/util/input/InqueryInputs.ts
199
- import { select } from "@inquirer/prompts";
200
- import { is } from "@mj-studio/js-util";
201
- import chalk2 from "chalk";
202
- function constructInquirerFormattedMessage({
203
- example,
204
- explanation,
205
- referUrl,
206
- name
207
- }) {
208
- let ret = `${chalk2.bold(name)}`;
209
- if (explanation) {
210
- ret += `
211
-
212
- ${chalk2.italic.blue(explanation)}`;
213
- }
214
- if (example) {
215
- ret += `
216
- ${chalk2.italic(`${chalk2.greenBright("example :")} ${example}`)}`;
217
- }
218
- if (referUrl) {
219
- ret += `
220
- ${chalk2.italic(`${chalk2.greenBright("references :")} ${chalk2.underline.blue(referUrl)}`)}`;
221
- }
222
- if (explanation) {
223
- ret += "\n";
224
- if (example || referUrl) {
225
- ret += "\n";
226
- }
227
- }
228
- return ret;
241
+ OptionHolder.tempDir = resolve2(OptionHolder.outputOfInitDir, ".temp");
229
242
  }
230
243
 
231
244
  // src/command/init.ts
232
245
  async function init({ options }) {
233
246
  Object.assign(OptionHolder.input, options);
234
247
  logger.info(`${chalk3.inverse("expo-release-it")} Initialization Get Started`);
235
- await promptCommonInputs();
236
- await parseBinaryVersions();
248
+ await setup();
237
249
  await promptInputs();
238
250
  await copyTemplates();
239
251
  logger.success(
@@ -241,7 +253,7 @@ async function init({ options }) {
241
253
  );
242
254
  }
243
255
  async function promptInputs() {
244
- OptionHolder.iosBundleIdentifier = OptionHolder.keyholderMap.ios_app_identifier = await input({
256
+ OptionHolder.keyholderMap.ios_app_identifier = await input({
245
257
  message: constructInquirerFormattedMessage({
246
258
  name: "iOS Bundle Identifier",
247
259
  explanation: `The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store.
@@ -250,17 +262,17 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
250
262
  referUrl: "https://docs.expo.dev/versions/latest/config/app/#bundleidentifier"
251
263
  }),
252
264
  required: true,
253
- default: isDev ? "ios_app_identifier" : void 0
265
+ default: OptionHolder.keyholderMap.ios_app_identifier
254
266
  });
255
267
  OptionHolder.keyholderMap.ios_developer_team_id = await input({
256
268
  message: constructInquirerFormattedMessage({
257
- name: "IOS App Store Connect Team Id",
269
+ name: "IOS Developer Team Id",
258
270
  explanation: `A unique alphanumeric string that identifies your Apple Developer Team`,
259
271
  example: "8A51ABC4H7",
260
272
  referUrl: "https://developer.apple.com/account"
261
273
  }),
262
274
  required: true,
263
- default: isDev ? "ios_developer_team_id" : void 0
275
+ default: OptionHolder.keyholderMap.ios_developer_team_id
264
276
  });
265
277
  OptionHolder.keyholderMap.ios_match_git_url = await input({
266
278
  message: constructInquirerFormattedMessage({
@@ -270,7 +282,7 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
270
282
  referUrl: "https://docs.fastlane.tools/actions/match/"
271
283
  }),
272
284
  required: true,
273
- default: isDev ? "ios_match_git_url" : void 0
285
+ default: OptionHolder.keyholderMap.ios_match_git_url
274
286
  });
275
287
  OptionHolder.keyholderMap.ios_match_password = await input({
276
288
  message: constructInquirerFormattedMessage({
@@ -280,7 +292,7 @@ This means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo
280
292
  referUrl: "https://docs.fastlane.tools/actions/match/"
281
293
  }),
282
294
  required: true,
283
- default: isDev ? "ios_match_password" : void 0
295
+ default: OptionHolder.keyholderMap.ios_match_password
284
296
  });
285
297
  OptionHolder.keyholderMap.ios_app_store_connect_api_key_id = await input({
286
298
  message: constructInquirerFormattedMessage({
@@ -291,7 +303,7 @@ App Store Connect API Key can be issued in ${chalk3.underline.blue("https://apps
291
303
  referUrl: "https://appstoreconnect.apple.com/access/integrations/api"
292
304
  }),
293
305
  required: true,
294
- default: isDev ? "ios_app_store_connect_api_key_id" : void 0
306
+ default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id
295
307
  });
296
308
  OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id = await input({
297
309
  message: constructInquirerFormattedMessage({
@@ -302,7 +314,7 @@ App Store Connect API Key can be issued in ${chalk3.underline.blue("https://apps
302
314
  referUrl: "https://appstoreconnect.apple.com/access/integrations/api"
303
315
  }),
304
316
  required: true,
305
- default: isDev ? "ios_app_store_connect_api_key_issuer_id" : void 0
317
+ default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id
306
318
  });
307
319
  OptionHolder.keyholderMap.ios_xcode_project_target = await input({
308
320
  message: constructInquirerFormattedMessage({
@@ -312,9 +324,9 @@ Usually, this is equivalent to {{name}}.xcodeproj in your ios directory`,
312
324
  example: "app"
313
325
  }),
314
326
  required: true,
315
- default: "app"
327
+ default: OptionHolder.keyholderMap.ios_xcode_project_target || "app"
316
328
  });
317
- OptionHolder.androidPackageName = OptionHolder.keyholderMap.android_package_name = await input({
329
+ OptionHolder.keyholderMap.android_package_name = await input({
318
330
  message: constructInquirerFormattedMessage({
319
331
  name: "Android Package Name",
320
332
  explanation: `The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store.`,
@@ -322,7 +334,7 @@ Usually, this is equivalent to {{name}}.xcodeproj in your ios directory`,
322
334
  referUrl: "https://docs.expo.dev/versions/latest/config/app/#package"
323
335
  }),
324
336
  required: true,
325
- default: isDev ? "android_package_name" : void 0
337
+ default: OptionHolder.keyholderMap.android_package_name
326
338
  });
327
339
  OptionHolder.keyholderMap.android_keystore_store_password = await input({
328
340
  message: constructInquirerFormattedMessage({
@@ -333,7 +345,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
333
345
  referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
334
346
  }),
335
347
  required: true,
336
- default: isDev ? "android_keystore_store_password" : void 0
348
+ default: OptionHolder.keyholderMap.android_keystore_store_password
337
349
  });
338
350
  OptionHolder.keyholderMap.android_keystore_key_alias = await input({
339
351
  message: constructInquirerFormattedMessage({
@@ -344,7 +356,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
344
356
  referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
345
357
  }),
346
358
  required: true,
347
- default: isDev ? "android_keystore_key_alias" : void 0
359
+ default: OptionHolder.keyholderMap.android_keystore_key_alias
348
360
  });
349
361
  OptionHolder.keyholderMap.android_keystore_key_password = await input({
350
362
  message: constructInquirerFormattedMessage({
@@ -355,7 +367,7 @@ Or, you can do same thing with CLI: ${chalk3.underline.blue("https://gist.github
355
367
  referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
356
368
  }),
357
369
  required: true,
358
- default: isDev ? "android_keystore_key_password" : void 0
370
+ default: OptionHolder.keyholderMap.android_keystore_key_password
359
371
  });
360
372
  writeJson(OptionHolder.keyholderFilePath, OptionHolder.keyholderMap);
361
373
  }