expo-release-it 0.7.0 → 1.0.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 (113) hide show
  1. package/README.md +30 -1
  2. package/build/CredentialVault-DJK55Brb.js +297 -0
  3. package/build/CredentialVault-DJK55Brb.js.map +1 -0
  4. package/build/{EnvUtil-D5sfaKZs.js → EnvUtil-bT6jh2Up.js} +1 -1
  5. package/build/{EnvUtil-D5sfaKZs.js.map → EnvUtil-bT6jh2Up.js.map} +1 -1
  6. package/build/{FastlaneOption-y0DYOkjC.js → FastlaneOption-D4A4hWrQ.js} +7 -6
  7. package/build/FastlaneOption-D4A4hWrQ.js.map +1 -0
  8. package/build/{FileUtil-B9JnWobK.js → FileUtil-Dq8PORna.js} +4 -4
  9. package/build/FileUtil-Dq8PORna.js.map +1 -0
  10. package/build/{InqueryInputs-CyW-i_4N.js → InqueryInputs-C7bgU4_P.js} +2 -2
  11. package/build/{InqueryInputs-CyW-i_4N.js.map → InqueryInputs-C7bgU4_P.js.map} +1 -1
  12. package/build/{MetadataSyncUtil-BqWEE06B.js → MetadataSyncUtil-D8LnTqSH.js} +4 -4
  13. package/build/{MetadataSyncUtil-BqWEE06B.js.map → MetadataSyncUtil-D8LnTqSH.js.map} +1 -1
  14. package/build/{NativeEnvironment-BAohR8aj.js → NativeEnvironment-CQn7erIC.js} +5 -5
  15. package/build/{NativeEnvironment-BAohR8aj.js.map → NativeEnvironment-CQn7erIC.js.map} +1 -1
  16. package/build/{OptionHolder-ooRZtG0l.js → OptionHolder-DCm-Anf0.js} +3 -4
  17. package/build/OptionHolder-DCm-Anf0.js.map +1 -0
  18. package/build/{RubyEnvironment-CqupQjgn.js → RubyEnvironment-CPq_9yPd.js} +7 -6
  19. package/build/RubyEnvironment-CPq_9yPd.js.map +1 -0
  20. package/build/{RubyEnvironment-K1nIGrMJ.d.ts → RubyEnvironment-DZ8FuUEh.d.ts} +2 -2
  21. package/build/{VersionUtil-CttA4ATC.js → VersionUtil-Io9Zx_Fc.js} +4 -4
  22. package/build/{VersionUtil-CttA4ATC.js.map → VersionUtil-Io9Zx_Fc.js.map} +1 -1
  23. package/build/{build-R29EBnOC.js → build-DPBOtXRM.js} +15 -16
  24. package/build/build-DPBOtXRM.js.map +1 -0
  25. package/build/{bump-NbU_02fP.js → bump-BoN6SXri.js} +10 -10
  26. package/build/bump-BoN6SXri.js.map +1 -0
  27. package/build/command/build.js +19 -19
  28. package/build/command/bump.js +12 -12
  29. package/build/command/init.js +11 -11
  30. package/build/command/pull.js +16 -16
  31. package/build/command/submit.js +16 -16
  32. package/build/command/upload.js +16 -16
  33. package/build/{execShellScript-ZLVCvae2.js → execShellScript-5FcHM7dZ.js} +8 -2
  34. package/build/execShellScript-5FcHM7dZ.js.map +1 -0
  35. package/build/generateAppStoreConnectApiKeyFile-Deww9U-5.js +16 -0
  36. package/build/generateAppStoreConnectApiKeyFile-Deww9U-5.js.map +1 -0
  37. package/build/index.js +34 -31
  38. package/build/index.js.map +1 -1
  39. package/build/{init-DwlkVt7G.js → init-BKcVizS6.js} +31 -20
  40. package/build/init-BKcVizS6.js.map +1 -0
  41. package/build/{iterateAllFiles-Yx59MXv2.js → iterateAllFiles-Cofs0nGH.js} +2 -2
  42. package/build/{iterateAllFiles-Yx59MXv2.js.map → iterateAllFiles-Cofs0nGH.js.map} +1 -1
  43. package/build/{logger-CSZA77Zt.js → logger-BLZBLDnp.js} +15 -4
  44. package/build/logger-BLZBLDnp.js.map +1 -0
  45. package/build/{parseConfigFile-DTkIYMK1.js → parseConfigFile-BGBx_tJj.js} +3 -3
  46. package/build/{parseConfigFile-DTkIYMK1.js.map → parseConfigFile-BGBx_tJj.js.map} +1 -1
  47. package/build/{prepareAndroid-BQBbb44J.js → prepareAndroid-4S_Vq9Zn.js} +6 -6
  48. package/build/prepareAndroid-4S_Vq9Zn.js.map +1 -0
  49. package/build/{prepareFastlane-BmFwr96S.js → prepareFastlane-ns6kCOjb.js} +5 -5
  50. package/build/{prepareFastlane-BmFwr96S.js.map → prepareFastlane-ns6kCOjb.js.map} +1 -1
  51. package/build/{prepareIos-CGc-nhwf.js → prepareIos-CXqNQ40Q.js} +6 -3
  52. package/build/prepareIos-CXqNQ40Q.js.map +1 -0
  53. package/build/{pull-COg4G-1u.js → pull-BiLvHoN9.js} +13 -11
  54. package/build/pull-BiLvHoN9.js.map +1 -0
  55. package/build/setup-q_SlIP_M.js +25 -0
  56. package/build/setup-q_SlIP_M.js.map +1 -0
  57. package/build/{submit-BaL5kRHE.js → submit-BLq6epKd.js} +7 -7
  58. package/build/{submit-BaL5kRHE.js.map → submit-BLq6epKd.js.map} +1 -1
  59. package/build/{throwError-ebp_0a_3.js → throwError-CjtFnSTp.js} +3 -3
  60. package/build/{throwError-ebp_0a_3.js.map → throwError-CjtFnSTp.js.map} +1 -1
  61. package/build/{upload-BY1mGc-G.js → upload-DyMky8Rn.js} +7 -7
  62. package/build/{upload-BY1mGc-G.js.map → upload-DyMky8Rn.js.map} +1 -1
  63. package/build/util/CredentialVault.d.ts +33 -0
  64. package/build/util/CredentialVault.js +6 -0
  65. package/build/util/EnvUtil.js +1 -1
  66. package/build/util/FastlaneOption.d.ts +1 -1
  67. package/build/util/FastlaneOption.js +5 -3
  68. package/build/util/FileUtil.js +1 -1
  69. package/build/util/MetadataSyncUtil.js +4 -4
  70. package/build/util/OptionHolder.d.ts +1 -1
  71. package/build/util/OptionHolder.js +2 -2
  72. package/build/util/generateAppStoreConnectApiKeyFile.js +5 -3
  73. package/build/util/injectTemplatePlaceHolders.js +3 -3
  74. package/build/util/input/InqueryInputs.js +3 -3
  75. package/build/util/iterateAllFiles.js +2 -2
  76. package/build/util/logger.d.ts +2 -1
  77. package/build/util/logger.js +4 -4
  78. package/build/util/parseConfigFile.js +3 -3
  79. package/build/util/setup/NativeEnvironment.js +6 -5
  80. package/build/util/setup/RubyEnvironment.d.ts +1 -1
  81. package/build/util/setup/RubyEnvironment.js +6 -5
  82. package/build/util/setup/VersionUtil.js +6 -6
  83. package/build/util/setup/execShellScript.d.ts +5 -2
  84. package/build/util/setup/execShellScript.js +5 -4
  85. package/build/util/setup/prepareAndroid.js +5 -3
  86. package/build/util/setup/prepareFastlane.d.ts +1 -1
  87. package/build/util/setup/prepareFastlane.js +8 -7
  88. package/build/util/setup/prepareIos.d.ts +1 -1
  89. package/build/util/setup/prepareIos.js +5 -3
  90. package/build/util/setup/setup.d.ts +6 -3
  91. package/build/util/setup/setup.js +10 -10
  92. package/build/util/throwError.js +5 -5
  93. package/package.json +1 -1
  94. package/build/FastlaneOption-y0DYOkjC.js.map +0 -1
  95. package/build/FileUtil-B9JnWobK.js.map +0 -1
  96. package/build/OptionHolder-ooRZtG0l.js.map +0 -1
  97. package/build/RubyEnvironment-CqupQjgn.js.map +0 -1
  98. package/build/build-R29EBnOC.js.map +0 -1
  99. package/build/bump-NbU_02fP.js.map +0 -1
  100. package/build/execShellScript-ZLVCvae2.js.map +0 -1
  101. package/build/generateAppStoreConnectApiKeyFile-Bt2nK7lP.js +0 -18
  102. package/build/generateAppStoreConnectApiKeyFile-Bt2nK7lP.js.map +0 -1
  103. package/build/hydrateKeyholderFileValues-Cwmc5iwo.js +0 -11
  104. package/build/hydrateKeyholderFileValues-Cwmc5iwo.js.map +0 -1
  105. package/build/init-DwlkVt7G.js.map +0 -1
  106. package/build/logger-CSZA77Zt.js.map +0 -1
  107. package/build/prepareAndroid-BQBbb44J.js.map +0 -1
  108. package/build/prepareIos-CGc-nhwf.js.map +0 -1
  109. package/build/pull-COg4G-1u.js.map +0 -1
  110. package/build/setup-Be5UwL9d.js +0 -25
  111. package/build/setup-Be5UwL9d.js.map +0 -1
  112. package/build/util/setup/hydrateKeyholderFileValues.d.ts +0 -5
  113. package/build/util/setup/hydrateKeyholderFileValues.js +0 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionHolder-DCm-Anf0.js","names":["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 uploadScreenshot: boolean;\n androidOutput: 'apk' | 'aab';\n sign?: boolean;\n iosProject?: string;\n iosTarget?: string;\n iosScheme?: string;\n iosWorkspace?: string;\n useLiveVersionIos: boolean;\n semverIncrement: 'major' | 'minor' | 'patch';\n config?: string;\n envFile?: string;\n git: {\n commit?: boolean;\n commitMessage?: string;\n tag?: boolean;\n tagName?: string;\n push?: boolean;\n };\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_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 // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n resourcesDir: string;\n keyDir: string;\n keyholderFilePath: string;\n tempDir: string;\n versionName: string;\n versionCode: string;\n}","pkgJson"],"sources":["../package.json","../src/util/OptionHolder.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"version\": \"1.0.0\",\n \"homepage\": \"https://expo-release-it.mjstudio.net/\",\n \"license\": \"MIT\",\n \"repository\": \"https://github.com/mym0404/expo-release-it\",\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\",\n \"expo-release-it.schema.json\"\n ],\n \"type\": \"module\",\n \"module\": \"src/index.ts\",\n \"scripts\": {\n \"build\": \"pnpm build:json-schema-type && tsdown --silent\",\n \"build:json-schema-type\": \"json2ts --input expo-release-it.schema.json --output src/type/ExpoReleaseItConfiguration.d.ts && oxfmt --write src/type/ExpoReleaseItConfiguration.d.ts\",\n \"dev\": \"pnpm build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"pnpm build && pnpm run t && changeset publish\",\n \"t\": \"lefthook run check\",\n \"lint\": \"oxlint --deny-warnings .\",\n \"lint:fix\": \"oxlint --fix .\",\n \"format\": \"oxfmt --write .\",\n \"format:check\": \"oxfmt --check .\",\n \"changeset\": \"changeset\",\n \"version-packages\": \"changeset version && pnpm install --lockfile-only --ignore-scripts\",\n \"test:e2e\": \"node test/e2e.mjs\",\n \"test:ruby\": \"node test/ruby.mjs\"\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 \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\"\n },\n \"devDependencies\": {\n \"@changesets/cli\": \"^3.0.3\",\n \"@commitlint/config-conventional\": \"^19.8.0\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"json-schema-to-typescript\": \"^15.0.4\",\n \"lefthook\": \"^1.11.11\",\n \"oxfmt\": \"0.75.0\",\n \"oxlint\": \"1.90.0\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsdown\": \"^0.12.7\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"^3.1.2\"\n },\n \"commitlint\": {\n \"extends\": [\n \"@commitlint/config-conventional\"\n ]\n },\n \"packageManager\": \"pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39\"\n}\n","import { fileURLToPath } from 'url';\n\nimport pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\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 uploadScreenshot: boolean;\n androidOutput: 'apk' | 'aab';\n sign?: boolean;\n iosProject?: string;\n iosTarget?: string;\n iosScheme?: string;\n iosWorkspace?: string;\n useLiveVersionIos: boolean;\n semverIncrement: 'major' | 'minor' | 'patch';\n config?: string;\n envFile?: string;\n git: {\n commit?: boolean;\n commitMessage?: string;\n tag?: boolean;\n tagName?: string;\n push?: boolean;\n };\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_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 // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n resourcesDir: 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: {\n git: {},\n } as any,\n keyholderMap: {} as any,\n projectDir: '',\n resourcesDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n tempDir: '',\n};\n"],"mappings":";;;;WACU;cACG;eACC;cACD;iBACG;UACP;YACE;CACP;CACA;CACA;CACA;CACA;AACD;WACO;aACE;cACC;CACT,SAAS;CACT,0BAA0B;CAC1B,OAAO;CACP,WAAW;CACX,KAAK;CACL,QAAQ;CACR,YAAY;CACZ,UAAU;CACV,gBAAgB;CAChB,aAAa;CACb,oBAAoB;CACpB,YAAY;CACZ,aAAa;AACd;mBACe;CACd,qBAAqB;CACrB,sBAAsB;CACtB,SAAS;CACT,aAAa;CACb,SAAS;CACT,YAAY;CACZ,OAAO;CACP,UAAU;CACV,OAAO;AACR;sBACkB;CACjB,mBAAmB;CACnB,mCAAmC;CACnC,mBAAmB;CACnB,iBAAiB;CACjB,6BAA6B;CAC7B,YAAY;CACZ,SAAS;CACT,UAAU;CACV,aAAa;CACb,UAAU;CACV,cAAc;CACd,UAAU;AACX;iBACa,EACZ,WAAW,CACT,iCACD,EACF;qBACiB;sBA7DpB;;;;;;;;;;;;;;;AA8DC;;;;;;;;ACrDD,MAAaA,eAsDT;CACF,KAAK;EACH,SAASC,gBAAQ;EACjB,SAAS,QAAQ,cAAc,OAAO,KAAK,IAAI,EAAE,QAAQ;EACzD,aAAa,QAAQ,cAAc,OAAO,KAAK,IAAI,EAAE,iBAAiB;CACvE;CACD,OAAO,EACL,KAAK,CAAE,EACR;CACD,cAAc,CAAE;CAChB,YAAY;CACZ,cAAc;CACd,QAAQ;CACR,mBAAmB;CACnB,aAAa;CACb,aAAa;CACb,SAAS;AACV"}
@@ -1,7 +1,8 @@
1
- import { copy, read, resolve, write } from "./FileUtil-B9JnWobK.js";
2
- import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
3
- import { logger, redact } from "./logger-CSZA77Zt.js";
4
- import { printRedactedOutput } from "./execShellScript-ZLVCvae2.js";
1
+ import { OptionHolder } from "./OptionHolder-DCm-Anf0.js";
2
+ import { copy, read, resolve, write } from "./FileUtil-Dq8PORna.js";
3
+ import { logger, redact } from "./logger-BLZBLDnp.js";
4
+ import { credentialProcessEnvironment } from "./CredentialVault-DJK55Brb.js";
5
+ import { printRedactedOutput } from "./execShellScript-5FcHM7dZ.js";
5
6
  import { execa } from "execa";
6
7
  import { dirname } from "node:path";
7
8
  import semver from "semver";
@@ -12,7 +13,7 @@ const gemfileName = "Gemfile";
12
13
  const lockfileName = "Gemfile.lock";
13
14
  const bundleLauncher = "version = ARGV.shift; gem \"bundler\", version; load Gem.bin_path(\"bundler\", \"bundle\", version)";
14
15
  function rubyProcessEnvironment() {
15
- return Object.fromEntries(Object.entries(process.env).filter(([key]) => !key.startsWith("BUNDLE_") && !["RUBYOPT", "RUBYLIB"].includes(key)));
16
+ return Object.fromEntries(Object.entries(credentialProcessEnvironment()).filter(([key]) => !key.startsWith("BUNDLE_") && !["RUBYOPT", "RUBYLIB"].includes(key)));
16
17
  }
17
18
  async function inspectRubyEnvironment({ needsPods = false } = {}) {
18
19
  const sourceDir = resolve(OptionHolder.cli.templateDir, "ruby");
@@ -110,4 +111,4 @@ async function inspectRubyEnvironment({ needsPods = false } = {}) {
110
111
 
111
112
  //#endregion
112
113
  export { inspectRubyEnvironment, rubyProcessEnvironment, rubyRequirement };
113
- //# sourceMappingURL=RubyEnvironment-CqupQjgn.js.map
114
+ //# sourceMappingURL=RubyEnvironment-CPq_9yPd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RubyEnvironment-CPq_9yPd.js","names":["ruby: { ruby: string; version: string; engine: string; platform: string; bundle?: string }","args: string[]","options: { cwd?: string; env?: Record<string, string>; capture?: boolean }"],"sources":["../src/util/setup/RubyEnvironment.ts"],"sourcesContent":["import { dirname } from 'node:path';\n\nimport { execa } from 'execa';\nimport semver from 'semver';\n\nimport { credentialProcessEnvironment } from '../CredentialVault';\nimport { copy, read, resolve, write } from '../FileUtil';\nimport { logger, redact } from '../logger';\nimport { OptionHolder } from '../OptionHolder';\nimport { printRedactedOutput } from './execShellScript';\n\nexport const rubyRequirement = '>=3.3.0 <4.1.0';\nconst gemfileName = 'Gemfile';\nconst lockfileName = 'Gemfile.lock';\nconst bundleLauncher =\n 'version = ARGV.shift; gem \"bundler\", version; load Gem.bin_path(\"bundler\", \"bundle\", version)';\n\nexport function rubyProcessEnvironment() {\n return Object.fromEntries(\n Object.entries(credentialProcessEnvironment()).filter(\n ([key]) => !key.startsWith('BUNDLE_') && !['RUBYOPT', 'RUBYLIB'].includes(key),\n ),\n );\n}\n\nexport async function inspectRubyEnvironment({ needsPods = false } = {}) {\n const sourceDir = resolve(OptionHolder.cli.templateDir, 'ruby');\n const lockfile = read(resolve(sourceDir, lockfileName));\n const bundlerVersion = /BUNDLED WITH\\s+([\\d.]+)/.exec(lockfile)?.[1] ?? '';\n if (!bundlerVersion) throw new Error('The packaged Gemfile.lock has no Bundler version.');\n\n const env = rubyProcessEnvironment();\n const probe = await execa(\n 'ruby',\n [\n '-rjson',\n '-rrbconfig',\n '-e',\n 'v = ARGV.first; s = Gem::Specification.find_all_by_name(\"bundler\", v).first; puts JSON.generate(ruby: RbConfig.ruby, version: RUBY_VERSION, engine: RUBY_ENGINE, platform: Gem::Platform.local.to_s, bundle: s && Gem.bin_path(\"bundler\", \"bundle\", v))',\n bundlerVersion,\n ],\n { cwd: OptionHolder.projectDir, env, extendEnv: false, reject: false },\n );\n if (probe.failed) {\n throw new Error(\n `Ruby from PATH could not be inspected. Required: MRI Ruby ${rubyRequirement} and Bundler ${bundlerVersion}. Activate your prepared Ruby environment, then rerun.`,\n );\n }\n const ruby: { ruby: string; version: string; engine: string; platform: string; bundle?: string } =\n JSON.parse(probe.stdout);\n logger.info(`Ruby ${ruby.version}: ${ruby.ruby}`);\n if (ruby.engine !== 'ruby' || !semver.satisfies(ruby.version, rubyRequirement)) {\n throw new Error(\n `Found ${ruby.engine} ${ruby.version} at ${ruby.ruby}. Required: MRI Ruby ${rubyRequirement}. Activate Ruby 3.3 (recommended), then rerun. Ruby is never installed automatically.`,\n );\n }\n if (!ruby.bundle) {\n throw new Error(\n `Ruby ${ruby.version} at ${ruby.ruby} needs Bundler ${bundlerVersion}. In that Ruby environment run: gem install bundler -v ${bundlerVersion} --no-document. Then rerun the original command. Other Bundler versions can remain installed.`,\n );\n }\n const version = await execa(ruby.ruby, ['-e', bundleLauncher, bundlerVersion, '--version'], {\n cwd: OptionHolder.projectDir,\n env,\n extendEnv: false,\n reject: false,\n });\n if (version.failed || version.stdout.trim() !== `Bundler version ${bundlerVersion}`) {\n throw new Error(\n `Bundler ${bundlerVersion} could not run with ${ruby.ruby}. Reinstall that Bundler in the selected Ruby environment.`,\n );\n }\n logger.info(`Bundler ${bundlerVersion}: ${ruby.bundle}`);\n\n const directory = resolve(OptionHolder.resourcesDir, '.ruby');\n const workspace = resolve(directory, OptionHolder.input.platform);\n const bundleEnv = {\n ...env,\n PATH: `${dirname(ruby.ruby)}:${dirname(process.execPath)}:${env.PATH ?? ''}`,\n BUNDLE_IGNORE_CONFIG: '1',\n BUNDLE_GEMFILE: resolve(directory, gemfileName),\n BUNDLE_PATH: resolve(directory, 'vendor', `${ruby.engine}-${ruby.version}-${ruby.platform}`),\n BUNDLE_APP_CONFIG: resolve(directory, '.bundle'),\n BUNDLE_USER_HOME: resolve(directory, '.bundle'),\n BUNDLE_FROZEN: 'true',\n BUNDLE_DISABLE_SHARED_GEMS: 'true',\n BUNDLE_WITHOUT: needsPods ? '' : 'ios',\n FASTLANE_SKIP_UPDATE_CHECK: '1',\n FASTLANE_HIDE_CHANGELOG: '1',\n FASTLANE_OPT_OUT_USAGE: '1',\n };\n\n async function bundle(\n args: string[],\n options: { cwd?: string; env?: Record<string, string>; capture?: boolean } = {},\n ) {\n const child = execa(ruby.ruby, ['-e', bundleLauncher, bundlerVersion, ...args], {\n cwd: options.cwd ?? workspace,\n env: { ...bundleEnv, ...options.env },\n extendEnv: false,\n all: true,\n reject: false,\n });\n if (!options.capture && child.all) await printRedactedOutput(child.all);\n const result = await child;\n if (result.failed) {\n if (options.capture) logger.error(redact(result.all ?? ''));\n throw new Error(\n `Ruby command failed (exit ${result.exitCode ?? 'unknown'}) using Ruby ${ruby.version}, Bundler ${bundlerVersion}, and ${bundleEnv.BUNDLE_GEMFILE}.`,\n );\n }\n return { stdout: result.stdout };\n }\n\n async function install() {\n copy(resolve(sourceDir, gemfileName), bundleEnv.BUNDLE_GEMFILE);\n copy(resolve(sourceDir, lockfileName), resolve(directory, lockfileName));\n write(resolve(directory, '.gitignore'), '*\\n');\n await bundle(['install'], { cwd: directory });\n }\n\n return {\n bundle,\n install,\n directory,\n workspace,\n executable: ruby.ruby,\n version: ruby.version,\n bundlerVersion,\n };\n}\n\nexport type RubyEnvironment = Awaited<ReturnType<typeof inspectRubyEnvironment>>;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  //#region src/util/setup/RubyEnvironment.d.ts
2
2
  declare const rubyRequirement = ">=3.3.0 <4.1.0";
3
3
  declare function rubyProcessEnvironment(): {
4
- [k: string]: string | undefined;
4
+ [k: string]: string;
5
5
  };
6
6
  declare function inspectRubyEnvironment({
7
7
  needsPods
@@ -25,4 +25,4 @@ declare function inspectRubyEnvironment({
25
25
  type RubyEnvironment = Awaited<ReturnType<typeof inspectRubyEnvironment>>;
26
26
  //#endregion
27
27
  export { RubyEnvironment, inspectRubyEnvironment, rubyProcessEnvironment, rubyRequirement };
28
- //# sourceMappingURL=RubyEnvironment-K1nIGrMJ.d.ts.map
28
+ //# sourceMappingURL=RubyEnvironment-DZ8FuUEh.d.ts.map
@@ -1,6 +1,6 @@
1
- import { read, readJsonSlow, readdir, resolve, write, writeJson } from "./FileUtil-B9JnWobK.js";
2
- import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
3
- import { throwError } from "./throwError-ebp_0a_3.js";
1
+ import { OptionHolder } from "./OptionHolder-DCm-Anf0.js";
2
+ import { read, readJsonSlow, readdir, resolve, write, writeJson } from "./FileUtil-Dq8PORna.js";
3
+ import { throwError } from "./throwError-CjtFnSTp.js";
4
4
  import { padZero } from "@mj-studio/js-util";
5
5
  import semver from "semver";
6
6
 
@@ -98,4 +98,4 @@ function generateVersionCodeTiedWithVersionName(versionName) {
98
98
 
99
99
  //#endregion
100
100
  export { checkVersionCodeIsTiedWithVersionName, generateVersionCodeTiedWithVersionName, injectBinaryVersions, parseBinaryVersions };
101
- //# sourceMappingURL=VersionUtil-CttA4ATC.js.map
101
+ //# sourceMappingURL=VersionUtil-Io9Zx_Fc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionUtil-CttA4ATC.js","names":["filename: string","versionName: string","versionCode: string"],"sources":["../src/util/setup/VersionUtil.ts"],"sourcesContent":["import { padZero } from '@mj-studio/js-util';\nimport semver from 'semver';\n\nimport { read, readdir, readJsonSlow, resolve, write, writeJson } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { throwError } from '../throwError';\n\nconst versionNameRegex = () => /const\\s+VERSION_NAME\\s*?=\\s*?['\"]([\\d.]*?)['\"]\\s*?;?/;\nconst versionCodeRegex = () => /const\\s+VERSION_CODE\\s*?=\\s*?(\\d+)\\s*?;?/;\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 = versionNameRegex().exec(content)?.[1];\n const VERSION_CODE = versionCodeRegex().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(versionNameRegex(), `const VERSION_NAME = '${versionName}';`);\n content = content.replace(versionCodeRegex(), `const VERSION_CODE = ${versionCode};`);\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\nexport function checkVersionCodeIsTiedWithVersionName(\n versionName: string,\n versionCode: string,\n): boolean {\n if (!semver.valid(versionName)) return false;\n return generateVersionCodeTiedWithVersionName(versionName) === versionCode;\n}\n\nexport function generateVersionCodeTiedWithVersionName(versionName: string) {\n if (!semver.valid(versionName))\n throwError(\n 'Version Name is not a valid semver format when running `generateVersionCodeTiedWithVersionName`',\n );\n const major = semver.major(versionName);\n const minor = semver.minor(versionName);\n const patch = semver.patch(versionName);\n\n return `${major}${padZero(minor, 3)}${padZero(patch, 3)}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VersionUtil-Io9Zx_Fc.js","names":["filename: string","versionName: string","versionCode: string"],"sources":["../src/util/setup/VersionUtil.ts"],"sourcesContent":["import { padZero } from '@mj-studio/js-util';\nimport semver from 'semver';\n\nimport { read, readdir, readJsonSlow, resolve, write, writeJson } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { throwError } from '../throwError';\n\nconst versionNameRegex = () => /const\\s+VERSION_NAME\\s*?=\\s*?['\"]([\\d.]*?)['\"]\\s*?;?/;\nconst versionCodeRegex = () => /const\\s+VERSION_CODE\\s*?=\\s*?(\\d+)\\s*?;?/;\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 = versionNameRegex().exec(content)?.[1];\n const VERSION_CODE = versionCodeRegex().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(versionNameRegex(), `const VERSION_NAME = '${versionName}';`);\n content = content.replace(versionCodeRegex(), `const VERSION_CODE = ${versionCode};`);\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\nexport function checkVersionCodeIsTiedWithVersionName(\n versionName: string,\n versionCode: string,\n): boolean {\n if (!semver.valid(versionName)) return false;\n return generateVersionCodeTiedWithVersionName(versionName) === versionCode;\n}\n\nexport function generateVersionCodeTiedWithVersionName(versionName: string) {\n if (!semver.valid(versionName))\n throwError(\n 'Version Name is not a valid semver format when running `generateVersionCodeTiedWithVersionName`',\n );\n const major = semver.major(versionName);\n const minor = semver.minor(versionName);\n const patch = semver.patch(versionName);\n\n return `${major}${padZero(minor, 3)}${padZero(patch, 3)}`;\n}\n"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { calculateElapsed } from "./calculateElapsed-DORWymX3.js";
2
- import { copy, exist, relativePath, remove, resolve } from "./FileUtil-B9JnWobK.js";
3
- import { OptionHolder } from "./OptionHolder-ooRZtG0l.js";
4
- import { runFastlane } from "./FastlaneOption-y0DYOkjC.js";
5
- import { InqueryInputs } from "./InqueryInputs-CyW-i_4N.js";
6
- import { logger } from "./logger-CSZA77Zt.js";
7
- import { exe } from "./execShellScript-ZLVCvae2.js";
8
- import { inspectNativeEnvironment } from "./NativeEnvironment-BAohR8aj.js";
9
- import { androidSigningEnvironment, prepareAndroid } from "./prepareAndroid-BQBbb44J.js";
10
- import { inspectRubyEnvironment } from "./RubyEnvironment-CqupQjgn.js";
11
- import { prepareFastlane } from "./prepareFastlane-BmFwr96S.js";
12
- import { prepareIos } from "./prepareIos-CGc-nhwf.js";
13
- import { setup } from "./setup-Be5UwL9d.js";
2
+ import { OptionHolder } from "./OptionHolder-DCm-Anf0.js";
3
+ import { copy, exist, relativePath, remove, resolve } from "./FileUtil-Dq8PORna.js";
4
+ import { logger } from "./logger-BLZBLDnp.js";
5
+ import { runFastlane } from "./FastlaneOption-D4A4hWrQ.js";
6
+ import { InqueryInputs } from "./InqueryInputs-C7bgU4_P.js";
7
+ import { exe } from "./execShellScript-5FcHM7dZ.js";
8
+ import { inspectNativeEnvironment } from "./NativeEnvironment-CQn7erIC.js";
9
+ import { androidSigningEnvironment, prepareAndroid } from "./prepareAndroid-4S_Vq9Zn.js";
10
+ import { inspectRubyEnvironment } from "./RubyEnvironment-CPq_9yPd.js";
11
+ import { prepareFastlane } from "./prepareFastlane-ns6kCOjb.js";
12
+ import { prepareIos } from "./prepareIos-CXqNQ40Q.js";
13
+ import { setup } from "./setup-q_SlIP_M.js";
14
14
  import { dirname } from "node:path";
15
15
  import chalk from "chalk";
16
16
 
@@ -18,13 +18,12 @@ import chalk from "chalk";
18
18
  async function build({ options }) {
19
19
  Object.assign(OptionHolder.input, options);
20
20
  const startTime = Date.now();
21
- await setup();
21
+ await setup({ credentials: OptionHolder.input.sign !== false });
22
22
  await InqueryInputs.platform();
23
23
  await InqueryInputs.androidBuildOutput();
24
24
  const isIos = OptionHolder.input.platform === "ios";
25
25
  if (!isIos && OptionHolder.input.sign === false) throw new Error("--no-sign is only supported for iOS. Android release builds require a signing key.");
26
26
  const ruby = await inspectRubyEnvironment({ needsPods: isIos });
27
- const signingEnv = isIos ? {} : androidSigningEnvironment();
28
27
  const prebuild = await inspectNativeEnvironment();
29
28
  await prepareFastlane(ruby);
30
29
  let artifact;
@@ -41,7 +40,7 @@ async function build({ options }) {
41
40
  await exe("./gradlew", [isAab ? "app:bundleRelease" : "app:assembleRelease"], {
42
41
  cwd: resolve(OptionHolder.projectDir, "android"),
43
42
  env: {
44
- ...signingEnv,
43
+ ...androidSigningEnvironment(),
45
44
  PATH: `${dirname(process.execPath)}:${process.env.PATH ?? ""}`
46
45
  }
47
46
  });
@@ -61,4 +60,4 @@ async function build({ options }) {
61
60
 
62
61
  //#endregion
63
62
  export { build };
64
- //# sourceMappingURL=build-R29EBnOC.js.map
63
+ //# sourceMappingURL=build-DPBOtXRM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-DPBOtXRM.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({ credentials: OptionHolder.input.sign !== false });\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 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: {\n ...androidSigningEnvironment(),\n PATH: `${dirname(process.execPath)}:${process.env.PATH ?? ''}`,\n },\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,MAAM,EAAE,aAAa,aAAa,MAAM,SAAS,MAAO,EAAC;AAC/D,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,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;IACH,GAAG,2BAA2B;IAC9B,OAAO,EAAE,QAAQ,QAAQ,SAAS,CAAC,GAAG,QAAQ,IAAI,QAAQ,GAAG;GAC9D;EACF,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 { 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";
1
+ import { OptionHolder } from "./OptionHolder-DCm-Anf0.js";
2
+ import { logger } from "./logger-BLZBLDnp.js";
3
+ import { constructInquirerFormattedMessage } from "./InqueryInputs-C7bgU4_P.js";
4
+ import { exe } from "./execShellScript-5FcHM7dZ.js";
5
+ import { isDev } from "./EnvUtil-bT6jh2Up.js";
6
+ import { throwError } from "./throwError-CjtFnSTp.js";
7
+ import { checkVersionCodeIsTiedWithVersionName, generateVersionCodeTiedWithVersionName, injectBinaryVersions } from "./VersionUtil-Io9Zx_Fc.js";
8
+ import { setup } from "./setup-q_SlIP_M.js";
9
9
  import { is } from "@mj-studio/js-util";
10
10
  import { select } from "@inquirer/prompts";
11
11
  import semver from "semver";
@@ -13,8 +13,8 @@ import semver from "semver";
13
13
  //#region src/command/bump.ts
14
14
  async function bump({ options }) {
15
15
  Object.assign(OptionHolder.input, options);
16
+ await setup({ credentials: false });
16
17
  await preCheck();
17
- await setup();
18
18
  const nextVersionName = semver.inc(OptionHolder.versionName, OptionHolder.input.semverIncrement);
19
19
  const nextVersionCode = (() => {
20
20
  if (checkVersionCodeIsTiedWithVersionName(OptionHolder.versionName, OptionHolder.versionCode)) return generateVersionCodeTiedWithVersionName(nextVersionName);
@@ -119,4 +119,4 @@ async function promptTagAndPush({ nextVersionCode, nextVersionName }) {
119
119
 
120
120
  //#endregion
121
121
  export { bump };
122
- //# sourceMappingURL=bump-NbU_02fP.js.map
122
+ //# sourceMappingURL=bump-BoN6SXri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bump-BoN6SXri.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 setup({ credentials: false });\n await preCheck();\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,22 +1,22 @@
1
1
  import "../calculateElapsed-DORWymX3.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";
2
+ import "../OptionHolder-DCm-Anf0.js";
3
+ import "../FileUtil-Dq8PORna.js";
4
+ import "../logger-BLZBLDnp.js";
5
+ import "../CredentialVault-DJK55Brb.js";
6
+ import "../FastlaneOption-D4A4hWrQ.js";
7
+ import "../InqueryInputs-C7bgU4_P.js";
8
+ import "../execShellScript-5FcHM7dZ.js";
9
+ import "../NativeEnvironment-CQn7erIC.js";
10
+ import "../prepareAndroid-4S_Vq9Zn.js";
11
+ import "../MetadataSyncUtil-D8LnTqSH.js";
12
+ import "../RubyEnvironment-CPq_9yPd.js";
13
+ import "../prepareFastlane-ns6kCOjb.js";
14
+ import "../prepareIos-CXqNQ40Q.js";
15
+ import "../EnvUtil-bT6jh2Up.js";
16
+ import "../parseConfigFile-BGBx_tJj.js";
17
+ import "../throwError-CjtFnSTp.js";
18
+ import "../VersionUtil-Io9Zx_Fc.js";
19
+ import "../setup-q_SlIP_M.js";
20
+ import { build } from "../build-DPBOtXRM.js";
21
21
 
22
22
  export { build };
@@ -1,14 +1,14 @@
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";
1
+ import "../OptionHolder-DCm-Anf0.js";
2
+ import "../FileUtil-Dq8PORna.js";
3
+ import "../logger-BLZBLDnp.js";
4
+ import "../CredentialVault-DJK55Brb.js";
5
+ import "../InqueryInputs-C7bgU4_P.js";
6
+ import "../execShellScript-5FcHM7dZ.js";
7
+ import "../EnvUtil-bT6jh2Up.js";
8
+ import "../parseConfigFile-BGBx_tJj.js";
9
+ import "../throwError-CjtFnSTp.js";
10
+ import "../VersionUtil-Io9Zx_Fc.js";
11
+ import "../setup-q_SlIP_M.js";
12
+ import { bump } from "../bump-BoN6SXri.js";
13
13
 
14
14
  export { bump };
@@ -1,13 +1,13 @@
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";
1
+ import "../OptionHolder-DCm-Anf0.js";
2
+ import "../FileUtil-Dq8PORna.js";
3
+ import "../logger-BLZBLDnp.js";
4
+ import "../CredentialVault-DJK55Brb.js";
5
+ import "../InqueryInputs-C7bgU4_P.js";
6
+ import "../EnvUtil-bT6jh2Up.js";
7
+ import "../parseConfigFile-BGBx_tJj.js";
8
+ import "../throwError-CjtFnSTp.js";
9
+ import "../VersionUtil-Io9Zx_Fc.js";
10
+ import "../setup-q_SlIP_M.js";
11
+ import { init } from "../init-BKcVizS6.js";
12
12
 
13
13
  export { init };
@@ -1,18 +1,18 @@
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";
1
+ import "../OptionHolder-DCm-Anf0.js";
2
+ import "../FileUtil-Dq8PORna.js";
3
+ import "../logger-BLZBLDnp.js";
4
+ import "../CredentialVault-DJK55Brb.js";
5
+ import "../InqueryInputs-C7bgU4_P.js";
6
+ import "../execShellScript-5FcHM7dZ.js";
7
+ import "../MetadataSyncUtil-D8LnTqSH.js";
8
+ import "../RubyEnvironment-CPq_9yPd.js";
9
+ import "../prepareFastlane-ns6kCOjb.js";
10
+ import "../EnvUtil-bT6jh2Up.js";
11
+ import "../parseConfigFile-BGBx_tJj.js";
12
+ import "../throwError-CjtFnSTp.js";
13
+ import "../VersionUtil-Io9Zx_Fc.js";
14
+ import "../setup-q_SlIP_M.js";
15
+ import "../generateAppStoreConnectApiKeyFile-Deww9U-5.js";
16
+ import { pull } from "../pull-BiLvHoN9.js";
17
17
 
18
18
  export { pull };
@@ -1,19 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.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";
2
+ import "../OptionHolder-DCm-Anf0.js";
3
+ import "../FileUtil-Dq8PORna.js";
4
+ import "../logger-BLZBLDnp.js";
5
+ import "../CredentialVault-DJK55Brb.js";
6
+ import "../FastlaneOption-D4A4hWrQ.js";
7
+ import "../InqueryInputs-C7bgU4_P.js";
8
+ import "../execShellScript-5FcHM7dZ.js";
9
+ import "../MetadataSyncUtil-D8LnTqSH.js";
10
+ import "../RubyEnvironment-CPq_9yPd.js";
11
+ import "../prepareFastlane-ns6kCOjb.js";
12
+ import "../EnvUtil-bT6jh2Up.js";
13
+ import "../parseConfigFile-BGBx_tJj.js";
14
+ import "../throwError-CjtFnSTp.js";
15
+ import "../VersionUtil-Io9Zx_Fc.js";
16
+ import "../setup-q_SlIP_M.js";
17
+ import { submit } from "../submit-BLq6epKd.js";
18
18
 
19
19
  export { submit };
@@ -1,19 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.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";
2
+ import "../OptionHolder-DCm-Anf0.js";
3
+ import "../FileUtil-Dq8PORna.js";
4
+ import "../logger-BLZBLDnp.js";
5
+ import "../CredentialVault-DJK55Brb.js";
6
+ import "../FastlaneOption-D4A4hWrQ.js";
7
+ import "../InqueryInputs-C7bgU4_P.js";
8
+ import "../execShellScript-5FcHM7dZ.js";
9
+ import "../MetadataSyncUtil-D8LnTqSH.js";
10
+ import "../RubyEnvironment-CPq_9yPd.js";
11
+ import "../prepareFastlane-ns6kCOjb.js";
12
+ import "../EnvUtil-bT6jh2Up.js";
13
+ import "../parseConfigFile-BGBx_tJj.js";
14
+ import "../throwError-CjtFnSTp.js";
15
+ import "../VersionUtil-Io9Zx_Fc.js";
16
+ import "../setup-q_SlIP_M.js";
17
+ import { upload } from "../upload-DyMky8Rn.js";
18
18
 
19
19
  export { upload };
@@ -1,4 +1,5 @@
1
- import { redact } from "./logger-CSZA77Zt.js";
1
+ import { redact } from "./logger-BLZBLDnp.js";
2
+ import { credentialProcessEnvironment } from "./CredentialVault-DJK55Brb.js";
2
3
  import { execa } from "execa";
3
4
  import { createInterface } from "node:readline";
4
5
 
@@ -15,6 +16,11 @@ async function printRedactedOutput(stream) {
15
16
  async function exe(command, args = [], options = {}) {
16
17
  const child = execa(command, args, {
17
18
  ...options,
19
+ env: credentialProcessEnvironment({
20
+ ...options.extendEnv === false ? {} : process.env,
21
+ ...options.env
22
+ }),
23
+ extendEnv: false,
18
24
  stdin: "pipe",
19
25
  stdout: "pipe",
20
26
  stderr: "pipe",
@@ -29,4 +35,4 @@ async function exe(command, args = [], options = {}) {
29
35
 
30
36
  //#endregion
31
37
  export { exe, printRedactedOutput };
32
- //# sourceMappingURL=execShellScript-ZLVCvae2.js.map
38
+ //# sourceMappingURL=execShellScript-5FcHM7dZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execShellScript-5FcHM7dZ.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 { credentialProcessEnvironment } from '../CredentialVault';\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 env: credentialProcessEnvironment({\n ...(options.extendEnv === false ? {} : process.env),\n ...options.env,\n }),\n extendEnv: false,\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":";;;;;;AAOA,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,KAAK,6BAA6B;GAChC,GAAI,QAAQ,cAAc,QAAQ,CAAE,IAAG,QAAQ;GAC/C,GAAG,QAAQ;EACZ,EAAC;EACF,WAAW;EACX,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"}
@@ -0,0 +1,16 @@
1
+ import { OptionHolder } from "./OptionHolder-DCm-Anf0.js";
2
+ import { appStoreApiFilename, credentialFilenames, readCredentialFile, writeCredentialTemporaryFile } from "./CredentialVault-DJK55Brb.js";
3
+
4
+ //#region src/util/generateAppStoreConnectApiKeyFile.ts
5
+ function generateAppStoreConnectApiKeyFile() {
6
+ const json = {
7
+ key: readCredentialFile(credentialFilenames.iosApiKey).toString("utf8"),
8
+ key_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id,
9
+ issuer_id: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id
10
+ };
11
+ return writeCredentialTemporaryFile(appStoreApiFilename, Buffer.from(JSON.stringify(json)));
12
+ }
13
+
14
+ //#endregion
15
+ export { generateAppStoreConnectApiKeyFile };
16
+ //# sourceMappingURL=generateAppStoreConnectApiKeyFile-Deww9U-5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAppStoreConnectApiKeyFile-Deww9U-5.js","names":[],"sources":["../src/util/generateAppStoreConnectApiKeyFile.ts"],"sourcesContent":["import {\n appStoreApiFilename,\n credentialFilenames,\n readCredentialFile,\n writeCredentialTemporaryFile,\n} from './CredentialVault';\nimport { OptionHolder } from './OptionHolder';\n\nexport function generateAppStoreConnectApiKeyFile() {\n const json = {\n key: readCredentialFile(credentialFilenames.iosApiKey).toString('utf8'),\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 return writeCredentialTemporaryFile(appStoreApiFilename, Buffer.from(JSON.stringify(json)));\n}\n"],"mappings":";;;;AAQA,SAAgB,oCAAoC;CAClD,MAAM,OAAO;EACX,KAAK,mBAAmB,oBAAoB,UAAU,CAAC,SAAS,OAAO;EACvE,QAAQ,aAAa,aAAa;EAClC,WAAW,aAAa,aAAa;CACtC;AACD,QAAO,6BAA6B,qBAAqB,OAAO,KAAK,KAAK,UAAU,KAAK,CAAC,CAAC;AAC5F"}