expo-release-it 0.6.6 → 0.7.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 (140) hide show
  1. package/README.md +2 -0
  2. package/build/{EnvUtil-C6QbCIoV.js → EnvUtil-D5sfaKZs.js} +1 -1
  3. package/build/{EnvUtil-C6QbCIoV.js.map → EnvUtil-D5sfaKZs.js.map} +1 -1
  4. package/build/FastlaneOption-y0DYOkjC.js +50 -0
  5. package/build/FastlaneOption-y0DYOkjC.js.map +1 -0
  6. package/build/{FileUtil-Dbvp87_g.js → FileUtil-B9JnWobK.js} +1 -1
  7. package/build/{FileUtil-Dbvp87_g.js.map → FileUtil-B9JnWobK.js.map} +1 -1
  8. package/build/{InqueryInputs-hizV8u_U.js → InqueryInputs-CyW-i_4N.js} +2 -16
  9. package/build/InqueryInputs-CyW-i_4N.js.map +1 -0
  10. package/build/{MetadataSyncUtil-BbrQb4Bc.js → MetadataSyncUtil-BqWEE06B.js} +9 -9
  11. package/build/MetadataSyncUtil-BqWEE06B.js.map +1 -0
  12. package/build/NativeEnvironment-BAohR8aj.js +50 -0
  13. package/build/NativeEnvironment-BAohR8aj.js.map +1 -0
  14. package/build/{OptionHolder-CJ5tzHpp.js → OptionHolder-ooRZtG0l.js} +6 -6
  15. package/build/OptionHolder-ooRZtG0l.js.map +1 -0
  16. package/build/RubyEnvironment-CqupQjgn.js +113 -0
  17. package/build/RubyEnvironment-CqupQjgn.js.map +1 -0
  18. package/build/RubyEnvironment-K1nIGrMJ.d.ts +28 -0
  19. package/build/{VersionUtil-BPRjtPK_.js → VersionUtil-CttA4ATC.js} +4 -4
  20. package/build/{VersionUtil-BPRjtPK_.js.map → VersionUtil-CttA4ATC.js.map} +1 -1
  21. package/build/build-R29EBnOC.js +64 -0
  22. package/build/build-R29EBnOC.js.map +1 -0
  23. package/build/{bump-BBGyihtk.js → bump-NbU_02fP.js} +9 -9
  24. package/build/{bump-BBGyihtk.js.map → bump-NbU_02fP.js.map} +1 -1
  25. package/build/command/build.js +19 -20
  26. package/build/command/bump.js +12 -12
  27. package/build/command/init.js +11 -11
  28. package/build/command/pull.js +16 -20
  29. package/build/command/submit.js +16 -20
  30. package/build/command/upload.js +16 -20
  31. package/build/execShellScript-ZLVCvae2.js +32 -0
  32. package/build/execShellScript-ZLVCvae2.js.map +1 -0
  33. package/build/{generateAppStoreConnectApiKeyFile-DeuJUndI.js → generateAppStoreConnectApiKeyFile-Bt2nK7lP.js} +3 -3
  34. package/build/{generateAppStoreConnectApiKeyFile-DeuJUndI.js.map → generateAppStoreConnectApiKeyFile-Bt2nK7lP.js.map} +1 -1
  35. package/build/{hydrateKeyholderFileValues-BKnI9nbx.js → hydrateKeyholderFileValues-Cwmc5iwo.js} +3 -3
  36. package/build/{hydrateKeyholderFileValues-BKnI9nbx.js.map → hydrateKeyholderFileValues-Cwmc5iwo.js.map} +1 -1
  37. package/build/index.js +26 -28
  38. package/build/index.js.map +1 -1
  39. package/build/{init-Cce02h7G.js → init-DwlkVt7G.js} +22 -25
  40. package/build/init-DwlkVt7G.js.map +1 -0
  41. package/build/{iterateAllFiles-CcRtjpos.js → iterateAllFiles-Yx59MXv2.js} +2 -2
  42. package/build/{iterateAllFiles-CcRtjpos.js.map → iterateAllFiles-Yx59MXv2.js.map} +1 -1
  43. package/build/logger-CSZA77Zt.js +21 -0
  44. package/build/logger-CSZA77Zt.js.map +1 -0
  45. package/build/{parseConfigFile-Bv50df4o.js → parseConfigFile-DTkIYMK1.js} +7 -5
  46. package/build/parseConfigFile-DTkIYMK1.js.map +1 -0
  47. package/build/prepareAndroid-BQBbb44J.js +29 -0
  48. package/build/prepareAndroid-BQBbb44J.js.map +1 -0
  49. package/build/prepareFastlane-BmFwr96S.js +23 -0
  50. package/build/prepareFastlane-BmFwr96S.js.map +1 -0
  51. package/build/prepareIos-CGc-nhwf.js +63 -0
  52. package/build/prepareIos-CGc-nhwf.js.map +1 -0
  53. package/build/{pull-CVuxaHAJ.js → pull-COg4G-1u.js} +28 -24
  54. package/build/pull-COg4G-1u.js.map +1 -0
  55. package/build/{setup-BhGhMcG5.js → setup-Be5UwL9d.js} +8 -8
  56. package/build/setup-Be5UwL9d.js.map +1 -0
  57. package/build/submit-BaL5kRHE.js +28 -0
  58. package/build/submit-BaL5kRHE.js.map +1 -0
  59. package/build/{throwError-bsy4sijK.js → throwError-ebp_0a_3.js} +3 -3
  60. package/build/{throwError-bsy4sijK.js.map → throwError-ebp_0a_3.js.map} +1 -1
  61. package/build/type/ExpoReleaseItConfiguration.d.ts +15 -1
  62. package/build/upload-BY1mGc-G.js +32 -0
  63. package/build/upload-BY1mGc-G.js.map +1 -0
  64. package/build/util/EnvUtil.js +1 -1
  65. package/build/util/FastlaneOption.d.ts +4 -3
  66. package/build/util/FastlaneOption.js +4 -4
  67. package/build/util/FileUtil.js +1 -1
  68. package/build/util/MetadataSyncUtil.d.ts +2 -2
  69. package/build/util/MetadataSyncUtil.js +4 -4
  70. package/build/util/OptionHolder.d.ts +5 -2
  71. package/build/util/OptionHolder.js +2 -2
  72. package/build/util/generateAppStoreConnectApiKeyFile.js +3 -3
  73. package/build/util/injectTemplatePlaceHolders.js +15 -5
  74. package/build/util/injectTemplatePlaceHolders.js.map +1 -0
  75. package/build/util/input/InqueryInputs.d.ts +0 -1
  76. package/build/util/input/InqueryInputs.js +3 -3
  77. package/build/util/iterateAllFiles.js +2 -2
  78. package/build/util/logger.d.ts +2 -1
  79. package/build/util/logger.js +4 -2
  80. package/build/util/parseConfigFile.js +3 -3
  81. package/build/util/replaceStringIfNotContain.js +9 -2
  82. package/build/util/replaceStringIfNotContain.js.map +1 -0
  83. package/build/util/setup/NativeEnvironment.d.ts +5 -0
  84. package/build/util/setup/NativeEnvironment.js +7 -0
  85. package/build/util/setup/RubyEnvironment.d.ts +2 -0
  86. package/build/util/setup/RubyEnvironment.js +7 -0
  87. package/build/util/setup/VersionUtil.js +6 -6
  88. package/build/util/setup/execShellScript.d.ts +11 -14
  89. package/build/util/setup/execShellScript.js +5 -2
  90. package/build/util/setup/hydrateKeyholderFileValues.js +3 -3
  91. package/build/util/setup/prepareAndroid.d.ts +8 -2
  92. package/build/util/setup/prepareAndroid.js +4 -11
  93. package/build/util/setup/prepareFastlane.d.ts +21 -0
  94. package/build/util/setup/prepareFastlane.js +9 -0
  95. package/build/util/setup/prepareIos.d.ts +19 -2
  96. package/build/util/setup/prepareIos.js +4 -10
  97. package/build/util/setup/setup.js +9 -9
  98. package/build/util/spinner.js +14 -2
  99. package/build/util/spinner.js.map +1 -0
  100. package/build/util/throwError.js +5 -3
  101. package/expo-release-it.schema.json +16 -2
  102. package/package.json +4 -4
  103. package/template/android/fastlane/Fastfile +8 -2
  104. package/template/android/release-signing.gradle +15 -0
  105. package/template/ios/fastlane/Fastfile +52 -18
  106. package/template/ruby/Gemfile +10 -0
  107. package/template/ruby/Gemfile.lock +330 -0
  108. package/build/FastlaneOption-CxjO9q-w.js +0 -35
  109. package/build/FastlaneOption-CxjO9q-w.js.map +0 -1
  110. package/build/InqueryInputs-hizV8u_U.js.map +0 -1
  111. package/build/MetadataSyncUtil-BbrQb4Bc.js.map +0 -1
  112. package/build/OptionHolder-CJ5tzHpp.js.map +0 -1
  113. package/build/build-I9mcpo6x.js +0 -88
  114. package/build/build-I9mcpo6x.js.map +0 -1
  115. package/build/execShellScript-Bd5xbFX5.js +0 -22
  116. package/build/execShellScript-Bd5xbFX5.js.map +0 -1
  117. package/build/init-Cce02h7G.js.map +0 -1
  118. package/build/injectTemplatePlaceHolders-BzxCkQrW.js +0 -16
  119. package/build/injectTemplatePlaceHolders-BzxCkQrW.js.map +0 -1
  120. package/build/logger-DvQ7ScMQ.js +0 -16
  121. package/build/logger-DvQ7ScMQ.js.map +0 -1
  122. package/build/parseConfigFile-Bv50df4o.js.map +0 -1
  123. package/build/prepareAndroid-bUMPHe4p.js +0 -53
  124. package/build/prepareAndroid-bUMPHe4p.js.map +0 -1
  125. package/build/prepareIos-D1ar2VGf.js +0 -33
  126. package/build/prepareIos-D1ar2VGf.js.map +0 -1
  127. package/build/pull-CVuxaHAJ.js.map +0 -1
  128. package/build/replaceStringIfNotContain-BncPMRZq.js +0 -10
  129. package/build/replaceStringIfNotContain-BncPMRZq.js.map +0 -1
  130. package/build/setup-BhGhMcG5.js.map +0 -1
  131. package/build/spinner-BVmbE9I_.js +0 -15
  132. package/build/spinner-BVmbE9I_.js.map +0 -1
  133. package/build/submit-BQ3IEiKv.js +0 -65
  134. package/build/submit-BQ3IEiKv.js.map +0 -1
  135. package/build/upload-DJXVLkT_.js +0 -68
  136. package/build/upload-DJXVLkT_.js.map +0 -1
  137. package/template/android/Gemfile +0 -3
  138. package/template/ios/Gemfile +0 -5
  139. package/template/ios/fastlane/Appfile +0 -2
  140. package/template/ios/fastlane/Matchfile +0 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-R29EBnOC.js","names":["artifact: string"],"sources":["../src/command/build.ts"],"sourcesContent":["import { dirname } from 'node:path';\n\nimport chalk from 'chalk';\n\nimport { calculateElapsed } from '../util/calculateElapsed';\nimport { runFastlane } from '../util/FastlaneOption';\nimport { copy, exist, relativePath, remove, resolve } from '../util/FileUtil';\nimport { InqueryInputs } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { exe } from '../util/setup/execShellScript';\nimport { inspectNativeEnvironment } from '../util/setup/NativeEnvironment';\nimport { androidSigningEnvironment, prepareAndroid } from '../util/setup/prepareAndroid';\nimport { prepareFastlane } from '../util/setup/prepareFastlane';\nimport { prepareIos } from '../util/setup/prepareIos';\nimport { inspectRubyEnvironment } from '../util/setup/RubyEnvironment';\nimport { setup } from '../util/setup/setup';\n\nexport async function build({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n const startTime = Date.now();\n await setup();\n await InqueryInputs.platform();\n await InqueryInputs.androidBuildOutput();\n const isIos = OptionHolder.input.platform === 'ios';\n if (!isIos && OptionHolder.input.sign === false)\n throw new Error(\n '--no-sign is only supported for iOS. Android release builds require a signing key.',\n );\n const ruby = await inspectRubyEnvironment({ needsPods: isIos });\n const signingEnv = isIos ? {} : androidSigningEnvironment();\n const prebuild = await inspectNativeEnvironment();\n await prepareFastlane(ruby);\n let artifact: string;\n if (isIos) {\n await prepareIos({ ruby, prebuild });\n await runFastlane(ruby, 'build');\n artifact = resolve(\n OptionHolder.resourcesDir,\n 'output',\n 'ios',\n OptionHolder.input.sign === false ? 'app.xcarchive' : 'app.ipa',\n );\n } else {\n await prepareAndroid(prebuild);\n const isAab = OptionHolder.input.androidOutput === 'aab';\n await exe('./gradlew', [isAab ? 'app:bundleRelease' : 'app:assembleRelease'], {\n cwd: resolve(OptionHolder.projectDir, 'android'),\n env: { ...signingEnv, PATH: `${dirname(process.execPath)}:${process.env.PATH ?? ''}` },\n });\n // aab: app/build/outputs/bundle/release/app-release.aab\n // apk: app/build/outputs/apk/release/app-release.apk\n const output = isAab ? 'aab' : 'apk';\n const outputDir = resolve(OptionHolder.resourcesDir, 'output', 'android', output);\n const buildOutput = resolve(\n OptionHolder.projectDir,\n 'android',\n 'app',\n 'build',\n 'outputs',\n isAab ? 'bundle' : 'apk',\n 'release',\n );\n const binary = resolve(buildOutput, `app-release.${output}`);\n if (!exist(binary)) throw new Error(`Release build output is missing: ${binary}`);\n remove(outputDir);\n copy(buildOutput, outputDir);\n artifact = resolve(outputDir, `app-release.${output}`);\n }\n if (!exist(artifact)) throw new Error(`Expected build artifact was not generated: ${artifact}`);\n logger.success(`artifact generated: ${relativePath(OptionHolder.projectDir, artifact)}`);\n logger.success(\n `${isIos ? 'iOS' : 'Android'} Build ${chalk.bold.inverse(calculateElapsed(startTime))}`,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAkBA,eAAsB,MAAM,EAAE,SAA2B,EAAE;AACzD,QAAO,OAAO,aAAa,OAAO,QAAQ;CAC1C,MAAM,YAAY,KAAK,KAAK;AAC5B,OAAM,OAAO;AACb,OAAM,cAAc,UAAU;AAC9B,OAAM,cAAc,oBAAoB;CACxC,MAAM,QAAQ,aAAa,MAAM,aAAa;AAC9C,MAAK,SAAS,aAAa,MAAM,SAAS,MACxC,OAAM,IAAI,MACR;CAEJ,MAAM,OAAO,MAAM,uBAAuB,EAAE,WAAW,MAAO,EAAC;CAC/D,MAAM,aAAa,QAAQ,CAAE,IAAG,2BAA2B;CAC3D,MAAM,WAAW,MAAM,0BAA0B;AACjD,OAAM,gBAAgB,KAAK;CAC3B,IAAIA;AACJ,KAAI,OAAO;AACT,QAAM,WAAW;GAAE;GAAM;EAAU,EAAC;AACpC,QAAM,YAAY,MAAM,QAAQ;AAChC,aAAW,QACT,aAAa,cACb,UACA,OACA,aAAa,MAAM,SAAS,QAAQ,kBAAkB,UACvD;CACF,OAAM;AACL,QAAM,eAAe,SAAS;EAC9B,MAAM,QAAQ,aAAa,MAAM,kBAAkB;AACnD,QAAM,IAAI,aAAa,CAAC,QAAQ,sBAAsB,qBAAsB,GAAE;GAC5E,KAAK,QAAQ,aAAa,YAAY,UAAU;GAChD,KAAK;IAAE,GAAG;IAAY,OAAO,EAAE,QAAQ,QAAQ,SAAS,CAAC,GAAG,QAAQ,IAAI,QAAQ,GAAG;GAAG;EACvF,EAAC;EAGF,MAAM,SAAS,QAAQ,QAAQ;EAC/B,MAAM,YAAY,QAAQ,aAAa,cAAc,UAAU,WAAW,OAAO;EACjF,MAAM,cAAc,QAClB,aAAa,YACb,WACA,OACA,SACA,WACA,QAAQ,WAAW,OACnB,UACD;EACD,MAAM,SAAS,QAAQ,cAAc,cAAc,OAAO,EAAE;AAC5D,OAAK,MAAM,OAAO,CAAE,OAAM,IAAI,OAAO,mCAAmC,OAAO;AAC/E,SAAO,UAAU;AACjB,OAAK,aAAa,UAAU;AAC5B,aAAW,QAAQ,YAAY,cAAc,OAAO,EAAE;CACvD;AACD,MAAK,MAAM,SAAS,CAAE,OAAM,IAAI,OAAO,6CAA6C,SAAS;AAC7F,QAAO,SAAS,sBAAsB,aAAa,aAAa,YAAY,SAAS,CAAC,EAAE;AACxF,QAAO,SACJ,EAAE,QAAQ,QAAQ,UAAU,SAAS,MAAM,KAAK,QAAQ,iBAAiB,UAAU,CAAC,CAAC,EACvF;AACF"}
@@ -1,11 +1,11 @@
1
- import { isDev } from "./EnvUtil-C6QbCIoV.js";
2
- import { OptionHolder } from "./OptionHolder-CJ5tzHpp.js";
3
- import { constructInquirerFormattedMessage } from "./InqueryInputs-hizV8u_U.js";
4
- import { logger } from "./logger-DvQ7ScMQ.js";
5
- import { exe } from "./execShellScript-Bd5xbFX5.js";
6
- import { throwError } from "./throwError-bsy4sijK.js";
7
- import { checkVersionCodeIsTiedWithVersionName, generateVersionCodeTiedWithVersionName, injectBinaryVersions } from "./VersionUtil-BPRjtPK_.js";
8
- import { setup } from "./setup-BhGhMcG5.js";
1
+ import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
2
+ import { constructInquirerFormattedMessage } from "./InqueryInputs-CyW-i_4N.js";
3
+ import { logger } from "./logger-CSZA77Zt.js";
4
+ import { exe } from "./execShellScript-ZLVCvae2.js";
5
+ import { isDev } from "./EnvUtil-D5sfaKZs.js";
6
+ import { throwError } from "./throwError-ebp_0a_3.js";
7
+ import { checkVersionCodeIsTiedWithVersionName, generateVersionCodeTiedWithVersionName, injectBinaryVersions } from "./VersionUtil-CttA4ATC.js";
8
+ import { setup } from "./setup-Be5UwL9d.js";
9
9
  import { is } from "@mj-studio/js-util";
10
10
  import { select } from "@inquirer/prompts";
11
11
  import semver from "semver";
@@ -119,4 +119,4 @@ async function promptTagAndPush({ nextVersionCode, nextVersionName }) {
119
119
 
120
120
  //#endregion
121
121
  export { bump };
122
- //# sourceMappingURL=bump-BBGyihtk.js.map
122
+ //# sourceMappingURL=bump-NbU_02fP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bump-BBGyihtk.js","names":[],"sources":["../src/command/bump.ts"],"sourcesContent":["import { select } from '@inquirer/prompts';\nimport { is } from '@mj-studio/js-util';\nimport semver from 'semver';\n\nimport { isDev } from '../util/EnvUtil';\nimport { constructInquirerFormattedMessage } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { exe } from '../util/setup/execShellScript';\nimport { setup } from '../util/setup/setup';\nimport {\n checkVersionCodeIsTiedWithVersionName,\n generateVersionCodeTiedWithVersionName,\n injectBinaryVersions,\n} from '../util/setup/VersionUtil';\nimport { throwError } from '../util/throwError';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n const nextVersionName = semver.inc(OptionHolder.versionName, OptionHolder.input.semverIncrement)!;\n const nextVersionCode = (() => {\n if (checkVersionCodeIsTiedWithVersionName(OptionHolder.versionName, OptionHolder.versionCode)) {\n return generateVersionCodeTiedWithVersionName(nextVersionName);\n } else {\n logger.warn(\n 'version name is not tied with version code like (1.3.5=1003005). Version code is just incremented by 1.',\n );\n return `${Number(OptionHolder.versionCode) + 1}`;\n }\n })();\n\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 await processCommit({ nextVersionName, nextVersionCode });\n if (OptionHolder.input.git.commit) {\n await promptTagAndPush({ nextVersionName, nextVersionCode });\n }\n}\n\nasync function preCheck() {\n if (isDev) return;\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\nasync function processCommit({\n nextVersionCode,\n nextVersionName,\n}: {\n nextVersionName: string;\n nextVersionCode: string;\n}) {\n if (!is.boolean(OptionHolder.input.git.commit)) {\n OptionHolder.input.git.commit = await select({\n message: constructInquirerFormattedMessage({ name: 'Commit?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n if (!is.notEmptyString(OptionHolder.input.git.commitMessage)) {\n OptionHolder.input.git.commitMessage = 'chore: release $(version) 🚀';\n }\n\n if (OptionHolder.input.git.commit) {\n await exe('git', ['add', '--all']);\n await exe('git', [\n 'commit',\n '-m',\n OptionHolder.input.git.commitMessage!.replaceAll(\n '$(version)',\n `${nextVersionName}(${nextVersionCode})`,\n ),\n ]);\n }\n}\n\nasync function promptTagAndPush({\n nextVersionCode,\n nextVersionName,\n}: {\n nextVersionName: string;\n nextVersionCode: string;\n}) {\n if (!is.boolean(OptionHolder.input.git.tag)) {\n OptionHolder.input.git.tag = await select({\n message: constructInquirerFormattedMessage({ name: 'Tag?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n if (!is.notEmptyString(OptionHolder.input.git.tagName)) {\n OptionHolder.input.git.tagName = 'v$(version)';\n }\n\n const tagName = OptionHolder.input.git.tagName!.replaceAll(\n '$(version)',\n `${nextVersionName}(${nextVersionCode})`,\n );\n\n if (OptionHolder.input.git.tag) {\n await exe('git', ['tag', '-a', tagName, '-m', tagName]);\n }\n\n if (!is.boolean(OptionHolder.input.git.push)) {\n OptionHolder.input.git.push = await select({\n message: constructInquirerFormattedMessage({ name: 'Push?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n\n if (OptionHolder.input.git.push) {\n if (OptionHolder.input.git.tag) {\n await exe('git', ['push', 'origin', tagName]);\n }\n await exe('git', ['push']);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bump-NbU_02fP.js","names":[],"sources":["../src/command/bump.ts"],"sourcesContent":["import { select } from '@inquirer/prompts';\nimport { is } from '@mj-studio/js-util';\nimport semver from 'semver';\n\nimport { isDev } from '../util/EnvUtil';\nimport { constructInquirerFormattedMessage } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { exe } from '../util/setup/execShellScript';\nimport { setup } from '../util/setup/setup';\nimport {\n checkVersionCodeIsTiedWithVersionName,\n generateVersionCodeTiedWithVersionName,\n injectBinaryVersions,\n} from '../util/setup/VersionUtil';\nimport { throwError } from '../util/throwError';\n\nexport async function bump({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await preCheck();\n await setup();\n\n const nextVersionName = semver.inc(OptionHolder.versionName, OptionHolder.input.semverIncrement)!;\n const nextVersionCode = (() => {\n if (checkVersionCodeIsTiedWithVersionName(OptionHolder.versionName, OptionHolder.versionCode)) {\n return generateVersionCodeTiedWithVersionName(nextVersionName);\n } else {\n logger.warn(\n 'version name is not tied with version code like (1.3.5=1003005). Version code is just incremented by 1.',\n );\n return `${Number(OptionHolder.versionCode) + 1}`;\n }\n })();\n\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 await processCommit({ nextVersionName, nextVersionCode });\n if (OptionHolder.input.git.commit) {\n await promptTagAndPush({ nextVersionName, nextVersionCode });\n }\n}\n\nasync function preCheck() {\n if (isDev) return;\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\nasync function processCommit({\n nextVersionCode,\n nextVersionName,\n}: {\n nextVersionName: string;\n nextVersionCode: string;\n}) {\n if (!is.boolean(OptionHolder.input.git.commit)) {\n OptionHolder.input.git.commit = await select({\n message: constructInquirerFormattedMessage({ name: 'Commit?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n if (!is.notEmptyString(OptionHolder.input.git.commitMessage)) {\n OptionHolder.input.git.commitMessage = 'chore: release $(version) 🚀';\n }\n\n if (OptionHolder.input.git.commit) {\n await exe('git', ['add', '--all']);\n await exe('git', [\n 'commit',\n '-m',\n OptionHolder.input.git.commitMessage!.replaceAll(\n '$(version)',\n `${nextVersionName}(${nextVersionCode})`,\n ),\n ]);\n }\n}\n\nasync function promptTagAndPush({\n nextVersionCode,\n nextVersionName,\n}: {\n nextVersionName: string;\n nextVersionCode: string;\n}) {\n if (!is.boolean(OptionHolder.input.git.tag)) {\n OptionHolder.input.git.tag = await select({\n message: constructInquirerFormattedMessage({ name: 'Tag?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n if (!is.notEmptyString(OptionHolder.input.git.tagName)) {\n OptionHolder.input.git.tagName = 'v$(version)';\n }\n\n const tagName = OptionHolder.input.git.tagName!.replaceAll(\n '$(version)',\n `${nextVersionName}(${nextVersionCode})`,\n );\n\n if (OptionHolder.input.git.tag) {\n await exe('git', ['tag', '-a', tagName, '-m', tagName]);\n }\n\n if (!is.boolean(OptionHolder.input.git.push)) {\n OptionHolder.input.git.push = await select({\n message: constructInquirerFormattedMessage({ name: 'Push?' }),\n choices: [\n { name: 'yes', value: true },\n { name: 'no', value: false },\n ],\n });\n }\n\n if (OptionHolder.input.git.push) {\n if (OptionHolder.input.git.tag) {\n await exe('git', ['push', 'origin', tagName]);\n }\n await exe('git', ['push']);\n }\n}\n"],"mappings":"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"}
@@ -1,23 +1,22 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../EnvUtil-C6QbCIoV.js";
3
- import "../FileUtil-Dbvp87_g.js";
4
- import "../OptionHolder-CJ5tzHpp.js";
5
- import "../FastlaneOption-CxjO9q-w.js";
6
- import "../InqueryInputs-hizV8u_U.js";
7
- import "../logger-DvQ7ScMQ.js";
8
- import "../execShellScript-Bd5xbFX5.js";
9
- import "../iterateAllFiles-CcRtjpos.js";
10
- import "../injectTemplatePlaceHolders-BzxCkQrW.js";
11
- import "../MetadataSyncUtil-BbrQb4Bc.js";
12
- import "../replaceStringIfNotContain-BncPMRZq.js";
13
- import "../spinner-BVmbE9I_.js";
14
- import "../prepareAndroid-bUMPHe4p.js";
15
- import "../prepareIos-D1ar2VGf.js";
16
- import "../parseConfigFile-Bv50df4o.js";
17
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
18
- import "../throwError-bsy4sijK.js";
19
- import "../VersionUtil-BPRjtPK_.js";
20
- import "../setup-BhGhMcG5.js";
21
- import { build } from "../build-I9mcpo6x.js";
2
+ import "../FileUtil-B9JnWobK.js";
3
+ import "../OptionHolder-ooRZtG0l.js";
4
+ import "../FastlaneOption-y0DYOkjC.js";
5
+ import "../InqueryInputs-CyW-i_4N.js";
6
+ import "../logger-CSZA77Zt.js";
7
+ import "../execShellScript-ZLVCvae2.js";
8
+ import "../NativeEnvironment-BAohR8aj.js";
9
+ import "../prepareAndroid-BQBbb44J.js";
10
+ import "../MetadataSyncUtil-BqWEE06B.js";
11
+ import "../RubyEnvironment-CqupQjgn.js";
12
+ import "../prepareFastlane-BmFwr96S.js";
13
+ import "../prepareIos-CGc-nhwf.js";
14
+ import "../EnvUtil-D5sfaKZs.js";
15
+ import "../parseConfigFile-DTkIYMK1.js";
16
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
17
+ import "../throwError-ebp_0a_3.js";
18
+ import "../VersionUtil-CttA4ATC.js";
19
+ import "../setup-Be5UwL9d.js";
20
+ import { build } from "../build-R29EBnOC.js";
22
21
 
23
22
  export { build };
@@ -1,14 +1,14 @@
1
- import "../EnvUtil-C6QbCIoV.js";
2
- import "../FileUtil-Dbvp87_g.js";
3
- import "../OptionHolder-CJ5tzHpp.js";
4
- import "../InqueryInputs-hizV8u_U.js";
5
- import "../logger-DvQ7ScMQ.js";
6
- import "../execShellScript-Bd5xbFX5.js";
7
- import "../parseConfigFile-Bv50df4o.js";
8
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
9
- import "../throwError-bsy4sijK.js";
10
- import "../VersionUtil-BPRjtPK_.js";
11
- import "../setup-BhGhMcG5.js";
12
- import { bump } from "../bump-BBGyihtk.js";
1
+ import "../FileUtil-B9JnWobK.js";
2
+ import "../OptionHolder-ooRZtG0l.js";
3
+ import "../InqueryInputs-CyW-i_4N.js";
4
+ import "../logger-CSZA77Zt.js";
5
+ import "../execShellScript-ZLVCvae2.js";
6
+ import "../EnvUtil-D5sfaKZs.js";
7
+ import "../parseConfigFile-DTkIYMK1.js";
8
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
9
+ import "../throwError-ebp_0a_3.js";
10
+ import "../VersionUtil-CttA4ATC.js";
11
+ import "../setup-Be5UwL9d.js";
12
+ import { bump } from "../bump-NbU_02fP.js";
13
13
 
14
14
  export { bump };
@@ -1,13 +1,13 @@
1
- import "../EnvUtil-C6QbCIoV.js";
2
- import "../FileUtil-Dbvp87_g.js";
3
- import "../OptionHolder-CJ5tzHpp.js";
4
- import "../InqueryInputs-hizV8u_U.js";
5
- import "../logger-DvQ7ScMQ.js";
6
- import "../parseConfigFile-Bv50df4o.js";
7
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
8
- import "../throwError-bsy4sijK.js";
9
- import "../VersionUtil-BPRjtPK_.js";
10
- import "../setup-BhGhMcG5.js";
11
- import { init } from "../init-Cce02h7G.js";
1
+ import "../FileUtil-B9JnWobK.js";
2
+ import "../OptionHolder-ooRZtG0l.js";
3
+ import "../InqueryInputs-CyW-i_4N.js";
4
+ import "../logger-CSZA77Zt.js";
5
+ import "../EnvUtil-D5sfaKZs.js";
6
+ import "../parseConfigFile-DTkIYMK1.js";
7
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
8
+ import "../throwError-ebp_0a_3.js";
9
+ import "../VersionUtil-CttA4ATC.js";
10
+ import "../setup-Be5UwL9d.js";
11
+ import { init } from "../init-DwlkVt7G.js";
12
12
 
13
13
  export { init };
@@ -1,22 +1,18 @@
1
- import "../EnvUtil-C6QbCIoV.js";
2
- import "../FileUtil-Dbvp87_g.js";
3
- import "../OptionHolder-CJ5tzHpp.js";
4
- import "../InqueryInputs-hizV8u_U.js";
5
- import "../logger-DvQ7ScMQ.js";
6
- import "../execShellScript-Bd5xbFX5.js";
7
- import "../iterateAllFiles-CcRtjpos.js";
8
- import "../injectTemplatePlaceHolders-BzxCkQrW.js";
9
- import "../MetadataSyncUtil-BbrQb4Bc.js";
10
- import "../replaceStringIfNotContain-BncPMRZq.js";
11
- import "../spinner-BVmbE9I_.js";
12
- import "../prepareAndroid-bUMPHe4p.js";
13
- import "../prepareIos-D1ar2VGf.js";
14
- import "../parseConfigFile-Bv50df4o.js";
15
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
16
- import "../throwError-bsy4sijK.js";
17
- import "../VersionUtil-BPRjtPK_.js";
18
- import "../setup-BhGhMcG5.js";
19
- import "../generateAppStoreConnectApiKeyFile-DeuJUndI.js";
20
- import { pull } from "../pull-CVuxaHAJ.js";
1
+ import "../FileUtil-B9JnWobK.js";
2
+ import "../OptionHolder-ooRZtG0l.js";
3
+ import "../InqueryInputs-CyW-i_4N.js";
4
+ import "../logger-CSZA77Zt.js";
5
+ import "../execShellScript-ZLVCvae2.js";
6
+ import "../MetadataSyncUtil-BqWEE06B.js";
7
+ import "../RubyEnvironment-CqupQjgn.js";
8
+ import "../prepareFastlane-BmFwr96S.js";
9
+ import "../EnvUtil-D5sfaKZs.js";
10
+ import "../parseConfigFile-DTkIYMK1.js";
11
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
12
+ import "../throwError-ebp_0a_3.js";
13
+ import "../VersionUtil-CttA4ATC.js";
14
+ import "../setup-Be5UwL9d.js";
15
+ import "../generateAppStoreConnectApiKeyFile-Bt2nK7lP.js";
16
+ import { pull } from "../pull-COg4G-1u.js";
21
17
 
22
18
  export { pull };
@@ -1,23 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../EnvUtil-C6QbCIoV.js";
3
- import "../FileUtil-Dbvp87_g.js";
4
- import "../OptionHolder-CJ5tzHpp.js";
5
- import "../FastlaneOption-CxjO9q-w.js";
6
- import "../InqueryInputs-hizV8u_U.js";
7
- import "../logger-DvQ7ScMQ.js";
8
- import "../execShellScript-Bd5xbFX5.js";
9
- import "../iterateAllFiles-CcRtjpos.js";
10
- import "../injectTemplatePlaceHolders-BzxCkQrW.js";
11
- import "../MetadataSyncUtil-BbrQb4Bc.js";
12
- import "../replaceStringIfNotContain-BncPMRZq.js";
13
- import "../spinner-BVmbE9I_.js";
14
- import "../prepareAndroid-bUMPHe4p.js";
15
- import "../prepareIos-D1ar2VGf.js";
16
- import "../parseConfigFile-Bv50df4o.js";
17
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
18
- import "../throwError-bsy4sijK.js";
19
- import "../VersionUtil-BPRjtPK_.js";
20
- import "../setup-BhGhMcG5.js";
21
- import { submit } from "../submit-BQ3IEiKv.js";
2
+ import "../FileUtil-B9JnWobK.js";
3
+ import "../OptionHolder-ooRZtG0l.js";
4
+ import "../FastlaneOption-y0DYOkjC.js";
5
+ import "../InqueryInputs-CyW-i_4N.js";
6
+ import "../logger-CSZA77Zt.js";
7
+ import "../execShellScript-ZLVCvae2.js";
8
+ import "../MetadataSyncUtil-BqWEE06B.js";
9
+ import "../RubyEnvironment-CqupQjgn.js";
10
+ import "../prepareFastlane-BmFwr96S.js";
11
+ import "../EnvUtil-D5sfaKZs.js";
12
+ import "../parseConfigFile-DTkIYMK1.js";
13
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
14
+ import "../throwError-ebp_0a_3.js";
15
+ import "../VersionUtil-CttA4ATC.js";
16
+ import "../setup-Be5UwL9d.js";
17
+ import { submit } from "../submit-BaL5kRHE.js";
22
18
 
23
19
  export { submit };
@@ -1,23 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../EnvUtil-C6QbCIoV.js";
3
- import "../FileUtil-Dbvp87_g.js";
4
- import "../OptionHolder-CJ5tzHpp.js";
5
- import "../FastlaneOption-CxjO9q-w.js";
6
- import "../InqueryInputs-hizV8u_U.js";
7
- import "../logger-DvQ7ScMQ.js";
8
- import "../execShellScript-Bd5xbFX5.js";
9
- import "../iterateAllFiles-CcRtjpos.js";
10
- import "../injectTemplatePlaceHolders-BzxCkQrW.js";
11
- import "../MetadataSyncUtil-BbrQb4Bc.js";
12
- import "../replaceStringIfNotContain-BncPMRZq.js";
13
- import "../spinner-BVmbE9I_.js";
14
- import "../prepareAndroid-bUMPHe4p.js";
15
- import "../prepareIos-D1ar2VGf.js";
16
- import "../parseConfigFile-Bv50df4o.js";
17
- import "../hydrateKeyholderFileValues-BKnI9nbx.js";
18
- import "../throwError-bsy4sijK.js";
19
- import "../VersionUtil-BPRjtPK_.js";
20
- import "../setup-BhGhMcG5.js";
21
- import { upload } from "../upload-DJXVLkT_.js";
2
+ import "../FileUtil-B9JnWobK.js";
3
+ import "../OptionHolder-ooRZtG0l.js";
4
+ import "../FastlaneOption-y0DYOkjC.js";
5
+ import "../InqueryInputs-CyW-i_4N.js";
6
+ import "../logger-CSZA77Zt.js";
7
+ import "../execShellScript-ZLVCvae2.js";
8
+ import "../MetadataSyncUtil-BqWEE06B.js";
9
+ import "../RubyEnvironment-CqupQjgn.js";
10
+ import "../prepareFastlane-BmFwr96S.js";
11
+ import "../EnvUtil-D5sfaKZs.js";
12
+ import "../parseConfigFile-DTkIYMK1.js";
13
+ import "../hydrateKeyholderFileValues-Cwmc5iwo.js";
14
+ import "../throwError-ebp_0a_3.js";
15
+ import "../VersionUtil-CttA4ATC.js";
16
+ import "../setup-Be5UwL9d.js";
17
+ import { upload } from "../upload-BY1mGc-G.js";
22
18
 
23
19
  export { upload };
@@ -0,0 +1,32 @@
1
+ import { redact } from "./logger-CSZA77Zt.js";
2
+ import { execa } from "execa";
3
+ import { createInterface } from "node:readline";
4
+
5
+ //#region src/util/setup/execShellScript.ts
6
+ async function printRedactedOutput(stream) {
7
+ let hasPrivateKey = false;
8
+ const privateKeyEnd = /-----END .*PRIVATE KEY-----/;
9
+ for await (const line of createInterface({ input: stream })) if (/-----BEGIN .*PRIVATE KEY-----/.test(line)) {
10
+ hasPrivateKey = !privateKeyEnd.test(line);
11
+ console.log("[REDACTED PRIVATE KEY]");
12
+ } else if (privateKeyEnd.test(line)) hasPrivateKey = false;
13
+ else if (!hasPrivateKey) console.log(redact(line));
14
+ }
15
+ async function exe(command, args = [], options = {}) {
16
+ const child = execa(command, args, {
17
+ ...options,
18
+ stdin: "pipe",
19
+ stdout: "pipe",
20
+ stderr: "pipe",
21
+ all: true,
22
+ reject: false
23
+ });
24
+ if (child.all) await printRedactedOutput(child.all);
25
+ const result = await child;
26
+ if (result.failed) throw result;
27
+ return result;
28
+ }
29
+
30
+ //#endregion
31
+ export { exe, printRedactedOutput };
32
+ //# sourceMappingURL=execShellScript-ZLVCvae2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execShellScript-ZLVCvae2.js","names":["stream: NodeJS.ReadableStream","command: string","args: string[]","options: Pick<Options, 'cwd' | 'env' | 'extendEnv'>"],"sources":["../src/util/setup/execShellScript.ts"],"sourcesContent":["import { createInterface } from 'node:readline';\n\nimport { execa, type Options } from 'execa';\n\nimport { redact } from '../logger';\n\nexport async function printRedactedOutput(stream: NodeJS.ReadableStream) {\n let hasPrivateKey = false;\n const privateKeyEnd = /-----END .*PRIVATE KEY-----/;\n for await (const line of createInterface({ input: stream })) {\n if (/-----BEGIN .*PRIVATE KEY-----/.test(line)) {\n hasPrivateKey = !privateKeyEnd.test(line);\n console.log('[REDACTED PRIVATE KEY]');\n } else if (privateKeyEnd.test(line)) {\n hasPrivateKey = false;\n } else if (!hasPrivateKey) {\n console.log(redact(line));\n }\n }\n}\n\nexport async function exe(\n command: string,\n args: string[] = [],\n options: Pick<Options, 'cwd' | 'env' | 'extendEnv'> = {},\n) {\n const child = execa(command, args, {\n ...options,\n stdin: 'pipe',\n stdout: 'pipe',\n stderr: 'pipe',\n all: true,\n reject: false,\n });\n if (child.all) await printRedactedOutput(child.all);\n const result = await child;\n if (result.failed) throw result;\n return result;\n}\n"],"mappings":";;;;;AAMA,eAAsB,oBAAoBA,QAA+B;CACvE,IAAI,gBAAgB;CACpB,MAAM,gBAAgB;AACtB,YAAW,MAAM,QAAQ,gBAAgB,EAAE,OAAO,OAAQ,EAAC,CACzD,KAAI,gCAAgC,KAAK,KAAK,EAAE;AAC9C,mBAAiB,cAAc,KAAK,KAAK;AACzC,UAAQ,IAAI,yBAAyB;CACtC,WAAU,cAAc,KAAK,KAAK,CACjC,iBAAgB;WACN,cACV,SAAQ,IAAI,OAAO,KAAK,CAAC;AAG9B;AAED,eAAsB,IACpBC,SACAC,OAAiB,CAAE,GACnBC,UAAsD,CAAE,GACxD;CACA,MAAM,QAAQ,MAAM,SAAS,MAAM;EACjC,GAAG;EACH,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,QAAQ;CACT,EAAC;AACF,KAAI,MAAM,IAAK,OAAM,oBAAoB,MAAM,IAAI;CACnD,MAAM,SAAS,MAAM;AACrB,KAAI,OAAO,OAAQ,OAAM;AACzB,QAAO;AACR"}
@@ -1,5 +1,5 @@
1
- import { join, read, resolve, writeJson } from "./FileUtil-Dbvp87_g.js";
2
- import { OptionHolder } from "./OptionHolder-CJ5tzHpp.js";
1
+ import { join, read, resolve, writeJson } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
3
3
 
4
4
  //#region src/util/generateAppStoreConnectApiKeyFile.ts
5
5
  function generateAppStoreConnectApiKeyFile() {
@@ -15,4 +15,4 @@ function generateAppStoreConnectApiKeyFile() {
15
15
 
16
16
  //#endregion
17
17
  export { generateAppStoreConnectApiKeyFile };
18
- //# sourceMappingURL=generateAppStoreConnectApiKeyFile-DeuJUndI.js.map
18
+ //# sourceMappingURL=generateAppStoreConnectApiKeyFile-Bt2nK7lP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateAppStoreConnectApiKeyFile-DeuJUndI.js","names":[],"sources":["../src/util/generateAppStoreConnectApiKeyFile.ts"],"sourcesContent":["import { join, read, resolve, writeJson } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\n\nexport function generateAppStoreConnectApiKeyFile() {\n const json = {\n key: read(resolve(OptionHolder.keyDir, 'ios_app_store_connect_api_key.p8')),\n key_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id,\n issuer_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id,\n };\n const file = join(OptionHolder.tempDir, 'app_store_connect_api.json');\n writeJson(file, json);\n return file;\n}\n"],"mappings":";;;;AAGA,SAAgB,oCAAoC;CAClD,MAAM,OAAO;EACX,KAAK,KAAK,QAAQ,aAAa,QAAQ,mCAAmC,CAAC;EAC3E,QAAQ,aAAa,aAAa;EAClC,WAAW,aAAa,aAAa;CACtC;CACD,MAAM,OAAO,KAAK,aAAa,SAAS,6BAA6B;AACrE,WAAU,MAAM,KAAK;AACrB,QAAO;AACR"}
1
+ {"version":3,"file":"generateAppStoreConnectApiKeyFile-Bt2nK7lP.js","names":[],"sources":["../src/util/generateAppStoreConnectApiKeyFile.ts"],"sourcesContent":["import { join, read, resolve, writeJson } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\n\nexport function generateAppStoreConnectApiKeyFile() {\n const json = {\n key: read(resolve(OptionHolder.keyDir, 'ios_app_store_connect_api_key.p8')),\n key_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id,\n issuer_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id,\n };\n const file = join(OptionHolder.tempDir, 'app_store_connect_api.json');\n writeJson(file, json);\n return file;\n}\n"],"mappings":";;;;AAGA,SAAgB,oCAAoC;CAClD,MAAM,OAAO;EACX,KAAK,KAAK,QAAQ,aAAa,QAAQ,mCAAmC,CAAC;EAC3E,QAAQ,aAAa,aAAa;EAClC,WAAW,aAAa,aAAa;CACtC;CACD,MAAM,OAAO,KAAK,aAAa,SAAS,6BAA6B;AACrE,WAAU,MAAM,KAAK;AACrB,QAAO;AACR"}
@@ -1,5 +1,5 @@
1
- import { exist, readJsonSlow } from "./FileUtil-Dbvp87_g.js";
2
- import { OptionHolder } from "./OptionHolder-CJ5tzHpp.js";
1
+ import { exist, readJsonSlow } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
3
3
 
4
4
  //#region src/util/setup/hydrateKeyholderFileValues.ts
5
5
  async function hydrateKeyholderFileValues() {
@@ -8,4 +8,4 @@ async function hydrateKeyholderFileValues() {
8
8
 
9
9
  //#endregion
10
10
  export { hydrateKeyholderFileValues };
11
- //# sourceMappingURL=hydrateKeyholderFileValues-BKnI9nbx.js.map
11
+ //# sourceMappingURL=hydrateKeyholderFileValues-Cwmc5iwo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hydrateKeyholderFileValues-BKnI9nbx.js","names":[],"sources":["../src/util/setup/hydrateKeyholderFileValues.ts"],"sourcesContent":["import { exist, readJsonSlow } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\n\nexport async function hydrateKeyholderFileValues() {\n if (exist(OptionHolder.keyholderFilePath)) {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n }\n}\n"],"mappings":";;;;AAGA,eAAsB,6BAA6B;AACjD,KAAI,MAAM,aAAa,kBAAkB,CACvC,QAAO,OAAO,aAAa,cAAc,aAAa,aAAa,kBAAkB,CAAC;AAEzF"}
1
+ {"version":3,"file":"hydrateKeyholderFileValues-Cwmc5iwo.js","names":[],"sources":["../src/util/setup/hydrateKeyholderFileValues.ts"],"sourcesContent":["import { exist, readJsonSlow } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\n\nexport async function hydrateKeyholderFileValues() {\n if (exist(OptionHolder.keyholderFilePath)) {\n Object.assign(OptionHolder.keyholderMap, readJsonSlow(OptionHolder.keyholderFilePath));\n }\n}\n"],"mappings":";;;;AAGA,eAAsB,6BAA6B;AACjD,KAAI,MAAM,aAAa,kBAAkB,CACvC,QAAO,OAAO,aAAa,cAAc,aAAa,aAAa,kBAAkB,CAAC;AAEzF"}
package/build/index.js CHANGED
@@ -1,30 +1,29 @@
1
1
  import "./calculateElapsed-DORWymX3.js";
2
- import "./EnvUtil-C6QbCIoV.js";
3
- import "./FileUtil-Dbvp87_g.js";
4
- import { OptionHolder } from "./OptionHolder-CJ5tzHpp.js";
5
- import "./FastlaneOption-CxjO9q-w.js";
6
- import "./InqueryInputs-hizV8u_U.js";
7
- import { logger } from "./logger-DvQ7ScMQ.js";
8
- import "./execShellScript-Bd5xbFX5.js";
9
- import "./iterateAllFiles-CcRtjpos.js";
10
- import "./injectTemplatePlaceHolders-BzxCkQrW.js";
11
- import "./MetadataSyncUtil-BbrQb4Bc.js";
12
- import "./replaceStringIfNotContain-BncPMRZq.js";
13
- import "./spinner-BVmbE9I_.js";
14
- import "./prepareAndroid-bUMPHe4p.js";
15
- import "./prepareIos-D1ar2VGf.js";
16
- import "./parseConfigFile-Bv50df4o.js";
17
- import "./hydrateKeyholderFileValues-BKnI9nbx.js";
18
- import { throwError } from "./throwError-bsy4sijK.js";
19
- import "./VersionUtil-BPRjtPK_.js";
20
- import "./setup-BhGhMcG5.js";
21
- import { build } from "./build-I9mcpo6x.js";
22
- import { bump } from "./bump-BBGyihtk.js";
23
- import { init } from "./init-Cce02h7G.js";
24
- import "./generateAppStoreConnectApiKeyFile-DeuJUndI.js";
25
- import { pull } from "./pull-CVuxaHAJ.js";
26
- import { submit } from "./submit-BQ3IEiKv.js";
27
- import { upload } from "./upload-DJXVLkT_.js";
2
+ import "./FileUtil-B9JnWobK.js";
3
+ import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
4
+ import "./FastlaneOption-y0DYOkjC.js";
5
+ import "./InqueryInputs-CyW-i_4N.js";
6
+ import { logger } from "./logger-CSZA77Zt.js";
7
+ import "./execShellScript-ZLVCvae2.js";
8
+ import "./NativeEnvironment-BAohR8aj.js";
9
+ import "./prepareAndroid-BQBbb44J.js";
10
+ import "./MetadataSyncUtil-BqWEE06B.js";
11
+ import "./RubyEnvironment-CqupQjgn.js";
12
+ import "./prepareFastlane-BmFwr96S.js";
13
+ import "./prepareIos-CGc-nhwf.js";
14
+ import "./EnvUtil-D5sfaKZs.js";
15
+ import "./parseConfigFile-DTkIYMK1.js";
16
+ import "./hydrateKeyholderFileValues-Cwmc5iwo.js";
17
+ import { throwError } from "./throwError-ebp_0a_3.js";
18
+ import "./VersionUtil-CttA4ATC.js";
19
+ import "./setup-Be5UwL9d.js";
20
+ import { build } from "./build-R29EBnOC.js";
21
+ import { bump } from "./bump-NbU_02fP.js";
22
+ import { init } from "./init-DwlkVt7G.js";
23
+ import "./generateAppStoreConnectApiKeyFile-Bt2nK7lP.js";
24
+ import { pull } from "./pull-COg4G-1u.js";
25
+ import { submit } from "./submit-BaL5kRHE.js";
26
+ import { upload } from "./upload-BY1mGc-G.js";
28
27
  import { Command, Option } from "commander";
29
28
  import { ExecaError } from "execa";
30
29
 
@@ -44,7 +43,7 @@ const run = () => {
44
43
  ...options,
45
44
  semverIncrement: options.increment
46
45
  } })));
47
- program.command("build").description("Build artifacts").addOption(platformOption).addOption(androidBuildOutputOption).addOption(configFileOption).action(async (options) => handleError(build({ options })));
46
+ program.command("build").description("Build artifacts from a clean Expo CNG project").option("--no-sign", "Build an unsigned iOS archive without Apple credentials").option("--ios-project <project>", "Xcode project filename when multiple projects exist").option("--ios-target <target>", "App target when multiple app targets exist").option("--ios-scheme <scheme>", "Build scheme when multiple schemes exist").addOption(platformOption).addOption(androidBuildOutputOption).addOption(configFileOption).action(async (options) => handleError(build({ options })));
48
47
  program.command("upload").description("Upload artifact to play console internal test track(android) and testflight(ios)").addOption(platformOption).addOption(androidBuildOutputOption).option("-m --uploadMetadata", "Upload store text metadatas").option("-s --uploadScreenshot", "Upload store screenshots").addOption(configFileOption).action(async (options) => handleError(upload({ options })));
49
48
  program.command("submit").description("Submit Google Play Console & App Store Connect Review with latest testing track").addOption(platformOption).option("-m --uploadMetadata", "Upload store text metadatas").option("-s --uploadScreenshot", "Upload store screenshots").addOption(configFileOption).action(async (options) => handleError(submit({ options })));
50
49
  program.command("pull").description("Download metadatas from stores").addOption(platformOption).option("-l --useLiveVersionIos", "Download metadatas from live version rather than draft").addOption(configFileOption).action(async (options) => handleError(pull({ options })));
@@ -55,7 +54,6 @@ async function handleError(promise) {
55
54
  return await promise;
56
55
  } catch (e) {
57
56
  if (e instanceof ExecaError) {
58
- logger.error(`ExecaError: command: ${e.escapedCommand}`);
59
57
  logger.error(e.message);
60
58
  process.exit(e.exitCode ?? 1);
61
59
  } else throwError(`Command Failed: ${e}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["promise: Promise<any>"],"sources":["../src/index.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { ExecaError } from 'execa';\n\nimport { build } from './command/build';\nimport { bump } from './command/bump';\nimport { init } from './command/init';\nimport { pull } from './command/pull';\nimport { submit } from './command/submit';\nimport { upload } from './command/upload';\nimport { logger } from './util/logger';\nimport { OptionHolder } from './util/OptionHolder';\nimport { throwError } from './util/throwError';\n\nconst platformOption = new Option('-p --platform <platform>', 'Platform').choices([\n 'android',\n 'ios',\n]);\nconst androidBuildOutputOption = new Option(\n '--androidOutput <output>',\n 'Android Build Output',\n).choices(['aab', 'apk']);\nconst configFileOption = new Option('--config <filePath>', 'expo-release-it.config.json path');\n\nexport const run = () => {\n const program = new Command();\n program\n .name('expo-release-it')\n .description(\n 'Opinionated Expo CICD workflow CLI for building & uploading & submitting Expo projects on your machine',\n )\n .version(OptionHolder.cli.version);\n\n program\n .command('init')\n .description('Configure resources and environment')\n .addOption(configFileOption)\n .action(async (options) => handleError(init({ options })));\n\n program\n .command('bump')\n .description('Bump binary release patch version with modifying app.json')\n .addOption(\n new Option('-i --increment <increment>', 'Version increment mode')\n .default('patch')\n .choices(['major', 'minor', 'patch']),\n )\n .addOption(configFileOption)\n .action(async (options) =>\n handleError(bump({ options: { ...options, semverIncrement: options.increment } })),\n );\n\n program\n .command('build')\n .description('Build artifacts')\n .addOption(platformOption)\n .addOption(androidBuildOutputOption)\n .addOption(configFileOption)\n .action(async (options) => handleError(build({ options })));\n\n program\n .command('upload')\n .description('Upload artifact to play console internal test track(android) and testflight(ios)')\n .addOption(platformOption)\n .addOption(androidBuildOutputOption)\n .option('-m --uploadMetadata', 'Upload store text metadatas')\n .option('-s --uploadScreenshot', 'Upload store screenshots')\n .addOption(configFileOption)\n .action(async (options) => handleError(upload({ options })));\n\n program\n .command('submit')\n .description('Submit Google Play Console & App Store Connect Review with latest testing track')\n .addOption(platformOption)\n .option('-m --uploadMetadata', 'Upload store text metadatas')\n .option('-s --uploadScreenshot', 'Upload store screenshots')\n .addOption(configFileOption)\n .action(async (options) => handleError(submit({ options })));\n\n program\n .command('pull')\n .description('Download metadatas from stores')\n .addOption(platformOption)\n .option('-l --useLiveVersionIos', 'Download metadatas from live version rather than draft')\n .addOption(configFileOption)\n .action(async (options) => handleError(pull({ options })));\n\n program.parse();\n};\n\nasync function handleError(promise: Promise<any>) {\n try {\n return await promise;\n } catch (e) {\n if (e instanceof ExecaError) {\n logger.error(`ExecaError: command: ${e.escapedCommand}`);\n logger.error(e.message);\n process.exit(e.exitCode ?? 1);\n } else {\n throwError(`Command Failed: ${e}`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,iBAAiB,IAAI,OAAO,4BAA4B,YAAY,QAAQ,CAChF,WACA,KACD,EAAC;AACF,MAAM,2BAA2B,IAAI,OACnC,4BACA,wBACA,QAAQ,CAAC,OAAO,KAAM,EAAC;AACzB,MAAM,mBAAmB,IAAI,OAAO,uBAAuB;AAE3D,MAAa,MAAM,MAAM;CACvB,MAAM,UAAU,IAAI;AACpB,SACG,KAAK,kBAAkB,CACvB,YACC,yGACD,CACA,QAAQ,aAAa,IAAI,QAAQ;AAEpC,SACG,QAAQ,OAAO,CACf,YAAY,sCAAsC,CAClD,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,KAAK,EAAE,QAAS,EAAC,CAAC,CAAC;AAE5D,SACG,QAAQ,OAAO,CACf,YAAY,4DAA4D,CACxE,UACC,IAAI,OAAO,8BAA8B,0BACtC,QAAQ,QAAQ,CAChB,QAAQ;EAAC;EAAS;EAAS;CAAQ,EAAC,CACxC,CACA,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YACb,YAAY,KAAK,EAAE,SAAS;EAAE,GAAG;EAAS,iBAAiB,QAAQ;CAAW,EAAE,EAAC,CAAC,CACnF;AAEH,SACG,QAAQ,QAAQ,CAChB,YAAY,kBAAkB,CAC9B,UAAU,eAAe,CACzB,UAAU,yBAAyB,CACnC,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,MAAM,EAAE,QAAS,EAAC,CAAC,CAAC;AAE7D,SACG,QAAQ,SAAS,CACjB,YAAY,mFAAmF,CAC/F,UAAU,eAAe,CACzB,UAAU,yBAAyB,CACnC,OAAO,uBAAuB,8BAA8B,CAC5D,OAAO,yBAAyB,2BAA2B,CAC3D,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,OAAO,EAAE,QAAS,EAAC,CAAC,CAAC;AAE9D,SACG,QAAQ,SAAS,CACjB,YAAY,kFAAkF,CAC9F,UAAU,eAAe,CACzB,OAAO,uBAAuB,8BAA8B,CAC5D,OAAO,yBAAyB,2BAA2B,CAC3D,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,OAAO,EAAE,QAAS,EAAC,CAAC,CAAC;AAE9D,SACG,QAAQ,OAAO,CACf,YAAY,iCAAiC,CAC7C,UAAU,eAAe,CACzB,OAAO,0BAA0B,yDAAyD,CAC1F,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,KAAK,EAAE,QAAS,EAAC,CAAC,CAAC;AAE5D,SAAQ,OAAO;AAChB;AAED,eAAe,YAAYA,SAAuB;AAChD,KAAI;AACF,SAAO,MAAM;CACd,SAAQ,GAAG;AACV,MAAI,aAAa,YAAY;AAC3B,UAAO,OAAO,uBAAuB,EAAE,eAAe,EAAE;AACxD,UAAO,MAAM,EAAE,QAAQ;AACvB,WAAQ,KAAK,EAAE,YAAY,EAAE;EAC9B,MACC,aAAY,kBAAkB,EAAE,EAAE;CAErC;AACF"}
1
+ {"version":3,"file":"index.js","names":["promise: Promise<any>"],"sources":["../src/index.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { ExecaError } from 'execa';\n\nimport { build } from './command/build';\nimport { bump } from './command/bump';\nimport { init } from './command/init';\nimport { pull } from './command/pull';\nimport { submit } from './command/submit';\nimport { upload } from './command/upload';\nimport { logger } from './util/logger';\nimport { OptionHolder } from './util/OptionHolder';\nimport { throwError } from './util/throwError';\n\nconst platformOption = new Option('-p --platform <platform>', 'Platform').choices([\n 'android',\n 'ios',\n]);\nconst androidBuildOutputOption = new Option(\n '--androidOutput <output>',\n 'Android Build Output',\n).choices(['aab', 'apk']);\nconst configFileOption = new Option('--config <filePath>', 'expo-release-it.config.json path');\n\nexport const run = () => {\n const program = new Command();\n program\n .name('expo-release-it')\n .description(\n 'Opinionated Expo CICD workflow CLI for building & uploading & submitting Expo projects on your machine',\n )\n .version(OptionHolder.cli.version);\n\n program\n .command('init')\n .description('Configure resources and environment')\n .addOption(configFileOption)\n .action(async (options) => handleError(init({ options })));\n\n program\n .command('bump')\n .description('Bump binary release patch version with modifying app.json')\n .addOption(\n new Option('-i --increment <increment>', 'Version increment mode')\n .default('patch')\n .choices(['major', 'minor', 'patch']),\n )\n .addOption(configFileOption)\n .action(async (options) =>\n handleError(bump({ options: { ...options, semverIncrement: options.increment } })),\n );\n\n program\n .command('build')\n .description('Build artifacts from a clean Expo CNG project')\n .option('--no-sign', 'Build an unsigned iOS archive without Apple credentials')\n .option('--ios-project <project>', 'Xcode project filename when multiple projects exist')\n .option('--ios-target <target>', 'App target when multiple app targets exist')\n .option('--ios-scheme <scheme>', 'Build scheme when multiple schemes exist')\n .addOption(platformOption)\n .addOption(androidBuildOutputOption)\n .addOption(configFileOption)\n .action(async (options) => handleError(build({ options })));\n\n program\n .command('upload')\n .description('Upload artifact to play console internal test track(android) and testflight(ios)')\n .addOption(platformOption)\n .addOption(androidBuildOutputOption)\n .option('-m --uploadMetadata', 'Upload store text metadatas')\n .option('-s --uploadScreenshot', 'Upload store screenshots')\n .addOption(configFileOption)\n .action(async (options) => handleError(upload({ options })));\n\n program\n .command('submit')\n .description('Submit Google Play Console & App Store Connect Review with latest testing track')\n .addOption(platformOption)\n .option('-m --uploadMetadata', 'Upload store text metadatas')\n .option('-s --uploadScreenshot', 'Upload store screenshots')\n .addOption(configFileOption)\n .action(async (options) => handleError(submit({ options })));\n\n program\n .command('pull')\n .description('Download metadatas from stores')\n .addOption(platformOption)\n .option('-l --useLiveVersionIos', 'Download metadatas from live version rather than draft')\n .addOption(configFileOption)\n .action(async (options) => handleError(pull({ options })));\n\n program.parse();\n};\n\nasync function handleError(promise: Promise<any>) {\n try {\n return await promise;\n } catch (e) {\n if (e instanceof ExecaError) {\n logger.error(e.message);\n process.exit(e.exitCode ?? 1);\n } else {\n throwError(`Command Failed: ${e}`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,MAAM,iBAAiB,IAAI,OAAO,4BAA4B,YAAY,QAAQ,CAChF,WACA,KACD,EAAC;AACF,MAAM,2BAA2B,IAAI,OACnC,4BACA,wBACA,QAAQ,CAAC,OAAO,KAAM,EAAC;AACzB,MAAM,mBAAmB,IAAI,OAAO,uBAAuB;AAE3D,MAAa,MAAM,MAAM;CACvB,MAAM,UAAU,IAAI;AACpB,SACG,KAAK,kBAAkB,CACvB,YACC,yGACD,CACA,QAAQ,aAAa,IAAI,QAAQ;AAEpC,SACG,QAAQ,OAAO,CACf,YAAY,sCAAsC,CAClD,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,KAAK,EAAE,QAAS,EAAC,CAAC,CAAC;AAE5D,SACG,QAAQ,OAAO,CACf,YAAY,4DAA4D,CACxE,UACC,IAAI,OAAO,8BAA8B,0BACtC,QAAQ,QAAQ,CAChB,QAAQ;EAAC;EAAS;EAAS;CAAQ,EAAC,CACxC,CACA,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YACb,YAAY,KAAK,EAAE,SAAS;EAAE,GAAG;EAAS,iBAAiB,QAAQ;CAAW,EAAE,EAAC,CAAC,CACnF;AAEH,SACG,QAAQ,QAAQ,CAChB,YAAY,gDAAgD,CAC5D,OAAO,aAAa,0DAA0D,CAC9E,OAAO,2BAA2B,sDAAsD,CACxF,OAAO,yBAAyB,6CAA6C,CAC7E,OAAO,yBAAyB,2CAA2C,CAC3E,UAAU,eAAe,CACzB,UAAU,yBAAyB,CACnC,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,MAAM,EAAE,QAAS,EAAC,CAAC,CAAC;AAE7D,SACG,QAAQ,SAAS,CACjB,YAAY,mFAAmF,CAC/F,UAAU,eAAe,CACzB,UAAU,yBAAyB,CACnC,OAAO,uBAAuB,8BAA8B,CAC5D,OAAO,yBAAyB,2BAA2B,CAC3D,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,OAAO,EAAE,QAAS,EAAC,CAAC,CAAC;AAE9D,SACG,QAAQ,SAAS,CACjB,YAAY,kFAAkF,CAC9F,UAAU,eAAe,CACzB,OAAO,uBAAuB,8BAA8B,CAC5D,OAAO,yBAAyB,2BAA2B,CAC3D,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,OAAO,EAAE,QAAS,EAAC,CAAC,CAAC;AAE9D,SACG,QAAQ,OAAO,CACf,YAAY,iCAAiC,CAC7C,UAAU,eAAe,CACzB,OAAO,0BAA0B,yDAAyD,CAC1F,UAAU,iBAAiB,CAC3B,OAAO,OAAO,YAAY,YAAY,KAAK,EAAE,QAAS,EAAC,CAAC,CAAC;AAE5D,SAAQ,OAAO;AAChB;AAED,eAAe,YAAYA,SAAuB;AAChD,KAAI;AACF,SAAO,MAAM;CACd,SAAQ,GAAG;AACV,MAAI,aAAa,YAAY;AAC3B,UAAO,MAAM,EAAE,QAAQ;AACvB,WAAQ,KAAK,EAAE,YAAY,EAAE;EAC9B,MACC,aAAY,kBAAkB,EAAE,EAAE;CAErC;AACF"}
@@ -1,10 +1,10 @@
1
- import { copy, join, writeJson } from "./FileUtil-Dbvp87_g.js";
2
- import { OptionHolder } from "./OptionHolder-CJ5tzHpp.js";
3
- import { constructInquirerFormattedMessage } from "./InqueryInputs-hizV8u_U.js";
4
- import { logger } from "./logger-DvQ7ScMQ.js";
5
- import { setup } from "./setup-BhGhMcG5.js";
1
+ import { copy, join, writeJson } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
3
+ import { constructInquirerFormattedMessage } from "./InqueryInputs-CyW-i_4N.js";
4
+ import { logger } from "./logger-CSZA77Zt.js";
5
+ import { setup } from "./setup-Be5UwL9d.js";
6
6
  import chalk from "chalk";
7
- import { input } from "@inquirer/prompts";
7
+ import { input, password } from "@inquirer/prompts";
8
8
 
9
9
  //#region src/command/init.ts
10
10
  async function init({ options }) {
@@ -46,15 +46,14 @@ async function promptInputs() {
46
46
  required: true,
47
47
  default: OptionHolder.keyholderMap.ios_match_git_url
48
48
  });
49
- OptionHolder.keyholderMap.ios_match_password = await input({
49
+ OptionHolder.keyholderMap.ios_match_password = await inputSecret({
50
50
  message: constructInquirerFormattedMessage({
51
51
  name: "iOS Fastlane Match Passphrase",
52
52
  explanation: "When running match for the first time on a new machine, it will ask you for the passphrase for the Git repository. This is an additional layer of security: each of the files will be encrypted using openssl. Make sure to remember the password, as you'll need it when you run match on a different machine.",
53
53
  example: "yourpassphrase",
54
54
  referUrl: "https://docs.fastlane.tools/actions/match/"
55
55
  }),
56
- required: true,
57
- default: OptionHolder.keyholderMap.ios_match_password
56
+ previous: OptionHolder.keyholderMap.ios_match_password
58
57
  });
59
58
  OptionHolder.keyholderMap.ios_app_store_connect_api_key_id = await input({
60
59
  message: constructInquirerFormattedMessage({
@@ -78,15 +77,6 @@ App Store Connect API Key can be issued in ${chalk.underline.blue("https://appst
78
77
  required: true,
79
78
  default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id
80
79
  });
81
- OptionHolder.keyholderMap.ios_xcode_project_target = await input({
82
- message: constructInquirerFormattedMessage({
83
- name: "iOS App Target Name",
84
- explanation: "A target in Xcode defines a product to build, including app, extension, or framework, with its own settings and build instructions.\nUsually, this is equivalent to {{name}}.xcodeproj in your ios directory",
85
- example: "app"
86
- }),
87
- required: true,
88
- default: OptionHolder.keyholderMap.ios_xcode_project_target || "app"
89
- });
90
80
  OptionHolder.keyholderMap.android_package_name = await input({
91
81
  message: constructInquirerFormattedMessage({
92
82
  name: "Android Package Name",
@@ -97,7 +87,7 @@ App Store Connect API Key can be issued in ${chalk.underline.blue("https://appst
97
87
  required: true,
98
88
  default: OptionHolder.keyholderMap.android_package_name
99
89
  });
100
- OptionHolder.keyholderMap.android_keystore_store_password = await input({
90
+ OptionHolder.keyholderMap.android_keystore_store_password = await inputSecret({
101
91
  message: constructInquirerFormattedMessage({
102
92
  name: "Android Keystore Store Password",
103
93
  explanation: `Storage password used in android release keystore
@@ -105,8 +95,7 @@ You can issue your android release keystore following this guide: ${chalk.underl
105
95
  Or, you can do same thing with CLI: ${chalk.underline.blue("https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f")}`,
106
96
  referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
107
97
  }),
108
- required: true,
109
- default: OptionHolder.keyholderMap.android_keystore_store_password
98
+ previous: OptionHolder.keyholderMap.android_keystore_store_password
110
99
  });
111
100
  OptionHolder.keyholderMap.android_keystore_key_alias = await input({
112
101
  message: constructInquirerFormattedMessage({
@@ -119,7 +108,7 @@ Or, you can do same thing with CLI: ${chalk.underline.blue("https://gist.github.
119
108
  required: true,
120
109
  default: OptionHolder.keyholderMap.android_keystore_key_alias
121
110
  });
122
- OptionHolder.keyholderMap.android_keystore_key_password = await input({
111
+ OptionHolder.keyholderMap.android_keystore_key_password = await inputSecret({
123
112
  message: constructInquirerFormattedMessage({
124
113
  name: "Android Keystore Key Password",
125
114
  explanation: `Key password used in android release keystore
@@ -127,10 +116,18 @@ You can issue your android release keystore following this guide: ${chalk.underl
127
116
  Or, you can do same thing with CLI: ${chalk.underline.blue("https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f")}`,
128
117
  referUrl: "https://developer.android.com/studio/publish/app-signing.html#generate-key"
129
118
  }),
130
- required: true,
131
- default: OptionHolder.keyholderMap.android_keystore_key_password
119
+ previous: OptionHolder.keyholderMap.android_keystore_key_password
132
120
  });
133
121
  writeJson(OptionHolder.keyholderFilePath, OptionHolder.keyholderMap);
122
+ async function inputSecret({ message, previous }) {
123
+ const stored = previous ?? "";
124
+ const value = await password({
125
+ message: stored ? `${message}\nLeave blank to keep the stored value.` : message,
126
+ mask: true,
127
+ validate: (value$1) => Boolean(value$1 || stored) || "A value is required."
128
+ });
129
+ return value || stored;
130
+ }
134
131
  }
135
132
  async function copyTemplates() {
136
133
  for (const dir of OptionHolder.templateDirNames) await copyDirRecursively(dir);
@@ -143,4 +140,4 @@ async function copyTemplates() {
143
140
 
144
141
  //#endregion
145
142
  export { init };
146
- //# sourceMappingURL=init-Cce02h7G.js.map
143
+ //# sourceMappingURL=init-DwlkVt7G.js.map