expo-release-it 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/build/{CredentialVault-dRFh9J19.js → CredentialVault-f3Q-GQiW.js} +3 -3
  2. package/build/{CredentialVault-dRFh9J19.js.map → CredentialVault-f3Q-GQiW.js.map} +1 -1
  3. package/build/{FastlaneOption-BmbTdRFX.js → FastlaneOption-DTV-RPG_.js} +3 -3
  4. package/build/{FastlaneOption-BmbTdRFX.js.map → FastlaneOption-DTV-RPG_.js.map} +1 -1
  5. package/build/{InqueryInputs-DC-uZQGJ.js → InqueryInputs-CQCIPjvq.js} +2 -2
  6. package/build/{InqueryInputs-DC-uZQGJ.js.map → InqueryInputs-CQCIPjvq.js.map} +1 -1
  7. package/build/{MetadataSyncUtil-DL8wei5I.js → MetadataSyncUtil-DSi5YMM1.js} +3 -3
  8. package/build/{MetadataSyncUtil-DL8wei5I.js.map → MetadataSyncUtil-DSi5YMM1.js.map} +1 -1
  9. package/build/{NativeEnvironment-CSSqKt4G.js → NativeEnvironment-oSy4DL9W.js} +4 -4
  10. package/build/{NativeEnvironment-CSSqKt4G.js.map → NativeEnvironment-oSy4DL9W.js.map} +1 -1
  11. package/build/{OptionHolder-CETgJidz.js → OptionHolder-Ci01mA57.js} +2 -2
  12. package/build/{OptionHolder-CETgJidz.js.map → OptionHolder-Ci01mA57.js.map} +1 -1
  13. package/build/{RubyEnvironment-D07WuLyt.js → RubyEnvironment-BUsGpWfG.js} +5 -5
  14. package/build/{RubyEnvironment-D07WuLyt.js.map → RubyEnvironment-BUsGpWfG.js.map} +1 -1
  15. package/build/{VersionUtil-DY_lgbBq.js → VersionUtil-DJcMTY2B.js} +3 -3
  16. package/build/{VersionUtil-DY_lgbBq.js.map → VersionUtil-DJcMTY2B.js.map} +1 -1
  17. package/build/{build-BlJ8ttI8.js → build-Dl9olKkk.js} +12 -12
  18. package/build/{build-BlJ8ttI8.js.map → build-Dl9olKkk.js.map} +1 -1
  19. package/build/{bump-CJfojbNh.js → bump-DKVq38lK.js} +8 -8
  20. package/build/{bump-CJfojbNh.js.map → bump-DKVq38lK.js.map} +1 -1
  21. package/build/command/build.js +17 -17
  22. package/build/command/bump.js +10 -10
  23. package/build/command/init.js +9 -9
  24. package/build/command/pull.js +14 -14
  25. package/build/command/submit.js +14 -14
  26. package/build/command/upload.js +14 -14
  27. package/build/{execShellScript-C76sWy2u.js → execShellScript-B6HHcv77.js} +3 -3
  28. package/build/{execShellScript-C76sWy2u.js.map → execShellScript-B6HHcv77.js.map} +1 -1
  29. package/build/{generateAppStoreConnectApiKeyFile-BsrnIeTT.js → generateAppStoreConnectApiKeyFile-JftlEOVB.js} +3 -3
  30. package/build/{generateAppStoreConnectApiKeyFile-BsrnIeTT.js.map → generateAppStoreConnectApiKeyFile-JftlEOVB.js.map} +1 -1
  31. package/build/index.js +23 -23
  32. package/build/{init-DdNLSJTQ.js → init-BElBKnwN.js} +6 -6
  33. package/build/{init-DdNLSJTQ.js.map → init-BElBKnwN.js.map} +1 -1
  34. package/build/{logger-DzRyyX4i.js → logger-BY1_5Qm4.js} +2 -2
  35. package/build/{logger-DzRyyX4i.js.map → logger-BY1_5Qm4.js.map} +1 -1
  36. package/build/{parseConfigFile-Bz59F3bt.js → parseConfigFile-N2627e-u.js} +2 -2
  37. package/build/{parseConfigFile-Bz59F3bt.js.map → parseConfigFile-N2627e-u.js.map} +1 -1
  38. package/build/{prepareAndroid-DXJ29rCp.js → prepareAndroid-BV53rhQ3.js} +3 -3
  39. package/build/{prepareAndroid-DXJ29rCp.js.map → prepareAndroid-BV53rhQ3.js.map} +1 -1
  40. package/build/{prepareFastlane-akP0u0fl.js → prepareFastlane-7Zg3N5Fy.js} +4 -4
  41. package/build/{prepareFastlane-akP0u0fl.js.map → prepareFastlane-7Zg3N5Fy.js.map} +1 -1
  42. package/build/{prepareIos-CVI_Azja.js → prepareIos-Cigqnhe8.js} +3 -3
  43. package/build/{prepareIos-CVI_Azja.js.map → prepareIos-Cigqnhe8.js.map} +1 -1
  44. package/build/{pull-DimLyvZB.js → pull-B1FwsQ16.js} +8 -8
  45. package/build/{pull-DimLyvZB.js.map → pull-B1FwsQ16.js.map} +1 -1
  46. package/build/{setup-CZvmOOKR.js → setup-ChAxYljZ.js} +5 -5
  47. package/build/{setup-CZvmOOKR.js.map → setup-ChAxYljZ.js.map} +1 -1
  48. package/build/{submit-DHRAs83M.js → submit-CPQB-EF-.js} +7 -7
  49. package/build/{submit-DHRAs83M.js.map → submit-CPQB-EF-.js.map} +1 -1
  50. package/build/{throwError-C3OkeVgt.js → throwError-CagLBtkh.js} +2 -2
  51. package/build/{throwError-C3OkeVgt.js.map → throwError-CagLBtkh.js.map} +1 -1
  52. package/build/{upload-Di-m5Olv.js → upload-BwMMiyA5.js} +7 -7
  53. package/build/{upload-Di-m5Olv.js.map → upload-BwMMiyA5.js.map} +1 -1
  54. package/build/util/CredentialVault.js +3 -3
  55. package/build/util/FastlaneOption.js +4 -4
  56. package/build/util/MetadataSyncUtil.js +3 -3
  57. package/build/util/OptionHolder.js +1 -1
  58. package/build/util/generateAppStoreConnectApiKeyFile.js +4 -4
  59. package/build/util/injectTemplatePlaceHolders.js +1 -1
  60. package/build/util/input/InqueryInputs.js +2 -2
  61. package/build/util/logger.js +2 -2
  62. package/build/util/parseConfigFile.js +2 -2
  63. package/build/util/setup/NativeEnvironment.js +5 -5
  64. package/build/util/setup/RubyEnvironment.js +5 -5
  65. package/build/util/setup/VersionUtil.js +4 -4
  66. package/build/util/setup/execShellScript.js +4 -4
  67. package/build/util/setup/prepareAndroid.js +4 -4
  68. package/build/util/setup/prepareFastlane.js +7 -7
  69. package/build/util/setup/prepareIos.js +4 -4
  70. package/build/util/setup/setup.js +7 -7
  71. package/build/util/throwError.js +3 -3
  72. package/package.json +1 -1
  73. package/template/ios/fastlane/Fastfile +2 -2
@@ -1,22 +1,22 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../OptionHolder-CETgJidz.js";
2
+ import "../OptionHolder-Ci01mA57.js";
3
3
  import "../FileUtil-Dq8PORna.js";
4
- import "../logger-DzRyyX4i.js";
5
- import "../CredentialVault-dRFh9J19.js";
6
- import "../FastlaneOption-BmbTdRFX.js";
7
- import "../InqueryInputs-DC-uZQGJ.js";
8
- import "../execShellScript-C76sWy2u.js";
9
- import "../NativeEnvironment-CSSqKt4G.js";
10
- import "../prepareAndroid-DXJ29rCp.js";
11
- import "../MetadataSyncUtil-DL8wei5I.js";
12
- import "../RubyEnvironment-D07WuLyt.js";
13
- import "../prepareFastlane-akP0u0fl.js";
14
- import "../prepareIos-CVI_Azja.js";
4
+ import "../logger-BY1_5Qm4.js";
5
+ import "../CredentialVault-f3Q-GQiW.js";
6
+ import "../FastlaneOption-DTV-RPG_.js";
7
+ import "../InqueryInputs-CQCIPjvq.js";
8
+ import "../execShellScript-B6HHcv77.js";
9
+ import "../NativeEnvironment-oSy4DL9W.js";
10
+ import "../prepareAndroid-BV53rhQ3.js";
11
+ import "../MetadataSyncUtil-DSi5YMM1.js";
12
+ import "../RubyEnvironment-BUsGpWfG.js";
13
+ import "../prepareFastlane-7Zg3N5Fy.js";
14
+ import "../prepareIos-Cigqnhe8.js";
15
15
  import "../EnvUtil-bT6jh2Up.js";
16
- import "../parseConfigFile-Bz59F3bt.js";
17
- import "../throwError-C3OkeVgt.js";
18
- import "../VersionUtil-DY_lgbBq.js";
19
- import "../setup-CZvmOOKR.js";
20
- import { build } from "../build-BlJ8ttI8.js";
16
+ import "../parseConfigFile-N2627e-u.js";
17
+ import "../throwError-CagLBtkh.js";
18
+ import "../VersionUtil-DJcMTY2B.js";
19
+ import "../setup-ChAxYljZ.js";
20
+ import { build } from "../build-Dl9olKkk.js";
21
21
 
22
22
  export { build };
@@ -1,14 +1,14 @@
1
- import "../OptionHolder-CETgJidz.js";
1
+ import "../OptionHolder-Ci01mA57.js";
2
2
  import "../FileUtil-Dq8PORna.js";
3
- import "../logger-DzRyyX4i.js";
4
- import "../CredentialVault-dRFh9J19.js";
5
- import "../InqueryInputs-DC-uZQGJ.js";
6
- import "../execShellScript-C76sWy2u.js";
3
+ import "../logger-BY1_5Qm4.js";
4
+ import "../CredentialVault-f3Q-GQiW.js";
5
+ import "../InqueryInputs-CQCIPjvq.js";
6
+ import "../execShellScript-B6HHcv77.js";
7
7
  import "../EnvUtil-bT6jh2Up.js";
8
- import "../parseConfigFile-Bz59F3bt.js";
9
- import "../throwError-C3OkeVgt.js";
10
- import "../VersionUtil-DY_lgbBq.js";
11
- import "../setup-CZvmOOKR.js";
12
- import { bump } from "../bump-CJfojbNh.js";
8
+ import "../parseConfigFile-N2627e-u.js";
9
+ import "../throwError-CagLBtkh.js";
10
+ import "../VersionUtil-DJcMTY2B.js";
11
+ import "../setup-ChAxYljZ.js";
12
+ import { bump } from "../bump-DKVq38lK.js";
13
13
 
14
14
  export { bump };
@@ -1,13 +1,13 @@
1
- import "../OptionHolder-CETgJidz.js";
1
+ import "../OptionHolder-Ci01mA57.js";
2
2
  import "../FileUtil-Dq8PORna.js";
3
- import "../logger-DzRyyX4i.js";
4
- import "../CredentialVault-dRFh9J19.js";
5
- import "../InqueryInputs-DC-uZQGJ.js";
3
+ import "../logger-BY1_5Qm4.js";
4
+ import "../CredentialVault-f3Q-GQiW.js";
5
+ import "../InqueryInputs-CQCIPjvq.js";
6
6
  import "../EnvUtil-bT6jh2Up.js";
7
- import "../parseConfigFile-Bz59F3bt.js";
8
- import "../throwError-C3OkeVgt.js";
9
- import "../VersionUtil-DY_lgbBq.js";
10
- import "../setup-CZvmOOKR.js";
11
- import { init } from "../init-DdNLSJTQ.js";
7
+ import "../parseConfigFile-N2627e-u.js";
8
+ import "../throwError-CagLBtkh.js";
9
+ import "../VersionUtil-DJcMTY2B.js";
10
+ import "../setup-ChAxYljZ.js";
11
+ import { init } from "../init-BElBKnwN.js";
12
12
 
13
13
  export { init };
@@ -1,18 +1,18 @@
1
- import "../OptionHolder-CETgJidz.js";
1
+ import "../OptionHolder-Ci01mA57.js";
2
2
  import "../FileUtil-Dq8PORna.js";
3
- import "../logger-DzRyyX4i.js";
4
- import "../CredentialVault-dRFh9J19.js";
5
- import "../InqueryInputs-DC-uZQGJ.js";
6
- import "../execShellScript-C76sWy2u.js";
7
- import "../MetadataSyncUtil-DL8wei5I.js";
8
- import "../RubyEnvironment-D07WuLyt.js";
9
- import "../prepareFastlane-akP0u0fl.js";
3
+ import "../logger-BY1_5Qm4.js";
4
+ import "../CredentialVault-f3Q-GQiW.js";
5
+ import "../InqueryInputs-CQCIPjvq.js";
6
+ import "../execShellScript-B6HHcv77.js";
7
+ import "../MetadataSyncUtil-DSi5YMM1.js";
8
+ import "../RubyEnvironment-BUsGpWfG.js";
9
+ import "../prepareFastlane-7Zg3N5Fy.js";
10
10
  import "../EnvUtil-bT6jh2Up.js";
11
- import "../parseConfigFile-Bz59F3bt.js";
12
- import "../throwError-C3OkeVgt.js";
13
- import "../VersionUtil-DY_lgbBq.js";
14
- import "../setup-CZvmOOKR.js";
15
- import "../generateAppStoreConnectApiKeyFile-BsrnIeTT.js";
16
- import { pull } from "../pull-DimLyvZB.js";
11
+ import "../parseConfigFile-N2627e-u.js";
12
+ import "../throwError-CagLBtkh.js";
13
+ import "../VersionUtil-DJcMTY2B.js";
14
+ import "../setup-ChAxYljZ.js";
15
+ import "../generateAppStoreConnectApiKeyFile-JftlEOVB.js";
16
+ import { pull } from "../pull-B1FwsQ16.js";
17
17
 
18
18
  export { pull };
@@ -1,19 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../OptionHolder-CETgJidz.js";
2
+ import "../OptionHolder-Ci01mA57.js";
3
3
  import "../FileUtil-Dq8PORna.js";
4
- import "../logger-DzRyyX4i.js";
5
- import "../CredentialVault-dRFh9J19.js";
6
- import "../FastlaneOption-BmbTdRFX.js";
7
- import "../InqueryInputs-DC-uZQGJ.js";
8
- import "../execShellScript-C76sWy2u.js";
9
- import "../MetadataSyncUtil-DL8wei5I.js";
10
- import "../RubyEnvironment-D07WuLyt.js";
11
- import "../prepareFastlane-akP0u0fl.js";
4
+ import "../logger-BY1_5Qm4.js";
5
+ import "../CredentialVault-f3Q-GQiW.js";
6
+ import "../FastlaneOption-DTV-RPG_.js";
7
+ import "../InqueryInputs-CQCIPjvq.js";
8
+ import "../execShellScript-B6HHcv77.js";
9
+ import "../MetadataSyncUtil-DSi5YMM1.js";
10
+ import "../RubyEnvironment-BUsGpWfG.js";
11
+ import "../prepareFastlane-7Zg3N5Fy.js";
12
12
  import "../EnvUtil-bT6jh2Up.js";
13
- import "../parseConfigFile-Bz59F3bt.js";
14
- import "../throwError-C3OkeVgt.js";
15
- import "../VersionUtil-DY_lgbBq.js";
16
- import "../setup-CZvmOOKR.js";
17
- import { submit } from "../submit-DHRAs83M.js";
13
+ import "../parseConfigFile-N2627e-u.js";
14
+ import "../throwError-CagLBtkh.js";
15
+ import "../VersionUtil-DJcMTY2B.js";
16
+ import "../setup-ChAxYljZ.js";
17
+ import { submit } from "../submit-CPQB-EF-.js";
18
18
 
19
19
  export { submit };
@@ -1,19 +1,19 @@
1
1
  import "../calculateElapsed-DORWymX3.js";
2
- import "../OptionHolder-CETgJidz.js";
2
+ import "../OptionHolder-Ci01mA57.js";
3
3
  import "../FileUtil-Dq8PORna.js";
4
- import "../logger-DzRyyX4i.js";
5
- import "../CredentialVault-dRFh9J19.js";
6
- import "../FastlaneOption-BmbTdRFX.js";
7
- import "../InqueryInputs-DC-uZQGJ.js";
8
- import "../execShellScript-C76sWy2u.js";
9
- import "../MetadataSyncUtil-DL8wei5I.js";
10
- import "../RubyEnvironment-D07WuLyt.js";
11
- import "../prepareFastlane-akP0u0fl.js";
4
+ import "../logger-BY1_5Qm4.js";
5
+ import "../CredentialVault-f3Q-GQiW.js";
6
+ import "../FastlaneOption-DTV-RPG_.js";
7
+ import "../InqueryInputs-CQCIPjvq.js";
8
+ import "../execShellScript-B6HHcv77.js";
9
+ import "../MetadataSyncUtil-DSi5YMM1.js";
10
+ import "../RubyEnvironment-BUsGpWfG.js";
11
+ import "../prepareFastlane-7Zg3N5Fy.js";
12
12
  import "../EnvUtil-bT6jh2Up.js";
13
- import "../parseConfigFile-Bz59F3bt.js";
14
- import "../throwError-C3OkeVgt.js";
15
- import "../VersionUtil-DY_lgbBq.js";
16
- import "../setup-CZvmOOKR.js";
17
- import { upload } from "../upload-Di-m5Olv.js";
13
+ import "../parseConfigFile-N2627e-u.js";
14
+ import "../throwError-CagLBtkh.js";
15
+ import "../VersionUtil-DJcMTY2B.js";
16
+ import "../setup-ChAxYljZ.js";
17
+ import { upload } from "../upload-BwMMiyA5.js";
18
18
 
19
19
  export { upload };
@@ -1,5 +1,5 @@
1
- import { redact } from "./logger-DzRyyX4i.js";
2
- import { credentialProcessEnvironment } from "./CredentialVault-dRFh9J19.js";
1
+ import { redact } from "./logger-BY1_5Qm4.js";
2
+ import { credentialProcessEnvironment } from "./CredentialVault-f3Q-GQiW.js";
3
3
  import { execa } from "execa";
4
4
  import { createInterface } from "node:readline";
5
5
 
@@ -35,4 +35,4 @@ async function exe(command, args = [], options = {}) {
35
35
 
36
36
  //#endregion
37
37
  export { exe, printRedactedOutput };
38
- //# sourceMappingURL=execShellScript-C76sWy2u.js.map
38
+ //# sourceMappingURL=execShellScript-B6HHcv77.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execShellScript-C76sWy2u.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"}
1
+ {"version":3,"file":"execShellScript-B6HHcv77.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"}
@@ -1,5 +1,5 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
2
- import { appStoreApiFilename, credentialFilenames, readCredentialFile, writeCredentialTemporaryFile } from "./CredentialVault-dRFh9J19.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
+ import { appStoreApiFilename, credentialFilenames, readCredentialFile, writeCredentialTemporaryFile } from "./CredentialVault-f3Q-GQiW.js";
3
3
 
4
4
  //#region src/util/generateAppStoreConnectApiKeyFile.ts
5
5
  function generateAppStoreConnectApiKeyFile() {
@@ -13,4 +13,4 @@ function generateAppStoreConnectApiKeyFile() {
13
13
 
14
14
  //#endregion
15
15
  export { generateAppStoreConnectApiKeyFile };
16
- //# sourceMappingURL=generateAppStoreConnectApiKeyFile-BsrnIeTT.js.map
16
+ //# sourceMappingURL=generateAppStoreConnectApiKeyFile-JftlEOVB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateAppStoreConnectApiKeyFile-BsrnIeTT.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"}
1
+ {"version":3,"file":"generateAppStoreConnectApiKeyFile-JftlEOVB.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"}
package/build/index.js CHANGED
@@ -1,29 +1,29 @@
1
1
  import "./calculateElapsed-DORWymX3.js";
2
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
2
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
3
3
  import "./FileUtil-Dq8PORna.js";
4
- import { logger } from "./logger-DzRyyX4i.js";
5
- import { cleanupCredentials } from "./CredentialVault-dRFh9J19.js";
6
- import "./FastlaneOption-BmbTdRFX.js";
7
- import "./InqueryInputs-DC-uZQGJ.js";
8
- import "./execShellScript-C76sWy2u.js";
9
- import "./NativeEnvironment-CSSqKt4G.js";
10
- import "./prepareAndroid-DXJ29rCp.js";
11
- import "./MetadataSyncUtil-DL8wei5I.js";
12
- import "./RubyEnvironment-D07WuLyt.js";
13
- import "./prepareFastlane-akP0u0fl.js";
14
- import "./prepareIos-CVI_Azja.js";
4
+ import { logger } from "./logger-BY1_5Qm4.js";
5
+ import { cleanupCredentials } from "./CredentialVault-f3Q-GQiW.js";
6
+ import "./FastlaneOption-DTV-RPG_.js";
7
+ import "./InqueryInputs-CQCIPjvq.js";
8
+ import "./execShellScript-B6HHcv77.js";
9
+ import "./NativeEnvironment-oSy4DL9W.js";
10
+ import "./prepareAndroid-BV53rhQ3.js";
11
+ import "./MetadataSyncUtil-DSi5YMM1.js";
12
+ import "./RubyEnvironment-BUsGpWfG.js";
13
+ import "./prepareFastlane-7Zg3N5Fy.js";
14
+ import "./prepareIos-Cigqnhe8.js";
15
15
  import "./EnvUtil-bT6jh2Up.js";
16
- import "./parseConfigFile-Bz59F3bt.js";
17
- import { throwError } from "./throwError-C3OkeVgt.js";
18
- import "./VersionUtil-DY_lgbBq.js";
19
- import "./setup-CZvmOOKR.js";
20
- import { build } from "./build-BlJ8ttI8.js";
21
- import { bump } from "./bump-CJfojbNh.js";
22
- import { init } from "./init-DdNLSJTQ.js";
23
- import "./generateAppStoreConnectApiKeyFile-BsrnIeTT.js";
24
- import { pull } from "./pull-DimLyvZB.js";
25
- import { submit } from "./submit-DHRAs83M.js";
26
- import { upload } from "./upload-Di-m5Olv.js";
16
+ import "./parseConfigFile-N2627e-u.js";
17
+ import { throwError } from "./throwError-CagLBtkh.js";
18
+ import "./VersionUtil-DJcMTY2B.js";
19
+ import "./setup-ChAxYljZ.js";
20
+ import { build } from "./build-Dl9olKkk.js";
21
+ import { bump } from "./bump-DKVq38lK.js";
22
+ import { init } from "./init-BElBKnwN.js";
23
+ import "./generateAppStoreConnectApiKeyFile-JftlEOVB.js";
24
+ import { pull } from "./pull-B1FwsQ16.js";
25
+ import { submit } from "./submit-CPQB-EF-.js";
26
+ import { upload } from "./upload-BwMMiyA5.js";
27
27
  import { Command, Option } from "commander";
28
28
  import { ExecaError } from "execa";
29
29
 
@@ -1,9 +1,9 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { join } from "./FileUtil-Dq8PORna.js";
3
- import { logger } from "./logger-DzRyyX4i.js";
4
- import { credentialVaultFilename, readCredentialVault, readLegacyCredentials, writeCredentialVault } from "./CredentialVault-dRFh9J19.js";
5
- import { constructInquirerFormattedMessage } from "./InqueryInputs-DC-uZQGJ.js";
6
- import { setup } from "./setup-CZvmOOKR.js";
3
+ import { logger } from "./logger-BY1_5Qm4.js";
4
+ import { credentialVaultFilename, readCredentialVault, readLegacyCredentials, writeCredentialVault } from "./CredentialVault-f3Q-GQiW.js";
5
+ import { constructInquirerFormattedMessage } from "./InqueryInputs-CQCIPjvq.js";
6
+ import { setup } from "./setup-ChAxYljZ.js";
7
7
  import chalk from "chalk";
8
8
  import { existsSync, readFileSync, readdirSync } from "node:fs";
9
9
  import { input, password } from "@inquirer/prompts";
@@ -151,4 +151,4 @@ function copyTemplates(files) {
151
151
 
152
152
  //#endregion
153
153
  export { init };
154
- //# sourceMappingURL=init-DdNLSJTQ.js.map
154
+ //# sourceMappingURL=init-BElBKnwN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-DdNLSJTQ.js","names":["value","files: Record<string, string>"],"sources":["../src/command/init.ts"],"sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\n\nimport { input, password } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport {\n credentialVaultFilename,\n readCredentialVault,\n readLegacyCredentials,\n writeCredentialVault,\n} from '../util/CredentialVault';\nimport { join } from '../util/FileUtil';\nimport { constructInquirerFormattedMessage } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { setup } from '../util/setup/setup';\n\nexport async function init({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n\n const key = await setup({ credentials: false });\n logger.info(`${chalk.inverse('expo-release-it')} Initialization Get Started`);\n const hasVault = existsSync(join(OptionHolder.resourcesDir, credentialVaultFilename));\n const existing = hasVault ? readCredentialVault(key) : { keyholder: {}, files: {} };\n const legacy = readLegacyCredentials();\n Object.assign(OptionHolder.keyholderMap, existing.keyholder, legacy.data.keyholder);\n await promptInputs();\n const files = { ...existing.files, ...legacy.data.files };\n copyTemplates(files);\n writeCredentialVault(\n { keyholder: { ...OptionHolder.keyholderMap }, files },\n key,\n legacy.originals,\n );\n\n logger.success(\n `${chalk.inverse('expo-release-it')} Initialization Done. Credentials saved in ${credentialVaultFilename}. Keep your encryption key separately.`,\n );\n}\n\nasync function promptInputs() {\n /* ios */\n OptionHolder.keyholderMap.ios_app_identifier = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS Bundle Identifier',\n explanation:\n \"The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store.\\nThis means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo app config\",\n example: 'com.companyname.appname',\n referUrl: 'https://docs.expo.dev/versions/latest/config/app/#bundleidentifier',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_identifier,\n });\n\n OptionHolder.keyholderMap.ios_developer_team_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'IOS Developer Team Id',\n explanation: 'A unique alphanumeric string that identifies your Apple Developer Team',\n example: '8A51ABC4H7',\n referUrl: 'https://developer.apple.com/account',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_developer_team_id,\n });\n\n OptionHolder.keyholderMap.ios_match_git_url = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'iOS Fastlane Match Github URL',\n explanation:\n 'The URL of the private Git repository where code signing certificates and profiles are stored for Fastlane Match.',\n example: 'https://github.com/yourname/your-certificates-repo.git',\n referUrl: 'https://docs.fastlane.tools/actions/match/',\n }),\n previous: OptionHolder.keyholderMap.ios_match_git_url,\n });\n\n OptionHolder.keyholderMap.ios_match_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'iOS Fastlane Match Passphrase',\n explanation:\n \"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.\",\n example: 'yourpassphrase',\n referUrl: 'https://docs.fastlane.tools/actions/match/',\n }),\n previous: OptionHolder.keyholderMap.ios_match_password,\n });\n\n OptionHolder.keyholderMap.ios_app_store_connect_api_key_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS App Store Connect API Key ID',\n explanation: `ID of App Store Connect API key, used for authentication with Apple’s API.\nApp Store Connect API Key can be issued in ${chalk.underline.blue('https://appstoreconnect.apple.com/access/integrations/api')}`,\n example: '1A2BC3DE4F',\n referUrl: 'https://appstoreconnect.apple.com/access/integrations/api',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id,\n });\n\n OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS App Store Connect API Key Issuer ID',\n explanation: `Identifies the issuer who created the authentication token.\nApp Store Connect API Key can be issued in ${chalk.underline.blue('https://appstoreconnect.apple.com/access/integrations/api')}`,\n example: 'abcd1234-5678-90ef-ghij-1234567890kl',\n referUrl: 'https://appstoreconnect.apple.com/access/integrations/api',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id,\n });\n\n /* android */\n OptionHolder.keyholderMap.android_package_name = await input({\n message: constructInquirerFormattedMessage({\n name: 'Android Package Name',\n explanation:\n 'The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store.',\n example: 'com.companyname.appname',\n referUrl: 'https://docs.expo.dev/versions/latest/config/app/#package',\n }),\n required: true,\n default: OptionHolder.keyholderMap.android_package_name,\n });\n OptionHolder.keyholderMap.android_keystore_store_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Store Password',\n explanation: `Storage password used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n previous: OptionHolder.keyholderMap.android_keystore_store_password,\n });\n OptionHolder.keyholderMap.android_keystore_key_alias = await input({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Key Alias',\n explanation: `Key alias used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n required: true,\n default: OptionHolder.keyholderMap.android_keystore_key_alias,\n });\n OptionHolder.keyholderMap.android_keystore_key_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Key Password',\n explanation: `Key password used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n previous: OptionHolder.keyholderMap.android_keystore_key_password,\n });\n\n async function inputSecret({ message, previous }: { message: string; previous?: string }) {\n const stored = previous ?? '';\n const value = await password({\n message: stored ? `${message}\\nLeave blank to keep the stored value.` : message,\n mask: true,\n validate: (value) => Boolean(value || stored) || 'A value is required.',\n });\n return value || stored;\n }\n}\n\nfunction copyTemplates(files: Record<string, string>) {\n const sourceDirPath = join(OptionHolder.cli.templateDir, 'key');\n // don't overwirte key\n for (const file of readdirSync(sourceDirPath)) {\n files[file] ??= readFileSync(join(sourceDirPath, file)).toString('base64');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"init-BElBKnwN.js","names":["value","files: Record<string, string>"],"sources":["../src/command/init.ts"],"sourcesContent":["import { existsSync, readFileSync, readdirSync } from 'node:fs';\n\nimport { input, password } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport {\n credentialVaultFilename,\n readCredentialVault,\n readLegacyCredentials,\n writeCredentialVault,\n} from '../util/CredentialVault';\nimport { join } from '../util/FileUtil';\nimport { constructInquirerFormattedMessage } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { setup } from '../util/setup/setup';\n\nexport async function init({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n\n const key = await setup({ credentials: false });\n logger.info(`${chalk.inverse('expo-release-it')} Initialization Get Started`);\n const hasVault = existsSync(join(OptionHolder.resourcesDir, credentialVaultFilename));\n const existing = hasVault ? readCredentialVault(key) : { keyholder: {}, files: {} };\n const legacy = readLegacyCredentials();\n Object.assign(OptionHolder.keyholderMap, existing.keyholder, legacy.data.keyholder);\n await promptInputs();\n const files = { ...existing.files, ...legacy.data.files };\n copyTemplates(files);\n writeCredentialVault(\n { keyholder: { ...OptionHolder.keyholderMap }, files },\n key,\n legacy.originals,\n );\n\n logger.success(\n `${chalk.inverse('expo-release-it')} Initialization Done. Credentials saved in ${credentialVaultFilename}. Keep your encryption key separately.`,\n );\n}\n\nasync function promptInputs() {\n /* ios */\n OptionHolder.keyholderMap.ios_app_identifier = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS Bundle Identifier',\n explanation:\n \"The bundle identifier for your iOS standalone app. You make it up, but it needs to be unique on the App Store.\\nThis means 'CFBundleIdentifier' in info.plist and 'ios.bundleIdentifier' in expo app config\",\n example: 'com.companyname.appname',\n referUrl: 'https://docs.expo.dev/versions/latest/config/app/#bundleidentifier',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_identifier,\n });\n\n OptionHolder.keyholderMap.ios_developer_team_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'IOS Developer Team Id',\n explanation: 'A unique alphanumeric string that identifies your Apple Developer Team',\n example: '8A51ABC4H7',\n referUrl: 'https://developer.apple.com/account',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_developer_team_id,\n });\n\n OptionHolder.keyholderMap.ios_match_git_url = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'iOS Fastlane Match Github URL',\n explanation:\n 'The URL of the private Git repository where code signing certificates and profiles are stored for Fastlane Match.',\n example: 'https://github.com/yourname/your-certificates-repo.git',\n referUrl: 'https://docs.fastlane.tools/actions/match/',\n }),\n previous: OptionHolder.keyholderMap.ios_match_git_url,\n });\n\n OptionHolder.keyholderMap.ios_match_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'iOS Fastlane Match Passphrase',\n explanation:\n \"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.\",\n example: 'yourpassphrase',\n referUrl: 'https://docs.fastlane.tools/actions/match/',\n }),\n previous: OptionHolder.keyholderMap.ios_match_password,\n });\n\n OptionHolder.keyholderMap.ios_app_store_connect_api_key_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS App Store Connect API Key ID',\n explanation: `ID of App Store Connect API key, used for authentication with Apple’s API.\nApp Store Connect API Key can be issued in ${chalk.underline.blue('https://appstoreconnect.apple.com/access/integrations/api')}`,\n example: '1A2BC3DE4F',\n referUrl: 'https://appstoreconnect.apple.com/access/integrations/api',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_id,\n });\n\n OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id = await input({\n message: constructInquirerFormattedMessage({\n name: 'iOS App Store Connect API Key Issuer ID',\n explanation: `Identifies the issuer who created the authentication token.\nApp Store Connect API Key can be issued in ${chalk.underline.blue('https://appstoreconnect.apple.com/access/integrations/api')}`,\n example: 'abcd1234-5678-90ef-ghij-1234567890kl',\n referUrl: 'https://appstoreconnect.apple.com/access/integrations/api',\n }),\n required: true,\n default: OptionHolder.keyholderMap.ios_app_store_connect_api_key_issuer_id,\n });\n\n /* android */\n OptionHolder.keyholderMap.android_package_name = await input({\n message: constructInquirerFormattedMessage({\n name: 'Android Package Name',\n explanation:\n 'The package name for your Android standalone app. You make it up, but it needs to be unique on the Play Store.',\n example: 'com.companyname.appname',\n referUrl: 'https://docs.expo.dev/versions/latest/config/app/#package',\n }),\n required: true,\n default: OptionHolder.keyholderMap.android_package_name,\n });\n OptionHolder.keyholderMap.android_keystore_store_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Store Password',\n explanation: `Storage password used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n previous: OptionHolder.keyholderMap.android_keystore_store_password,\n });\n OptionHolder.keyholderMap.android_keystore_key_alias = await input({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Key Alias',\n explanation: `Key alias used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n required: true,\n default: OptionHolder.keyholderMap.android_keystore_key_alias,\n });\n OptionHolder.keyholderMap.android_keystore_key_password = await inputSecret({\n message: constructInquirerFormattedMessage({\n name: 'Android Keystore Key Password',\n explanation: `Key password used in android release keystore\nYou can issue your android release keystore following this guide: ${chalk.underline.blue('https://developer.android.com/studio/publish/app-signing.html#generate-key')}\nOr, you can do same thing with CLI: ${chalk.underline.blue('https://gist.github.com/henriquemenezes/70feb8fff20a19a65346e48786bedb8f')}`,\n referUrl: 'https://developer.android.com/studio/publish/app-signing.html#generate-key',\n }),\n previous: OptionHolder.keyholderMap.android_keystore_key_password,\n });\n\n async function inputSecret({ message, previous }: { message: string; previous?: string }) {\n const stored = previous ?? '';\n const value = await password({\n message: stored ? `${message}\\nLeave blank to keep the stored value.` : message,\n mask: true,\n validate: (value) => Boolean(value || stored) || 'A value is required.',\n });\n return value || stored;\n }\n}\n\nfunction copyTemplates(files: Record<string, string>) {\n const sourceDirPath = join(OptionHolder.cli.templateDir, 'key');\n // don't overwirte key\n for (const file of readdirSync(sourceDirPath)) {\n files[file] ??= readFileSync(join(sourceDirPath, file)).toString('base64');\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import chalk from "chalk";
3
3
 
4
4
  //#region src/util/logger.ts
@@ -29,4 +29,4 @@ const logger = {
29
29
 
30
30
  //#endregion
31
31
  export { logger, redact, registerSecrets };
32
- //# sourceMappingURL=logger-DzRyyX4i.js.map
32
+ //# sourceMappingURL=logger-BY1_5Qm4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger-DzRyyX4i.js","names":["values: Iterable<string>","message: string"],"sources":["../src/util/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { OptionHolder } from './OptionHolder';\n\nconst registeredSecrets = new Set<string>();\n\nexport function registerSecrets(values: Iterable<string>) {\n for (const value of values)\n if (value) {\n registeredSecrets.add(value);\n registeredSecrets.add(JSON.stringify(value).slice(1, -1));\n }\n}\n\nexport function redact(message: string) {\n const secrets = [\n ...registeredSecrets,\n ...Object.values(OptionHolder.keyholderMap),\n ...Object.entries(process.env)\n .filter(([key]) => /password|token|secret|credential|encryption.?key/i.test(key))\n .map(([, value]) => value),\n ]\n .filter((value): value is string => typeof value === 'string' && value.length > 0)\n .flatMap((value) => [value, ...value.split(/\\r?\\n/).filter(Boolean)]);\n return secrets\n .sort((a, b) => b.length - a.length)\n .reduce((text, secret) => text.replaceAll(secret, '[REDACTED]'), message)\n .replace(/(https?:\\/\\/)[^/\\s@]+@/g, '$1[REDACTED]@')\n .replace(/eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g, '[REDACTED]')\n .replace(\n /-----BEGIN [^-]*PRIVATE KEY-----[\\s\\S]*?-----END [^-]*PRIVATE KEY-----/g,\n '[REDACTED PRIVATE KEY]',\n )\n .replace(/(\"(?:private_key|password|token)\"\\s*:\\s*\")[^\"]*/gi, '$1[REDACTED]');\n}\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${redact(msg.join(', '))}`)),\n done: (...msg: any[]) => console.log(chalk.green(`✔ ${redact(msg.join(', '))} - Done`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${redact(msg.join(', '))}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${redact(msg.join(', '))}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${redact(msg.join(', '))}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${redact(msg.join(', '))}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(redact(msg.join(', ')))),\n};\n"],"mappings":";;;;AAIA,MAAM,oCAAoB,IAAI;AAE9B,SAAgB,gBAAgBA,QAA0B;AACxD,MAAK,MAAM,SAAS,OAClB,KAAI,OAAO;AACT,oBAAkB,IAAI,MAAM;AAC5B,oBAAkB,IAAI,KAAK,UAAU,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;CAC1D;AACJ;AAED,SAAgB,OAAOC,SAAiB;CACtC,MAAM,UAAU;EACd,GAAG;EACH,GAAG,OAAO,OAAO,aAAa,aAAa;EAC3C,GAAG,OAAO,QAAQ,QAAQ,IAAI,CAC3B,OAAO,CAAC,CAAC,IAAI,KAAK,oDAAoD,KAAK,IAAI,CAAC,CAChF,IAAI,CAAC,GAAG,MAAM,KAAK,MAAM;CAC7B,EACE,OAAO,CAAC,iBAAkC,UAAU,YAAY,MAAM,SAAS,EAAE,CACjF,QAAQ,CAAC,UAAU,CAAC,OAAO,GAAG,MAAM,MAAM,QAAQ,CAAC,OAAO,QAAQ,AAAC,EAAC;AACvE,QAAO,QACJ,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,CACnC,OAAO,CAAC,MAAM,WAAW,KAAK,WAAW,QAAQ,aAAa,EAAE,QAAQ,CACxE,QAAQ,2BAA2B,gBAAgB,CACnD,QAAQ,sDAAsD,aAAa,CAC3E,QACC,2EACA,yBACD,CACA,QAAQ,qDAAqD,eAAe;AAChF;AAED,MAAa,SAAS;CACpB,SAAS,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACnF,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC;CACvF,OAAO,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,KAAK,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CAC/E,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,QAAQ,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACjF,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CAC/E,OAAO,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACrF,KAAK,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;AACvE"}
1
+ {"version":3,"file":"logger-BY1_5Qm4.js","names":["values: Iterable<string>","message: string"],"sources":["../src/util/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { OptionHolder } from './OptionHolder';\n\nconst registeredSecrets = new Set<string>();\n\nexport function registerSecrets(values: Iterable<string>) {\n for (const value of values)\n if (value) {\n registeredSecrets.add(value);\n registeredSecrets.add(JSON.stringify(value).slice(1, -1));\n }\n}\n\nexport function redact(message: string) {\n const secrets = [\n ...registeredSecrets,\n ...Object.values(OptionHolder.keyholderMap),\n ...Object.entries(process.env)\n .filter(([key]) => /password|token|secret|credential|encryption.?key/i.test(key))\n .map(([, value]) => value),\n ]\n .filter((value): value is string => typeof value === 'string' && value.length > 0)\n .flatMap((value) => [value, ...value.split(/\\r?\\n/).filter(Boolean)]);\n return secrets\n .sort((a, b) => b.length - a.length)\n .reduce((text, secret) => text.replaceAll(secret, '[REDACTED]'), message)\n .replace(/(https?:\\/\\/)[^/\\s@]+@/g, '$1[REDACTED]@')\n .replace(/eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+/g, '[REDACTED]')\n .replace(\n /-----BEGIN [^-]*PRIVATE KEY-----[\\s\\S]*?-----END [^-]*PRIVATE KEY-----/g,\n '[REDACTED PRIVATE KEY]',\n )\n .replace(/(\"(?:private_key|password|token)\"\\s*:\\s*\")[^\"]*/gi, '$1[REDACTED]');\n}\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${redact(msg.join(', '))}`)),\n done: (...msg: any[]) => console.log(chalk.green(`✔ ${redact(msg.join(', '))} - Done`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${redact(msg.join(', '))}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${redact(msg.join(', '))}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${redact(msg.join(', '))}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${redact(msg.join(', '))}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(redact(msg.join(', ')))),\n};\n"],"mappings":";;;;AAIA,MAAM,oCAAoB,IAAI;AAE9B,SAAgB,gBAAgBA,QAA0B;AACxD,MAAK,MAAM,SAAS,OAClB,KAAI,OAAO;AACT,oBAAkB,IAAI,MAAM;AAC5B,oBAAkB,IAAI,KAAK,UAAU,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;CAC1D;AACJ;AAED,SAAgB,OAAOC,SAAiB;CACtC,MAAM,UAAU;EACd,GAAG;EACH,GAAG,OAAO,OAAO,aAAa,aAAa;EAC3C,GAAG,OAAO,QAAQ,QAAQ,IAAI,CAC3B,OAAO,CAAC,CAAC,IAAI,KAAK,oDAAoD,KAAK,IAAI,CAAC,CAChF,IAAI,CAAC,GAAG,MAAM,KAAK,MAAM;CAC7B,EACE,OAAO,CAAC,iBAAkC,UAAU,YAAY,MAAM,SAAS,EAAE,CACjF,QAAQ,CAAC,UAAU,CAAC,OAAO,GAAG,MAAM,MAAM,QAAQ,CAAC,OAAO,QAAQ,AAAC,EAAC;AACvE,QAAO,QACJ,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,OAAO,CACnC,OAAO,CAAC,MAAM,WAAW,KAAK,WAAW,QAAQ,aAAa,EAAE,QAAQ,CACxE,QAAQ,2BAA2B,gBAAgB,CACnD,QAAQ,sDAAsD,aAAa,CAC3E,QACC,2EACA,yBACD,CACA,QAAQ,qDAAqD,eAAe;AAChF;AAED,MAAa,SAAS;CACpB,SAAS,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACnF,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,OAAO,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC;CACvF,OAAO,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,KAAK,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CAC/E,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,QAAQ,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACjF,MAAM,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CAC/E,OAAO,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;CACrF,KAAK,CAAC,GAAG,QAAe,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;AACvE"}
@@ -1,4 +1,4 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { exist, join, readJsonSlow } from "./FileUtil-Dq8PORna.js";
3
3
  import { is } from "@mj-studio/js-util";
4
4
 
@@ -28,4 +28,4 @@ function assignIfValueIsValidAndNotSetAlready(object, key, value) {
28
28
 
29
29
  //#endregion
30
30
  export { parseConfigFile };
31
- //# sourceMappingURL=parseConfigFile-Bz59F3bt.js.map
31
+ //# sourceMappingURL=parseConfigFile-N2627e-u.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseConfigFile-Bz59F3bt.js","names":["object: Partial<T>","key: K","value: R"],"sources":["../src/util/parseConfigFile.ts"],"sourcesContent":["import { is } from '@mj-studio/js-util';\n\nimport type { ExpoReleaseItConfiguration } from '../type/ExpoReleaseItConfiguration';\nimport { exist, join, readJsonSlow } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\n\nexport async function parseConfigFile() {\n const candidates = [\n join(OptionHolder.resourcesDir, 'expo-release-it.config.json'),\n join(OptionHolder.projectDir, 'expo-release-it.config.json'),\n ];\n if (OptionHolder.input.config) {\n candidates.unshift(OptionHolder.input.config);\n }\n\n const validConfigFilePath = candidates.find(\n (candidate) => exist(candidate) && is.object(readJsonSlow(candidate)),\n );\n\n if (!validConfigFilePath) return;\n\n const config = readJsonSlow(validConfigFilePath) as ExpoReleaseItConfiguration;\n\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'semverIncrement',\n config.bump?.increment,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'androidOutput',\n config.build?.androidBuildOutput ?? config.upload?.androidBuildOutput,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'iosProject',\n config.build?.ios?.project,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input, 'iosTarget', config.build?.ios?.target);\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input, 'iosScheme', config.build?.ios?.scheme);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'uploadMetadata',\n config.upload?.uploadMetadata ?? config.submit?.uploadMetadata,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'uploadScreenshot',\n config.upload?.uploadScreenshot ?? config.submit?.uploadScreenshot,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'commit', config.bump?.git?.commit);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input.git,\n 'commitMessage',\n config.bump?.git?.commitMessage,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'tag', config.bump?.git?.tag);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input.git,\n 'tagName',\n config.bump?.git?.tagName,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'push', config.bump?.git?.push);\n}\n\n// make sure config file options doesn't overwrite passed options from cli directly.\nfunction assignIfValueIsValidAndNotSetAlready<R, T extends Record<K, R>, K extends keyof T>(\n object: Partial<T>,\n key: K,\n value: R,\n) {\n if (object[key] === undefined && value !== null && value !== undefined) {\n object[key] = value as T[K];\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,kBAAkB;CACtC,MAAM,aAAa,CACjB,KAAK,aAAa,cAAc,8BAA8B,EAC9D,KAAK,aAAa,YAAY,8BAA8B,AAC7D;AACD,KAAI,aAAa,MAAM,OACrB,YAAW,QAAQ,aAAa,MAAM,OAAO;CAG/C,MAAM,sBAAsB,WAAW,KACrC,CAAC,cAAc,MAAM,UAAU,IAAI,GAAG,OAAO,aAAa,UAAU,CAAC,CACtE;AAED,MAAK,oBAAqB;CAE1B,MAAM,SAAS,aAAa,oBAAoB;AAEhD,sCACE,aAAa,OACb,mBACA,OAAO,MAAM,UACd;AACD,sCACE,aAAa,OACb,iBACA,OAAO,OAAO,sBAAsB,OAAO,QAAQ,mBACpD;AACD,sCACE,aAAa,OACb,cACA,OAAO,OAAO,KAAK,QACpB;AACD,sCAAqC,aAAa,OAAO,aAAa,OAAO,OAAO,KAAK,OAAO;AAChG,sCAAqC,aAAa,OAAO,aAAa,OAAO,OAAO,KAAK,OAAO;AAChG,sCACE,aAAa,OACb,kBACA,OAAO,QAAQ,kBAAkB,OAAO,QAAQ,eACjD;AACD,sCACE,aAAa,OACb,oBACA,OAAO,QAAQ,oBAAoB,OAAO,QAAQ,iBACnD;AACD,sCAAqC,aAAa,MAAM,KAAK,UAAU,OAAO,MAAM,KAAK,OAAO;AAChG,sCACE,aAAa,MAAM,KACnB,iBACA,OAAO,MAAM,KAAK,cACnB;AACD,sCAAqC,aAAa,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,IAAI;AAC1F,sCACE,aAAa,MAAM,KACnB,WACA,OAAO,MAAM,KAAK,QACnB;AACD,sCAAqC,aAAa,MAAM,KAAK,QAAQ,OAAO,MAAM,KAAK,KAAK;AAC7F;AAGD,SAAS,qCACPA,QACAC,KACAC,OACA;AACA,KAAI,OAAO,mBAAsB,UAAU,QAAQ,iBACjD,QAAO,OAAO;AAEjB"}
1
+ {"version":3,"file":"parseConfigFile-N2627e-u.js","names":["object: Partial<T>","key: K","value: R"],"sources":["../src/util/parseConfigFile.ts"],"sourcesContent":["import { is } from '@mj-studio/js-util';\n\nimport type { ExpoReleaseItConfiguration } from '../type/ExpoReleaseItConfiguration';\nimport { exist, join, readJsonSlow } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\n\nexport async function parseConfigFile() {\n const candidates = [\n join(OptionHolder.resourcesDir, 'expo-release-it.config.json'),\n join(OptionHolder.projectDir, 'expo-release-it.config.json'),\n ];\n if (OptionHolder.input.config) {\n candidates.unshift(OptionHolder.input.config);\n }\n\n const validConfigFilePath = candidates.find(\n (candidate) => exist(candidate) && is.object(readJsonSlow(candidate)),\n );\n\n if (!validConfigFilePath) return;\n\n const config = readJsonSlow(validConfigFilePath) as ExpoReleaseItConfiguration;\n\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'semverIncrement',\n config.bump?.increment,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'androidOutput',\n config.build?.androidBuildOutput ?? config.upload?.androidBuildOutput,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'iosProject',\n config.build?.ios?.project,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input, 'iosTarget', config.build?.ios?.target);\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input, 'iosScheme', config.build?.ios?.scheme);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'uploadMetadata',\n config.upload?.uploadMetadata ?? config.submit?.uploadMetadata,\n );\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input,\n 'uploadScreenshot',\n config.upload?.uploadScreenshot ?? config.submit?.uploadScreenshot,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'commit', config.bump?.git?.commit);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input.git,\n 'commitMessage',\n config.bump?.git?.commitMessage,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'tag', config.bump?.git?.tag);\n assignIfValueIsValidAndNotSetAlready(\n OptionHolder.input.git,\n 'tagName',\n config.bump?.git?.tagName,\n );\n assignIfValueIsValidAndNotSetAlready(OptionHolder.input.git, 'push', config.bump?.git?.push);\n}\n\n// make sure config file options doesn't overwrite passed options from cli directly.\nfunction assignIfValueIsValidAndNotSetAlready<R, T extends Record<K, R>, K extends keyof T>(\n object: Partial<T>,\n key: K,\n value: R,\n) {\n if (object[key] === undefined && value !== null && value !== undefined) {\n object[key] = value as T[K];\n }\n}\n"],"mappings":";;;;;AAMA,eAAsB,kBAAkB;CACtC,MAAM,aAAa,CACjB,KAAK,aAAa,cAAc,8BAA8B,EAC9D,KAAK,aAAa,YAAY,8BAA8B,AAC7D;AACD,KAAI,aAAa,MAAM,OACrB,YAAW,QAAQ,aAAa,MAAM,OAAO;CAG/C,MAAM,sBAAsB,WAAW,KACrC,CAAC,cAAc,MAAM,UAAU,IAAI,GAAG,OAAO,aAAa,UAAU,CAAC,CACtE;AAED,MAAK,oBAAqB;CAE1B,MAAM,SAAS,aAAa,oBAAoB;AAEhD,sCACE,aAAa,OACb,mBACA,OAAO,MAAM,UACd;AACD,sCACE,aAAa,OACb,iBACA,OAAO,OAAO,sBAAsB,OAAO,QAAQ,mBACpD;AACD,sCACE,aAAa,OACb,cACA,OAAO,OAAO,KAAK,QACpB;AACD,sCAAqC,aAAa,OAAO,aAAa,OAAO,OAAO,KAAK,OAAO;AAChG,sCAAqC,aAAa,OAAO,aAAa,OAAO,OAAO,KAAK,OAAO;AAChG,sCACE,aAAa,OACb,kBACA,OAAO,QAAQ,kBAAkB,OAAO,QAAQ,eACjD;AACD,sCACE,aAAa,OACb,oBACA,OAAO,QAAQ,oBAAoB,OAAO,QAAQ,iBACnD;AACD,sCAAqC,aAAa,MAAM,KAAK,UAAU,OAAO,MAAM,KAAK,OAAO;AAChG,sCACE,aAAa,MAAM,KACnB,iBACA,OAAO,MAAM,KAAK,cACnB;AACD,sCAAqC,aAAa,MAAM,KAAK,OAAO,OAAO,MAAM,KAAK,IAAI;AAC1F,sCACE,aAAa,MAAM,KACnB,WACA,OAAO,MAAM,KAAK,QACnB;AACD,sCAAqC,aAAa,MAAM,KAAK,QAAQ,OAAO,MAAM,KAAK,KAAK;AAC7F;AAGD,SAAS,qCACPA,QACAC,KACAC,OACA;AACA,KAAI,OAAO,mBAAsB,UAAU,QAAQ,iBACjD,QAAO,OAAO;AAEjB"}
@@ -1,6 +1,6 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { copy, exist, read, resolve, write } from "./FileUtil-Dq8PORna.js";
3
- import { credentialFilenames, credentialKeyPath } from "./CredentialVault-dRFh9J19.js";
3
+ import { credentialFilenames, credentialKeyPath } from "./CredentialVault-f3Q-GQiW.js";
4
4
 
5
5
  //#region src/util/setup/prepareAndroid.ts
6
6
  function androidSigningEnvironment() {
@@ -26,4 +26,4 @@ async function prepareAndroid(prebuild) {
26
26
 
27
27
  //#endregion
28
28
  export { androidSigningEnvironment, prepareAndroid };
29
- //# sourceMappingURL=prepareAndroid-DXJ29rCp.js.map
29
+ //# sourceMappingURL=prepareAndroid-BV53rhQ3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepareAndroid-DXJ29rCp.js","names":["prebuild: () => Promise<void>"],"sources":["../src/util/setup/prepareAndroid.ts"],"sourcesContent":["import { credentialFilenames, credentialKeyPath } from '../CredentialVault';\nimport { copy, exist, read, resolve, write } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\n\nexport function androidSigningEnvironment() {\n const keys = OptionHolder.keyholderMap;\n const keystore = credentialKeyPath(credentialFilenames.androidKeystore);\n const values = {\n EXPO_RELEASE_IT_KEYSTORE: keystore,\n EXPO_RELEASE_IT_STORE_PASSWORD: keys.android_keystore_store_password,\n EXPO_RELEASE_IT_KEY_ALIAS: keys.android_keystore_key_alias,\n EXPO_RELEASE_IT_KEY_PASSWORD: keys.android_keystore_key_password,\n };\n if (Object.values(values).some((value) => !value)) {\n throw new Error(\n 'Android release signing requires the keystore store password, key alias, and key password. Run init to configure encrypted credentials.',\n );\n }\n return values;\n}\n\nexport async function prepareAndroid(prebuild: () => Promise<void>) {\n await prebuild();\n const appDir = resolve(OptionHolder.projectDir, 'android', 'app');\n const buildGradle = resolve(appDir, 'build.gradle');\n if (!exist(buildGradle))\n throw new Error(\n 'Generated android/app/build.gradle was not found. This Expo template needs a signing integration update.',\n );\n copy(\n resolve(OptionHolder.cli.templateDir, 'android', 'release-signing.gradle'),\n resolve(appDir, 'expo-release-it-signing.gradle'),\n );\n write(buildGradle, `${read(buildGradle)}\\napply from: file(\"expo-release-it-signing.gradle\")\\n`);\n}\n"],"mappings":";;;;;AAIA,SAAgB,4BAA4B;CAC1C,MAAM,OAAO,aAAa;CAC1B,MAAM,WAAW,kBAAkB,oBAAoB,gBAAgB;CACvE,MAAM,SAAS;EACb,0BAA0B;EAC1B,gCAAgC,KAAK;EACrC,2BAA2B,KAAK;EAChC,8BAA8B,KAAK;CACpC;AACD,KAAI,OAAO,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAC/C,OAAM,IAAI,MACR;AAGJ,QAAO;AACR;AAED,eAAsB,eAAeA,UAA+B;AAClE,OAAM,UAAU;CAChB,MAAM,SAAS,QAAQ,aAAa,YAAY,WAAW,MAAM;CACjE,MAAM,cAAc,QAAQ,QAAQ,eAAe;AACnD,MAAK,MAAM,YAAY,CACrB,OAAM,IAAI,MACR;AAEJ,MACE,QAAQ,aAAa,IAAI,aAAa,WAAW,yBAAyB,EAC1E,QAAQ,QAAQ,iCAAiC,CAClD;AACD,OAAM,cAAc,EAAE,KAAK,YAAY,CAAC,wDAAwD;AACjG"}
1
+ {"version":3,"file":"prepareAndroid-BV53rhQ3.js","names":["prebuild: () => Promise<void>"],"sources":["../src/util/setup/prepareAndroid.ts"],"sourcesContent":["import { credentialFilenames, credentialKeyPath } from '../CredentialVault';\nimport { copy, exist, read, resolve, write } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\n\nexport function androidSigningEnvironment() {\n const keys = OptionHolder.keyholderMap;\n const keystore = credentialKeyPath(credentialFilenames.androidKeystore);\n const values = {\n EXPO_RELEASE_IT_KEYSTORE: keystore,\n EXPO_RELEASE_IT_STORE_PASSWORD: keys.android_keystore_store_password,\n EXPO_RELEASE_IT_KEY_ALIAS: keys.android_keystore_key_alias,\n EXPO_RELEASE_IT_KEY_PASSWORD: keys.android_keystore_key_password,\n };\n if (Object.values(values).some((value) => !value)) {\n throw new Error(\n 'Android release signing requires the keystore store password, key alias, and key password. Run init to configure encrypted credentials.',\n );\n }\n return values;\n}\n\nexport async function prepareAndroid(prebuild: () => Promise<void>) {\n await prebuild();\n const appDir = resolve(OptionHolder.projectDir, 'android', 'app');\n const buildGradle = resolve(appDir, 'build.gradle');\n if (!exist(buildGradle))\n throw new Error(\n 'Generated android/app/build.gradle was not found. This Expo template needs a signing integration update.',\n );\n copy(\n resolve(OptionHolder.cli.templateDir, 'android', 'release-signing.gradle'),\n resolve(appDir, 'expo-release-it-signing.gradle'),\n );\n write(buildGradle, `${read(buildGradle)}\\napply from: file(\"expo-release-it-signing.gradle\")\\n`);\n}\n"],"mappings":";;;;;AAIA,SAAgB,4BAA4B;CAC1C,MAAM,OAAO,aAAa;CAC1B,MAAM,WAAW,kBAAkB,oBAAoB,gBAAgB;CACvE,MAAM,SAAS;EACb,0BAA0B;EAC1B,gCAAgC,KAAK;EACrC,2BAA2B,KAAK;EAChC,8BAA8B,KAAK;CACpC;AACD,KAAI,OAAO,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAC/C,OAAM,IAAI,MACR;AAGJ,QAAO;AACR;AAED,eAAsB,eAAeA,UAA+B;AAClE,OAAM,UAAU;CAChB,MAAM,SAAS,QAAQ,aAAa,YAAY,WAAW,MAAM;CACjE,MAAM,cAAc,QAAQ,QAAQ,eAAe;AACnD,MAAK,MAAM,YAAY,CACrB,OAAM,IAAI,MACR;AAEJ,MACE,QAAQ,aAAa,IAAI,aAAa,WAAW,yBAAyB,EAC1E,QAAQ,QAAQ,iCAAiC,CAClD;AACD,OAAM,cAAc,EAAE,KAAK,YAAY,CAAC,wDAAwD;AACjG"}
@@ -1,7 +1,7 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { copy, remove, resolve, write } from "./FileUtil-Dq8PORna.js";
3
- import { copyAndroidMetadata, copyIosMetadata } from "./MetadataSyncUtil-DL8wei5I.js";
4
- import { inspectRubyEnvironment } from "./RubyEnvironment-D07WuLyt.js";
3
+ import { copyAndroidMetadata, copyIosMetadata } from "./MetadataSyncUtil-DSi5YMM1.js";
4
+ import { inspectRubyEnvironment } from "./RubyEnvironment-BUsGpWfG.js";
5
5
 
6
6
  //#region src/util/setup/prepareFastlane.ts
7
7
  async function prepareFastlane(environment) {
@@ -20,4 +20,4 @@ async function prepareFastlane(environment) {
20
20
 
21
21
  //#endregion
22
22
  export { prepareFastlane };
23
- //# sourceMappingURL=prepareFastlane-akP0u0fl.js.map
23
+ //# sourceMappingURL=prepareFastlane-7Zg3N5Fy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepareFastlane-akP0u0fl.js","names":["environment?: RubyEnvironment"],"sources":["../src/util/setup/prepareFastlane.ts"],"sourcesContent":["import { copy, remove, resolve, write } from '../FileUtil';\nimport { copyAndroidMetadata, copyIosMetadata } from '../MetadataSyncUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { inspectRubyEnvironment, type RubyEnvironment } from './RubyEnvironment';\n\nexport async function prepareFastlane(environment?: RubyEnvironment) {\n const ruby = environment ?? (await inspectRubyEnvironment());\n await ruby.install();\n const platform = OptionHolder.input.platform;\n const fastlaneDir = resolve(ruby.workspace, 'fastlane');\n const fastfileName = 'Fastfile';\n remove(fastlaneDir);\n copy(\n resolve(OptionHolder.cli.templateDir, platform, 'fastlane', fastfileName),\n resolve(fastlaneDir, fastfileName),\n );\n write(resolve(ruby.workspace, '.gitignore'), '*\\n');\n if (platform === 'ios') copyIosMetadata('workspace', ruby.workspace);\n else copyAndroidMetadata('workspace', ruby.workspace);\n return ruby;\n}\n"],"mappings":";;;;;;AAKA,eAAsB,gBAAgBA,aAA+B;CACnE,MAAM,OAAO,eAAgB,MAAM,wBAAwB;AAC3D,OAAM,KAAK,SAAS;CACpB,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,cAAc,QAAQ,KAAK,WAAW,WAAW;CACvD,MAAM,eAAe;AACrB,QAAO,YAAY;AACnB,MACE,QAAQ,aAAa,IAAI,aAAa,UAAU,YAAY,aAAa,EACzE,QAAQ,aAAa,aAAa,CACnC;AACD,OAAM,QAAQ,KAAK,WAAW,aAAa,EAAE,MAAM;AACnD,KAAI,aAAa,MAAO,iBAAgB,aAAa,KAAK,UAAU;KAC/D,qBAAoB,aAAa,KAAK,UAAU;AACrD,QAAO;AACR"}
1
+ {"version":3,"file":"prepareFastlane-7Zg3N5Fy.js","names":["environment?: RubyEnvironment"],"sources":["../src/util/setup/prepareFastlane.ts"],"sourcesContent":["import { copy, remove, resolve, write } from '../FileUtil';\nimport { copyAndroidMetadata, copyIosMetadata } from '../MetadataSyncUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { inspectRubyEnvironment, type RubyEnvironment } from './RubyEnvironment';\n\nexport async function prepareFastlane(environment?: RubyEnvironment) {\n const ruby = environment ?? (await inspectRubyEnvironment());\n await ruby.install();\n const platform = OptionHolder.input.platform;\n const fastlaneDir = resolve(ruby.workspace, 'fastlane');\n const fastfileName = 'Fastfile';\n remove(fastlaneDir);\n copy(\n resolve(OptionHolder.cli.templateDir, platform, 'fastlane', fastfileName),\n resolve(fastlaneDir, fastfileName),\n );\n write(resolve(ruby.workspace, '.gitignore'), '*\\n');\n if (platform === 'ios') copyIosMetadata('workspace', ruby.workspace);\n else copyAndroidMetadata('workspace', ruby.workspace);\n return ruby;\n}\n"],"mappings":";;;;;;AAKA,eAAsB,gBAAgBA,aAA+B;CACnE,MAAM,OAAO,eAAgB,MAAM,wBAAwB;AAC3D,OAAM,KAAK,SAAS;CACpB,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,cAAc,QAAQ,KAAK,WAAW,WAAW;CACvD,MAAM,eAAe;AACrB,QAAO,YAAY;AACnB,MACE,QAAQ,aAAa,IAAI,aAAa,UAAU,YAAY,aAAa,EACzE,QAAQ,aAAa,aAAa,CACnC;AACD,OAAM,QAAQ,KAAK,WAAW,aAAa,EAAE,MAAM;AACnD,KAAI,aAAa,MAAO,iBAAgB,aAAa,KAAK,UAAU;KAC/D,qBAAoB,aAAa,KAAK,UAAU;AACrD,QAAO;AACR"}
@@ -1,6 +1,6 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { exist, readdir, remove, resolve } from "./FileUtil-Dq8PORna.js";
3
- import { credentialProcessEnvironment } from "./CredentialVault-dRFh9J19.js";
3
+ import { credentialProcessEnvironment } from "./CredentialVault-f3Q-GQiW.js";
4
4
  import { execa } from "execa";
5
5
 
6
6
  //#region src/util/setup/prepareIos.ts
@@ -63,4 +63,4 @@ function selectIosCandidate({ candidates, selected, option }) {
63
63
 
64
64
  //#endregion
65
65
  export { prepareIos, selectIosCandidate };
66
- //# sourceMappingURL=prepareIos-CVI_Azja.js.map
66
+ //# sourceMappingURL=prepareIos-Cigqnhe8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepareIos-CVI_Azja.js","names":["targetNames: string[]","info: { project: { schemes: string[] } }"],"sources":["../src/util/setup/prepareIos.ts"],"sourcesContent":["import { execa } from 'execa';\n\nimport { credentialProcessEnvironment } from '../CredentialVault';\nimport { exist, readdir, remove, resolve } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport type { RubyEnvironment } from './RubyEnvironment';\n\nexport async function prepareIos({\n ruby,\n prebuild,\n}: {\n ruby: Pick<RubyEnvironment, 'bundle' | 'executable'>;\n prebuild: () => Promise<void>;\n}) {\n await prebuild();\n const iosDir = resolve(OptionHolder.projectDir, 'ios');\n await ruby.bundle(['exec', 'pod', 'install'], { cwd: iosDir });\n // Yarn can leave a temporary Node executable path in this generated file.\n remove(resolve(iosDir, '.xcode.env.local'));\n\n const projectName = selectIosCandidate({\n candidates: readdir(iosDir).filter((name) => name.endsWith('.xcodeproj')),\n selected: OptionHolder.input.iosProject,\n option: '--ios-project',\n });\n const project = resolve(iosDir, projectName);\n const targets = await ruby.bundle(\n [\n 'exec',\n ruby.executable,\n '-rjson',\n '-rxcodeproj',\n '-e',\n 'p = Xcodeproj::Project.open(ARGV.first); puts JSON.generate(p.native_targets.select { |t| t.product_type == \"com.apple.product-type.application\" }.map(&:name))',\n project,\n ],\n { capture: true },\n );\n const targetNames: string[] = JSON.parse(targets.stdout);\n const listing = await execa('xcodebuild', ['-list', '-json', '-project', project], {\n env: credentialProcessEnvironment(),\n extendEnv: false,\n stdout: 'pipe',\n stderr: 'pipe',\n });\n const info: { project: { schemes: string[] } } = JSON.parse(listing.stdout);\n OptionHolder.input.iosProject = project;\n OptionHolder.input.iosTarget = selectIosCandidate({\n candidates: targetNames,\n selected: OptionHolder.input.iosTarget,\n option: '--ios-target',\n });\n OptionHolder.input.iosScheme = selectIosCandidate({\n candidates: info.project.schemes,\n selected: OptionHolder.input.iosScheme,\n option: '--ios-scheme',\n });\n const workspace = resolve(iosDir, projectName.replace(/\\.xcodeproj$/, '.xcworkspace'));\n OptionHolder.input.iosWorkspace = exist(workspace) ? workspace : undefined;\n}\n\nexport function selectIosCandidate({\n candidates,\n selected,\n option,\n}: {\n candidates: string[];\n selected?: string;\n option: string;\n}) {\n if (selected && candidates.includes(selected)) return selected;\n if (!selected && candidates.length === 1) return candidates[0]!;\n throw new Error(\n `Cannot select an iOS build candidate for ${option}${selected ? ` (${selected})` : ''}. Candidates: ${candidates.join(', ') || '(none)'}. Set ${option} explicitly.`,\n );\n}\n"],"mappings":";;;;;;AAOA,eAAsB,WAAW,EAC/B,MACA,UAID,EAAE;AACD,OAAM,UAAU;CAChB,MAAM,SAAS,QAAQ,aAAa,YAAY,MAAM;AACtD,OAAM,KAAK,OAAO;EAAC;EAAQ;EAAO;CAAU,GAAE,EAAE,KAAK,OAAQ,EAAC;AAE9D,QAAO,QAAQ,QAAQ,mBAAmB,CAAC;CAE3C,MAAM,cAAc,mBAAmB;EACrC,YAAY,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,aAAa,CAAC;EACzE,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;CACF,MAAM,UAAU,QAAQ,QAAQ,YAAY;CAC5C,MAAM,UAAU,MAAM,KAAK,OACzB;EACE;EACA,KAAK;EACL;EACA;EACA;EACA;EACA;CACD,GACD,EAAE,SAAS,KAAM,EAClB;CACD,MAAMA,cAAwB,KAAK,MAAM,QAAQ,OAAO;CACxD,MAAM,UAAU,MAAM,MAAM,cAAc;EAAC;EAAS;EAAS;EAAY;CAAQ,GAAE;EACjF,KAAK,8BAA8B;EACnC,WAAW;EACX,QAAQ;EACR,QAAQ;CACT,EAAC;CACF,MAAMC,OAA2C,KAAK,MAAM,QAAQ,OAAO;AAC3E,cAAa,MAAM,aAAa;AAChC,cAAa,MAAM,YAAY,mBAAmB;EAChD,YAAY;EACZ,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;AACF,cAAa,MAAM,YAAY,mBAAmB;EAChD,YAAY,KAAK,QAAQ;EACzB,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;CACF,MAAM,YAAY,QAAQ,QAAQ,YAAY,QAAQ,gBAAgB,eAAe,CAAC;AACtF,cAAa,MAAM,eAAe,MAAM,UAAU,GAAG;AACtD;AAED,SAAgB,mBAAmB,EACjC,YACA,UACA,QAKD,EAAE;AACD,KAAI,YAAY,WAAW,SAAS,SAAS,CAAE,QAAO;AACtD,MAAK,YAAY,WAAW,WAAW,EAAG,QAAO,WAAW;AAC5D,OAAM,IAAI,OACP,2CAA2C,OAAO,EAAE,YAAY,IAAI,SAAS,KAAK,GAAG,gBAAgB,WAAW,KAAK,KAAK,IAAI,SAAS,QAAQ,OAAO;AAE1J"}
1
+ {"version":3,"file":"prepareIos-Cigqnhe8.js","names":["targetNames: string[]","info: { project: { schemes: string[] } }"],"sources":["../src/util/setup/prepareIos.ts"],"sourcesContent":["import { execa } from 'execa';\n\nimport { credentialProcessEnvironment } from '../CredentialVault';\nimport { exist, readdir, remove, resolve } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport type { RubyEnvironment } from './RubyEnvironment';\n\nexport async function prepareIos({\n ruby,\n prebuild,\n}: {\n ruby: Pick<RubyEnvironment, 'bundle' | 'executable'>;\n prebuild: () => Promise<void>;\n}) {\n await prebuild();\n const iosDir = resolve(OptionHolder.projectDir, 'ios');\n await ruby.bundle(['exec', 'pod', 'install'], { cwd: iosDir });\n // Yarn can leave a temporary Node executable path in this generated file.\n remove(resolve(iosDir, '.xcode.env.local'));\n\n const projectName = selectIosCandidate({\n candidates: readdir(iosDir).filter((name) => name.endsWith('.xcodeproj')),\n selected: OptionHolder.input.iosProject,\n option: '--ios-project',\n });\n const project = resolve(iosDir, projectName);\n const targets = await ruby.bundle(\n [\n 'exec',\n ruby.executable,\n '-rjson',\n '-rxcodeproj',\n '-e',\n 'p = Xcodeproj::Project.open(ARGV.first); puts JSON.generate(p.native_targets.select { |t| t.product_type == \"com.apple.product-type.application\" }.map(&:name))',\n project,\n ],\n { capture: true },\n );\n const targetNames: string[] = JSON.parse(targets.stdout);\n const listing = await execa('xcodebuild', ['-list', '-json', '-project', project], {\n env: credentialProcessEnvironment(),\n extendEnv: false,\n stdout: 'pipe',\n stderr: 'pipe',\n });\n const info: { project: { schemes: string[] } } = JSON.parse(listing.stdout);\n OptionHolder.input.iosProject = project;\n OptionHolder.input.iosTarget = selectIosCandidate({\n candidates: targetNames,\n selected: OptionHolder.input.iosTarget,\n option: '--ios-target',\n });\n OptionHolder.input.iosScheme = selectIosCandidate({\n candidates: info.project.schemes,\n selected: OptionHolder.input.iosScheme,\n option: '--ios-scheme',\n });\n const workspace = resolve(iosDir, projectName.replace(/\\.xcodeproj$/, '.xcworkspace'));\n OptionHolder.input.iosWorkspace = exist(workspace) ? workspace : undefined;\n}\n\nexport function selectIosCandidate({\n candidates,\n selected,\n option,\n}: {\n candidates: string[];\n selected?: string;\n option: string;\n}) {\n if (selected && candidates.includes(selected)) return selected;\n if (!selected && candidates.length === 1) return candidates[0]!;\n throw new Error(\n `Cannot select an iOS build candidate for ${option}${selected ? ` (${selected})` : ''}. Candidates: ${candidates.join(', ') || '(none)'}. Set ${option} explicitly.`,\n );\n}\n"],"mappings":";;;;;;AAOA,eAAsB,WAAW,EAC/B,MACA,UAID,EAAE;AACD,OAAM,UAAU;CAChB,MAAM,SAAS,QAAQ,aAAa,YAAY,MAAM;AACtD,OAAM,KAAK,OAAO;EAAC;EAAQ;EAAO;CAAU,GAAE,EAAE,KAAK,OAAQ,EAAC;AAE9D,QAAO,QAAQ,QAAQ,mBAAmB,CAAC;CAE3C,MAAM,cAAc,mBAAmB;EACrC,YAAY,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,aAAa,CAAC;EACzE,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;CACF,MAAM,UAAU,QAAQ,QAAQ,YAAY;CAC5C,MAAM,UAAU,MAAM,KAAK,OACzB;EACE;EACA,KAAK;EACL;EACA;EACA;EACA;EACA;CACD,GACD,EAAE,SAAS,KAAM,EAClB;CACD,MAAMA,cAAwB,KAAK,MAAM,QAAQ,OAAO;CACxD,MAAM,UAAU,MAAM,MAAM,cAAc;EAAC;EAAS;EAAS;EAAY;CAAQ,GAAE;EACjF,KAAK,8BAA8B;EACnC,WAAW;EACX,QAAQ;EACR,QAAQ;CACT,EAAC;CACF,MAAMC,OAA2C,KAAK,MAAM,QAAQ,OAAO;AAC3E,cAAa,MAAM,aAAa;AAChC,cAAa,MAAM,YAAY,mBAAmB;EAChD,YAAY;EACZ,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;AACF,cAAa,MAAM,YAAY,mBAAmB;EAChD,YAAY,KAAK,QAAQ;EACzB,UAAU,aAAa,MAAM;EAC7B,QAAQ;CACT,EAAC;CACF,MAAM,YAAY,QAAQ,QAAQ,YAAY,QAAQ,gBAAgB,eAAe,CAAC;AACtF,cAAa,MAAM,eAAe,MAAM,UAAU,GAAG;AACtD;AAED,SAAgB,mBAAmB,EACjC,YACA,UACA,QAKD,EAAE;AACD,KAAI,YAAY,WAAW,SAAS,SAAS,CAAE,QAAO;AACtD,MAAK,YAAY,WAAW,WAAW,EAAG,QAAO,WAAW;AAC5D,OAAM,IAAI,OACP,2CAA2C,OAAO,EAAE,YAAY,IAAI,SAAS,KAAK,GAAG,gBAAgB,WAAW,KAAK,KAAK,IAAI,SAAS,QAAQ,OAAO;AAE1J"}
@@ -1,11 +1,11 @@
1
- import { OptionHolder } from "./OptionHolder-CETgJidz.js";
1
+ import { OptionHolder } from "./OptionHolder-Ci01mA57.js";
2
2
  import { resolve } from "./FileUtil-Dq8PORna.js";
3
- import { credentialFilenames, credentialKeyPath } from "./CredentialVault-dRFh9J19.js";
4
- import { InqueryInputs } from "./InqueryInputs-DC-uZQGJ.js";
5
- import { copyAndroidMetadata, copyIosMetadata } from "./MetadataSyncUtil-DL8wei5I.js";
6
- import { prepareFastlane } from "./prepareFastlane-akP0u0fl.js";
7
- import { setup } from "./setup-CZvmOOKR.js";
8
- import { generateAppStoreConnectApiKeyFile } from "./generateAppStoreConnectApiKeyFile-BsrnIeTT.js";
3
+ import { credentialFilenames, credentialKeyPath } from "./CredentialVault-f3Q-GQiW.js";
4
+ import { InqueryInputs } from "./InqueryInputs-CQCIPjvq.js";
5
+ import { copyAndroidMetadata, copyIosMetadata } from "./MetadataSyncUtil-DSi5YMM1.js";
6
+ import { prepareFastlane } from "./prepareFastlane-7Zg3N5Fy.js";
7
+ import { setup } from "./setup-ChAxYljZ.js";
8
+ import { generateAppStoreConnectApiKeyFile } from "./generateAppStoreConnectApiKeyFile-JftlEOVB.js";
9
9
 
10
10
  //#region src/command/pull.ts
11
11
  async function pull({ options }) {
@@ -73,4 +73,4 @@ async function pullAndroidMetadata() {
73
73
 
74
74
  //#endregion
75
75
  export { pull };
76
- //# sourceMappingURL=pull-DimLyvZB.js.map
76
+ //# sourceMappingURL=pull-B1FwsQ16.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull-DimLyvZB.js","names":[],"sources":["../src/command/pull.ts"],"sourcesContent":["import { credentialFilenames, credentialKeyPath } from '../util/CredentialVault';\nimport { resolve } from '../util/FileUtil';\nimport { generateAppStoreConnectApiKeyFile } from '../util/generateAppStoreConnectApiKeyFile';\nimport { InqueryInputs } from '../util/input/InqueryInputs';\nimport { copyAndroidMetadata, copyIosMetadata } from '../util/MetadataSyncUtil';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { prepareFastlane } from '../util/setup/prepareFastlane';\nimport { setup } from '../util/setup/setup';\n\nexport async function pull({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await setup();\n await promptInputs();\n\n if (OptionHolder.input.platform === 'ios') {\n await pullIosMetadata();\n } else {\n await pullAndroidMetadata();\n }\n}\n\nasync function promptInputs() {\n await InqueryInputs.platform();\n await InqueryInputs.useLiveVersionIos();\n}\n\nasync function pullIosMetadata() {\n const ruby = await prepareFastlane();\n const metadataPath = resolve(ruby.workspace, 'fastlane', 'metadata');\n const screenshotsPath = resolve(ruby.workspace, 'fastlane', 'screenshots');\n const apiKeyPath = generateAppStoreConnectApiKeyFile();\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'deliver',\n 'download_metadata',\n '--metadata_path',\n metadataPath,\n '-f',\n '--app_identifier',\n OptionHolder.keyholderMap.ios_app_identifier,\n '--api_key_path',\n apiKeyPath,\n ]);\n\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'deliver',\n 'download_screenshots',\n '--screenshots_path',\n screenshotsPath,\n '-f',\n '--app_identifier',\n OptionHolder.keyholderMap.ios_app_identifier,\n '--api_key_path',\n apiKeyPath,\n '--use_live_version',\n `${OptionHolder.input.useLiveVersionIos}`,\n ]);\n\n copyIosMetadata('resources', ruby.workspace);\n}\n\nasync function pullAndroidMetadata() {\n const ruby = await prepareFastlane();\n\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'supply',\n 'init',\n '--metadata_path',\n resolve(ruby.workspace, 'fastlane', 'metadata', 'android'),\n '--json_key',\n credentialKeyPath(credentialFilenames.androidServiceAccount),\n '--package_name',\n OptionHolder.keyholderMap.android_package_name,\n ]);\n\n copyAndroidMetadata('resources', ruby.workspace);\n}\n"],"mappings":";;;;;;;;;;AASA,eAAsB,KAAK,EAAE,SAA2B,EAAE;AACxD,QAAO,OAAO,aAAa,OAAO,QAAQ;AAC1C,OAAM,OAAO;AACb,OAAM,cAAc;AAEpB,KAAI,aAAa,MAAM,aAAa,MAClC,OAAM,iBAAiB;KAEvB,OAAM,qBAAqB;AAE9B;AAED,eAAe,eAAe;AAC5B,OAAM,cAAc,UAAU;AAC9B,OAAM,cAAc,mBAAmB;AACxC;AAED,eAAe,kBAAkB;CAC/B,MAAM,OAAO,MAAM,iBAAiB;CACpC,MAAM,eAAe,QAAQ,KAAK,WAAW,YAAY,WAAW;CACpE,MAAM,kBAAkB,QAAQ,KAAK,WAAW,YAAY,cAAc;CAC1E,MAAM,aAAa,mCAAmC;AACtD,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,aAAa;EAC1B;EACA;CACD,EAAC;AAEF,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,aAAa;EAC1B;EACA;EACA;GACC,EAAE,aAAa,MAAM,kBAAkB;CACzC,EAAC;AAEF,iBAAgB,aAAa,KAAK,UAAU;AAC7C;AAED,eAAe,sBAAsB;CACnC,MAAM,OAAO,MAAM,iBAAiB;AAEpC,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA,QAAQ,KAAK,WAAW,YAAY,YAAY,UAAU;EAC1D;EACA,kBAAkB,oBAAoB,sBAAsB;EAC5D;EACA,aAAa,aAAa;CAC3B,EAAC;AAEF,qBAAoB,aAAa,KAAK,UAAU;AACjD"}
1
+ {"version":3,"file":"pull-B1FwsQ16.js","names":[],"sources":["../src/command/pull.ts"],"sourcesContent":["import { credentialFilenames, credentialKeyPath } from '../util/CredentialVault';\nimport { resolve } from '../util/FileUtil';\nimport { generateAppStoreConnectApiKeyFile } from '../util/generateAppStoreConnectApiKeyFile';\nimport { InqueryInputs } from '../util/input/InqueryInputs';\nimport { copyAndroidMetadata, copyIosMetadata } from '../util/MetadataSyncUtil';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { prepareFastlane } from '../util/setup/prepareFastlane';\nimport { setup } from '../util/setup/setup';\n\nexport async function pull({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n await setup();\n await promptInputs();\n\n if (OptionHolder.input.platform === 'ios') {\n await pullIosMetadata();\n } else {\n await pullAndroidMetadata();\n }\n}\n\nasync function promptInputs() {\n await InqueryInputs.platform();\n await InqueryInputs.useLiveVersionIos();\n}\n\nasync function pullIosMetadata() {\n const ruby = await prepareFastlane();\n const metadataPath = resolve(ruby.workspace, 'fastlane', 'metadata');\n const screenshotsPath = resolve(ruby.workspace, 'fastlane', 'screenshots');\n const apiKeyPath = generateAppStoreConnectApiKeyFile();\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'deliver',\n 'download_metadata',\n '--metadata_path',\n metadataPath,\n '-f',\n '--app_identifier',\n OptionHolder.keyholderMap.ios_app_identifier,\n '--api_key_path',\n apiKeyPath,\n ]);\n\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'deliver',\n 'download_screenshots',\n '--screenshots_path',\n screenshotsPath,\n '-f',\n '--app_identifier',\n OptionHolder.keyholderMap.ios_app_identifier,\n '--api_key_path',\n apiKeyPath,\n '--use_live_version',\n `${OptionHolder.input.useLiveVersionIos}`,\n ]);\n\n copyIosMetadata('resources', ruby.workspace);\n}\n\nasync function pullAndroidMetadata() {\n const ruby = await prepareFastlane();\n\n await ruby.bundle([\n 'exec',\n 'fastlane',\n 'supply',\n 'init',\n '--metadata_path',\n resolve(ruby.workspace, 'fastlane', 'metadata', 'android'),\n '--json_key',\n credentialKeyPath(credentialFilenames.androidServiceAccount),\n '--package_name',\n OptionHolder.keyholderMap.android_package_name,\n ]);\n\n copyAndroidMetadata('resources', ruby.workspace);\n}\n"],"mappings":";;;;;;;;;;AASA,eAAsB,KAAK,EAAE,SAA2B,EAAE;AACxD,QAAO,OAAO,aAAa,OAAO,QAAQ;AAC1C,OAAM,OAAO;AACb,OAAM,cAAc;AAEpB,KAAI,aAAa,MAAM,aAAa,MAClC,OAAM,iBAAiB;KAEvB,OAAM,qBAAqB;AAE9B;AAED,eAAe,eAAe;AAC5B,OAAM,cAAc,UAAU;AAC9B,OAAM,cAAc,mBAAmB;AACxC;AAED,eAAe,kBAAkB;CAC/B,MAAM,OAAO,MAAM,iBAAiB;CACpC,MAAM,eAAe,QAAQ,KAAK,WAAW,YAAY,WAAW;CACpE,MAAM,kBAAkB,QAAQ,KAAK,WAAW,YAAY,cAAc;CAC1E,MAAM,aAAa,mCAAmC;AACtD,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,aAAa;EAC1B;EACA;CACD,EAAC;AAEF,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,aAAa;EAC1B;EACA;EACA;GACC,EAAE,aAAa,MAAM,kBAAkB;CACzC,EAAC;AAEF,iBAAgB,aAAa,KAAK,UAAU;AAC7C;AAED,eAAe,sBAAsB;CACnC,MAAM,OAAO,MAAM,iBAAiB;AAEpC,OAAM,KAAK,OAAO;EAChB;EACA;EACA;EACA;EACA;EACA,QAAQ,KAAK,WAAW,YAAY,YAAY,UAAU;EAC1D;EACA,kBAAkB,oBAAoB,sBAAsB;EAC5D;EACA,aAAa,aAAa;CAC3B,EAAC;AAEF,qBAAoB,aAAa,KAAK,UAAU;AACjD"}