expo-release-it 0.6.0 → 0.6.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 (141) hide show
  1. package/build/EnvUtil-DWWwkHaf.js +8 -0
  2. package/build/EnvUtil-DWWwkHaf.js.map +1 -0
  3. package/build/FastlaneOption-B9A0ECDL.js +35 -0
  4. package/build/FastlaneOption-B9A0ECDL.js.map +1 -0
  5. package/build/FileUtil-B9JnWobK.js +57 -0
  6. package/build/FileUtil-B9JnWobK.js.map +1 -0
  7. package/build/InqueryInputs-BGj-DlRa.js +112 -0
  8. package/build/InqueryInputs-BGj-DlRa.js.map +1 -0
  9. package/build/MetadataSyncUtil-j79hX3QT.js +42 -0
  10. package/build/MetadataSyncUtil-j79hX3QT.js.map +1 -0
  11. package/build/OptionHolder-H3HG0A95.js +99 -0
  12. package/build/OptionHolder-H3HG0A95.js.map +1 -0
  13. package/build/VersionUtil-BDB10Hpb.js +101 -0
  14. package/build/VersionUtil-BDB10Hpb.js.map +1 -0
  15. package/build/build-DLOdnj2j.js +88 -0
  16. package/build/build-DLOdnj2j.js.map +1 -0
  17. package/build/bump-0hlTovjE.js +122 -0
  18. package/build/bump-0hlTovjE.js.map +1 -0
  19. package/build/calculateElapsed-CynU9UU_.js +13 -0
  20. package/build/calculateElapsed-CynU9UU_.js.map +1 -0
  21. package/build/command/build.d.ts +7 -3
  22. package/build/command/build.js +23 -711
  23. package/build/command/bump.d.ts +7 -3
  24. package/build/command/bump.js +14 -486
  25. package/build/command/init.d.ts +7 -3
  26. package/build/command/init.js +13 -462
  27. package/build/command/pull.d.ts +7 -3
  28. package/build/command/pull.js +22 -696
  29. package/build/command/submit.d.ts +7 -3
  30. package/build/command/submit.js +23 -700
  31. package/build/command/upload.d.ts +7 -3
  32. package/build/command/upload.js +23 -705
  33. package/build/execShellScript-Bd5xbFX5.js +22 -0
  34. package/build/execShellScript-Bd5xbFX5.js.map +1 -0
  35. package/build/generateAppStoreConnectApiKeyFile-DjxlrcZn.js +18 -0
  36. package/build/generateAppStoreConnectApiKeyFile-DjxlrcZn.js.map +1 -0
  37. package/build/hydrateKeyholderFileValues-BoaRs3SC.js +11 -0
  38. package/build/hydrateKeyholderFileValues-BoaRs3SC.js.map +1 -0
  39. package/build/index.d.ts +3 -1
  40. package/build/index.js +62 -1247
  41. package/build/index.js.map +1 -1
  42. package/build/init-cjD4jZiy.js +148 -0
  43. package/build/init-cjD4jZiy.js.map +1 -0
  44. package/build/injectTemplatePlaceHolders-CpIvd0dG.js +16 -0
  45. package/build/injectTemplatePlaceHolders-CpIvd0dG.js.map +1 -0
  46. package/build/iterateAllFiles-CbEPek2B.js +15 -0
  47. package/build/iterateAllFiles-CbEPek2B.js.map +1 -0
  48. package/build/logger-DvQ7ScMQ.js +16 -0
  49. package/build/logger-DvQ7ScMQ.js.map +1 -0
  50. package/build/parseConfigFile-hMLUnLZR.js +29 -0
  51. package/build/parseConfigFile-hMLUnLZR.js.map +1 -0
  52. package/build/prepareAndroid-Cjz6r6o0.js +53 -0
  53. package/build/prepareAndroid-Cjz6r6o0.js.map +1 -0
  54. package/build/prepareIos-ByPLFHC8.js +33 -0
  55. package/build/prepareIos-ByPLFHC8.js.map +1 -0
  56. package/build/pull-BHSlClDy.js +70 -0
  57. package/build/pull-BHSlClDy.js.map +1 -0
  58. package/build/replaceStringIfNotContain-CgZ460_D.js +9 -0
  59. package/build/replaceStringIfNotContain-CgZ460_D.js.map +1 -0
  60. package/build/setup-CRNjdK5q.js +25 -0
  61. package/build/setup-CRNjdK5q.js.map +1 -0
  62. package/build/spinner-BVmbE9I_.js +15 -0
  63. package/build/spinner-BVmbE9I_.js.map +1 -0
  64. package/build/submit-5gTyWBU2.js +65 -0
  65. package/build/submit-5gTyWBU2.js.map +1 -0
  66. package/build/throwError-DMF6E5pu.js +14 -0
  67. package/build/throwError-DMF6E5pu.js.map +1 -0
  68. package/build/type/{ExpoReleaseItConfiguration.d.d.ts → ExpoReleaseItConfiguration.d.ts} +7 -5
  69. package/build/upload-S09j3abh.js +68 -0
  70. package/build/upload-S09j3abh.js.map +1 -0
  71. package/build/util/EnvUtil.d.ts +3 -1
  72. package/build/util/EnvUtil.js +3 -10
  73. package/build/util/FastlaneOption.d.ts +3 -1
  74. package/build/util/FastlaneOption.js +4 -118
  75. package/build/util/FileUtil.d.ts +4 -2
  76. package/build/util/FileUtil.js +3 -78
  77. package/build/util/MetadataSyncUtil.d.ts +3 -1
  78. package/build/util/MetadataSyncUtil.js +5 -177
  79. package/build/util/OptionHolder.d.ts +45 -43
  80. package/build/util/OptionHolder.js +3 -88
  81. package/build/util/calculateElapsed.d.ts +3 -1
  82. package/build/util/calculateElapsed.js +3 -12
  83. package/build/util/generateAppStoreConnectApiKeyFile.d.ts +3 -1
  84. package/build/util/generateAppStoreConnectApiKeyFile.js +4 -117
  85. package/build/util/injectTemplatePlaceHolders.d.ts +3 -1
  86. package/build/util/injectTemplatePlaceHolders.js +5 -137
  87. package/build/util/input/InqueryInputs.d.ts +19 -12
  88. package/build/util/input/InqueryInputs.js +4 -205
  89. package/build/util/iterateAllFiles.d.ts +3 -1
  90. package/build/util/iterateAllFiles.js +3 -34
  91. package/build/util/logger.d.ts +10 -8
  92. package/build/util/logger.js +3 -16
  93. package/build/util/parseConfigFile.d.ts +3 -1
  94. package/build/util/parseConfigFile.js +4 -151
  95. package/build/util/replaceStringIfNotContain.d.ts +5 -0
  96. package/build/util/replaceStringIfNotContain.js +3 -0
  97. package/build/util/setup/VersionUtil.d.ts +9 -4
  98. package/build/util/setup/VersionUtil.js +8 -253
  99. package/build/util/setup/execShellScript.d.ts +16 -14
  100. package/build/util/setup/execShellScript.js +3 -19
  101. package/build/util/setup/hydrateKeyholderFileValues.d.ts +3 -1
  102. package/build/util/setup/hydrateKeyholderFileValues.js +4 -101
  103. package/build/util/setup/prepareAndroid.d.ts +3 -1
  104. package/build/util/setup/prepareAndroid.js +12 -281
  105. package/build/util/setup/prepareIos.d.ts +3 -1
  106. package/build/util/setup/prepareIos.js +11 -263
  107. package/build/util/setup/setup.d.ts +3 -1
  108. package/build/util/setup/setup.js +11 -272
  109. package/build/util/spinner.d.ts +3 -1
  110. package/build/util/spinner.js +3 -14
  111. package/build/util/throwError.d.ts +3 -1
  112. package/build/util/throwError.js +4 -33
  113. package/package.json +5 -5
  114. package/build/command/build.js.map +0 -1
  115. package/build/command/bump.js.map +0 -1
  116. package/build/command/init.js.map +0 -1
  117. package/build/command/pull.js.map +0 -1
  118. package/build/command/submit.js.map +0 -1
  119. package/build/command/upload.js.map +0 -1
  120. package/build/type/ExpoReleaseItConfiguration.d.js +0 -1
  121. package/build/type/ExpoReleaseItConfiguration.d.js.map +0 -1
  122. package/build/util/EnvUtil.js.map +0 -1
  123. package/build/util/FastlaneOption.js.map +0 -1
  124. package/build/util/FileUtil.js.map +0 -1
  125. package/build/util/MetadataSyncUtil.js.map +0 -1
  126. package/build/util/OptionHolder.js.map +0 -1
  127. package/build/util/calculateElapsed.js.map +0 -1
  128. package/build/util/generateAppStoreConnectApiKeyFile.js.map +0 -1
  129. package/build/util/injectTemplatePlaceHolders.js.map +0 -1
  130. package/build/util/input/InqueryInputs.js.map +0 -1
  131. package/build/util/iterateAllFiles.js.map +0 -1
  132. package/build/util/logger.js.map +0 -1
  133. package/build/util/parseConfigFile.js.map +0 -1
  134. package/build/util/setup/VersionUtil.js.map +0 -1
  135. package/build/util/setup/execShellScript.js.map +0 -1
  136. package/build/util/setup/hydrateKeyholderFileValues.js.map +0 -1
  137. package/build/util/setup/prepareAndroid.js.map +0 -1
  138. package/build/util/setup/prepareIos.js.map +0 -1
  139. package/build/util/setup/setup.js.map +0 -1
  140. package/build/util/spinner.js.map +0 -1
  141. package/build/util/throwError.js.map +0 -1
@@ -0,0 +1,8 @@
1
+ //#region src/util/EnvUtil.ts
2
+ const isDev = process.env.NODE_ENV === "development";
3
+ const isWin = process.platform.startsWith("win");
4
+ const isTest = process.env.NODE_ENV === "test";
5
+
6
+ //#endregion
7
+ export { isDev, isTest, isWin };
8
+ //# sourceMappingURL=EnvUtil-DWWwkHaf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvUtil-DWWwkHaf.js","names":[],"sources":["../src/util/EnvUtil.ts"],"sourcesContent":["export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\nexport const isTest = process.env.NODE_ENV === 'test';\n"],"mappings":";AAAA,MAAa,QAAQ,QAAQ,IAAI,aAAa;AAC9C,MAAa,QAAQ,QAAQ,SAAS,WAAW,MAAM;AACvD,MAAa,SAAS,QAAQ,IAAI,aAAa"}
@@ -0,0 +1,35 @@
1
+ import { resolve } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-H3HG0A95.js";
3
+
4
+ //#region src/util/FastlaneOption.ts
5
+ function getAndroidFastlaneOptions() {
6
+ return [
7
+ ...Object.entries(OptionHolder.keyholderMap).map(([k, v]) => `${k}:${v}`),
8
+ `json_key:${resolve(OptionHolder.keyDir, "android_play_console_service_account.json")}`,
9
+ `version_name:${OptionHolder.versionName}`,
10
+ `version_code:${OptionHolder.versionCode}`,
11
+ `upload_metadata:${OptionHolder.input.uploadMetadata}`,
12
+ `upload_screenshot:${OptionHolder.input.uploadScreenshot}`,
13
+ `aab_path:${resolve(OptionHolder.resourcesDir, "output", "android", "aab", "app-release.aab")}`,
14
+ `apk_path:${resolve(OptionHolder.resourcesDir, "output", "android", "apk", "app-release.apk")}`,
15
+ `skip_upload_apk:${OptionHolder.input.androidOutput !== "apk"}`,
16
+ `skip_upload_aab:${OptionHolder.input.androidOutput !== "aab"}`
17
+ ];
18
+ }
19
+ function getIosFastlaneOptions() {
20
+ return [
21
+ ...Object.entries(OptionHolder.keyholderMap).map(([k, v]) => `${k}:${v}`),
22
+ `version_name:${OptionHolder.versionName}`,
23
+ `version_code:${OptionHolder.versionCode}`,
24
+ `api_key_filepath:${resolve(OptionHolder.keyDir, "ios_app_store_connect_api_key.p8")}`,
25
+ `upload_metadata:${OptionHolder.input.uploadMetadata}`,
26
+ `upload_screenshot:${OptionHolder.input.uploadScreenshot}`,
27
+ `ipa_path:${resolve(OptionHolder.resourcesDir, "output", "ios", "app.ipa")}`,
28
+ `ipa_dir:${resolve(OptionHolder.resourcesDir, "output", "ios")}`,
29
+ "ipa_name:app.ipa"
30
+ ];
31
+ }
32
+
33
+ //#endregion
34
+ export { getAndroidFastlaneOptions, getIosFastlaneOptions };
35
+ //# sourceMappingURL=FastlaneOption-B9A0ECDL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FastlaneOption-B9A0ECDL.js","names":[],"sources":["../src/util/FastlaneOption.ts"],"sourcesContent":["import { resolve } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\n\nexport function getAndroidFastlaneOptions() {\n return [\n ...Object.entries(OptionHolder.keyholderMap).map(([k, v]) => `${k}:${v}`),\n `json_key:${resolve(OptionHolder.keyDir, 'android_play_console_service_account.json')}`,\n `version_name:${OptionHolder.versionName}`,\n `version_code:${OptionHolder.versionCode}`,\n `upload_metadata:${OptionHolder.input.uploadMetadata}`,\n `upload_screenshot:${OptionHolder.input.uploadScreenshot}`,\n `aab_path:${resolve(OptionHolder.resourcesDir, 'output', 'android', 'aab', 'app-release.aab')}`,\n `apk_path:${resolve(OptionHolder.resourcesDir, 'output', 'android', 'apk', 'app-release.apk')}`,\n `skip_upload_apk:${OptionHolder.input.androidOutput !== 'apk'}`,\n `skip_upload_aab:${OptionHolder.input.androidOutput !== 'aab'}`,\n ];\n}\n\nexport function getIosFastlaneOptions() {\n return [\n ...Object.entries(OptionHolder.keyholderMap).map(([k, v]) => `${k}:${v}`),\n `version_name:${OptionHolder.versionName}`,\n `version_code:${OptionHolder.versionCode}`,\n `api_key_filepath:${resolve(OptionHolder.keyDir, 'ios_app_store_connect_api_key.p8')}`,\n `upload_metadata:${OptionHolder.input.uploadMetadata}`,\n `upload_screenshot:${OptionHolder.input.uploadScreenshot}`,\n `ipa_path:${resolve(OptionHolder.resourcesDir, 'output', 'ios', 'app.ipa')}`,\n `ipa_dir:${resolve(OptionHolder.resourcesDir, 'output', 'ios')}`,\n 'ipa_name:app.ipa',\n ];\n}\n"],"mappings":";;;;AAGA,SAAgB,4BAA4B;AAC1C,QAAO;EACL,GAAG,OAAO,QAAQ,aAAa,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;GACxE,WAAW,QAAQ,aAAa,QAAQ,4CAA4C,CAAC;GACrF,eAAe,aAAa,YAAY;GACxC,eAAe,aAAa,YAAY;GACxC,kBAAkB,aAAa,MAAM,eAAe;GACpD,oBAAoB,aAAa,MAAM,iBAAiB;GACxD,WAAW,QAAQ,aAAa,cAAc,UAAU,WAAW,OAAO,kBAAkB,CAAC;GAC7F,WAAW,QAAQ,aAAa,cAAc,UAAU,WAAW,OAAO,kBAAkB,CAAC;GAC7F,kBAAkB,aAAa,MAAM,kBAAkB,MAAM;GAC7D,kBAAkB,aAAa,MAAM,kBAAkB,MAAM;CAC/D;AACF;AAED,SAAgB,wBAAwB;AACtC,QAAO;EACL,GAAG,OAAO,QAAQ,aAAa,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;GACxE,eAAe,aAAa,YAAY;GACxC,eAAe,aAAa,YAAY;GACxC,mBAAmB,QAAQ,aAAa,QAAQ,mCAAmC,CAAC;GACpF,kBAAkB,aAAa,MAAM,eAAe;GACpD,oBAAoB,aAAa,MAAM,iBAAiB;GACxD,WAAW,QAAQ,aAAa,cAAc,UAAU,OAAO,UAAU,CAAC;GAC1E,UAAU,QAAQ,aAAa,cAAc,UAAU,MAAM,CAAC;EAC/D;CACD;AACF"}
@@ -0,0 +1,57 @@
1
+ import * as path from "node:path";
2
+ import fs from "fs-extra";
3
+
4
+ //#region src/util/FileUtil.ts
5
+ const join = path.join;
6
+ const resolve = path.resolve;
7
+ function exist(path$1) {
8
+ return fs.existsSync(path$1);
9
+ }
10
+ function isDir(path$1) {
11
+ return exist(path$1) && fs.lstatSync(path$1).isDirectory();
12
+ }
13
+ function relativePath(from, to) {
14
+ return path.relative(from, to);
15
+ }
16
+ function isFile(path$1) {
17
+ return exist(path$1) && fs.lstatSync(path$1).isFile();
18
+ }
19
+ function read(path$1) {
20
+ return fs.readFileSync(path$1, { encoding: "utf8" });
21
+ }
22
+ function readdir(path$1) {
23
+ return fs.readdirSync(path$1);
24
+ }
25
+ function readJsonSlow(path$1) {
26
+ return fs.readJSONSync(path$1);
27
+ }
28
+ function write(p, content) {
29
+ const dir = path.dirname(p);
30
+ if (!exist(dir)) fs.mkdirSync(dir, { recursive: true });
31
+ return fs.writeFileSync(p, content);
32
+ }
33
+ function copy(src, dest, options) {
34
+ fs.copySync(src, dest, options);
35
+ }
36
+ function move(src, dest, options) {
37
+ fs.moveSync(src, dest, options);
38
+ }
39
+ function writeJson(path$1, json) {
40
+ return write(path$1, JSON.stringify(json, null, 2));
41
+ }
42
+ function remove(path$1) {
43
+ if (!exist(path$1)) return;
44
+ if (fs.lstatSync(path$1).isDirectory()) return fs.rmSync(path$1, {
45
+ force: true,
46
+ recursive: true
47
+ });
48
+ else return fs.rmSync(path$1, { force: true });
49
+ }
50
+ async function iterateDir(path$1, fn) {
51
+ if (!isDir(path$1)) return;
52
+ for (const file of fs.readdirSync(path$1)) await fn(file);
53
+ }
54
+
55
+ //#endregion
56
+ export { copy, exist, isDir, isFile, iterateDir, join, move, read, readJsonSlow, readdir, relativePath, remove, resolve, write, writeJson };
57
+ //# sourceMappingURL=FileUtil-B9JnWobK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUtil-B9JnWobK.js","names":["path: string","path","from: string","to: string","p: string","content: string","src: string","dest: string","options?: fs.CopyOptionsSync","options?: fs.MoveOptions","json: any","fn: (file: string) => Promise<void> | void"],"sources":["../src/util/FileUtil.ts"],"sourcesContent":["import * as path from 'node:path';\nimport fs from 'fs-extra';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\nexport function move(src: string, dest: string, options?: fs.MoveOptions) {\n fs.moveSync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n"],"mappings":";;;;AAGA,MAAa,OAAO,KAAK;AACzB,MAAa,UAAU,KAAK;AAE5B,SAAgB,MAAMA,QAAc;AAClC,QAAO,GAAG,WAAWC,OAAK;AAC3B;AAED,SAAgB,MAAMD,QAAc;AAClC,QAAO,MAAMC,OAAK,IAAI,GAAG,UAAUA,OAAK,CAAC,aAAa;AACvD;AAED,SAAgB,aAAaC,MAAcC,IAAY;AACrD,QAAO,KAAK,SAAS,MAAM,GAAG;AAC/B;AAED,SAAgB,OAAOH,QAAc;AACnC,QAAO,MAAMC,OAAK,IAAI,GAAG,UAAUA,OAAK,CAAC,QAAQ;AAClD;AAED,SAAgB,KAAKD,QAAc;AACjC,QAAO,GAAG,aAAaC,QAAM,EAAE,UAAU,OAAQ,EAAC;AACnD;AAED,SAAgB,QAAQD,QAAc;AACpC,QAAO,GAAG,YAAYC,OAAK;AAC5B;AAGD,SAAgB,aAAaD,QAAc;AACzC,QAAO,GAAG,aAAaC,OAAK;AAC7B;AAED,SAAgB,MAAMG,GAAWC,SAAiB;CAChD,MAAM,MAAM,KAAK,QAAQ,EAAE;AAC3B,MAAK,MAAM,IAAI,CACb,IAAG,UAAU,KAAK,EAAE,WAAW,KAAM,EAAC;AAGxC,QAAO,GAAG,cAAc,GAAG,QAAQ;AACpC;AACD,SAAgB,KAAKC,KAAaC,MAAcC,SAA8B;AAC5E,IAAG,SAAS,KAAK,MAAM,QAAQ;AAChC;AACD,SAAgB,KAAKF,KAAaC,MAAcE,SAA0B;AACxE,IAAG,SAAS,KAAK,MAAM,QAAQ;AAChC;AAED,SAAgB,UAAUT,QAAcU,MAAW;AACjD,QAAO,MAAMT,QAAM,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AAClD;AAED,SAAgB,OAAOD,QAAc;AACnC,MAAK,MAAMC,OAAK,CACd;AAGF,KAAI,GAAG,UAAUA,OAAK,CAAC,aAAa,CAClC,QAAO,GAAG,OAAOA,QAAM;EAAE,OAAO;EAAM,WAAW;CAAM,EAAC;KAExD,QAAO,GAAG,OAAOA,QAAM,EAAE,OAAO,KAAM,EAAC;AAE1C;AAED,eAAsB,WAAWD,QAAcW,IAA4C;AACzF,MAAK,MAAMV,OAAK,CACd;AAGF,MAAK,MAAM,QAAQ,GAAG,YAAYA,OAAK,CACrC,OAAM,GAAG,KAAK;AAEjB"}
@@ -0,0 +1,112 @@
1
+ import { OptionHolder } from "./OptionHolder-H3HG0A95.js";
2
+ import chalk from "chalk";
3
+ import { is } from "@mj-studio/js-util";
4
+ import { select } from "@inquirer/prompts";
5
+
6
+ //#region src/util/input/InqueryInputs.ts
7
+ const InqueryInputs = {
8
+ platform: async () => {
9
+ if (!OptionHolder.input.platform) OptionHolder.input.platform = await select({
10
+ message: constructInquirerFormattedMessage({
11
+ name: "Platform",
12
+ explanation: "Platform to run action"
13
+ }),
14
+ choices: [{
15
+ name: "ios",
16
+ value: "ios",
17
+ description: "Release ios"
18
+ }, {
19
+ name: "android",
20
+ value: "android",
21
+ description: "Release android"
22
+ }]
23
+ });
24
+ },
25
+ podinstall: async () => {
26
+ if (OptionHolder.input.platform === "ios" && !is.boolean(OptionHolder.input.pod)) OptionHolder.input.pod = await select({
27
+ message: constructInquirerFormattedMessage({ name: "Install CocoaPods?" }),
28
+ choices: [{
29
+ name: "yes",
30
+ value: true,
31
+ description: "Install pods before release"
32
+ }, {
33
+ name: "no",
34
+ value: false,
35
+ description: "Skip pods install"
36
+ }]
37
+ });
38
+ },
39
+ androidBuildOutput: async () => {
40
+ if (OptionHolder.input.platform === "android") {
41
+ if (!OptionHolder.input.androidOutput) OptionHolder.input.androidOutput = await select({
42
+ message: constructInquirerFormattedMessage({ name: "Android output artifact type" }),
43
+ choices: [{
44
+ name: "aab",
45
+ value: "aab",
46
+ description: "Build as App bundle"
47
+ }, {
48
+ name: "apk",
49
+ value: "apk",
50
+ description: "Build as APK"
51
+ }]
52
+ });
53
+ }
54
+ },
55
+ uploadMetadata: async () => {
56
+ if (!is.boolean(OptionHolder.input.uploadMetadata)) OptionHolder.input.uploadMetadata = await select({
57
+ message: constructInquirerFormattedMessage({ name: "Upload Text Metadata(title, description, ...)" }),
58
+ choices: [{
59
+ name: "yes",
60
+ value: true,
61
+ description: "Upload"
62
+ }, {
63
+ name: "no",
64
+ value: false,
65
+ description: "Don't Upload"
66
+ }]
67
+ });
68
+ },
69
+ uploadScreenshot: async () => {
70
+ if (!is.boolean(OptionHolder.input.uploadScreenshot)) OptionHolder.input.uploadScreenshot = await select({
71
+ message: constructInquirerFormattedMessage({ name: "Upload Screenshots & Images" }),
72
+ choices: [{
73
+ name: "yes",
74
+ value: true,
75
+ description: "Upload"
76
+ }, {
77
+ name: "no",
78
+ value: false,
79
+ description: "Don't Upload"
80
+ }]
81
+ });
82
+ },
83
+ useLiveVersionIos: async () => {
84
+ if (!is.boolean(OptionHolder.input.useLiveVersionIos) && OptionHolder.input.platform === "ios") OptionHolder.input.useLiveVersionIos = await select({
85
+ message: constructInquirerFormattedMessage({ name: "Download metadatas from live version rather than draft" }),
86
+ choices: [{
87
+ name: "yes",
88
+ value: true,
89
+ description: "Download from live version"
90
+ }, {
91
+ name: "no",
92
+ value: false,
93
+ description: "Download from draft"
94
+ }]
95
+ });
96
+ }
97
+ };
98
+ function constructInquirerFormattedMessage({ example, explanation, referUrl, name }) {
99
+ let ret = `${chalk.bold(name)}`;
100
+ if (explanation) ret += `\n\n${chalk.italic.blue(explanation)}`;
101
+ if (example) ret += `\n${chalk.italic(`${chalk.greenBright("example :")} ${example}`)}`;
102
+ if (referUrl) ret += `\n${chalk.italic(`${chalk.greenBright("references :")} ${chalk.underline.blue(referUrl)}`)}`;
103
+ if (explanation) {
104
+ ret += "\n";
105
+ if (example || referUrl) ret += "\n";
106
+ }
107
+ return ret;
108
+ }
109
+
110
+ //#endregion
111
+ export { InqueryInputs, constructInquirerFormattedMessage };
112
+ //# sourceMappingURL=InqueryInputs-BGj-DlRa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InqueryInputs-BGj-DlRa.js","names":[],"sources":["../src/util/input/InqueryInputs.ts"],"sourcesContent":["import { select } from '@inquirer/prompts';\nimport { is } from '@mj-studio/js-util';\nimport chalk from 'chalk';\nimport { OptionHolder } from '../OptionHolder';\n\nexport const InqueryInputs = {\n platform: async () => {\n if (!OptionHolder.input.platform) {\n OptionHolder.input.platform = await select({\n message: constructInquirerFormattedMessage({\n name: 'Platform',\n explanation: 'Platform to run action',\n }),\n choices: [\n { name: 'ios', value: 'ios', description: 'Release ios' },\n { name: 'android', value: 'android', description: 'Release android' },\n ],\n });\n }\n },\n podinstall: async () => {\n if (OptionHolder.input.platform === 'ios' && !is.boolean(OptionHolder.input.pod)) {\n OptionHolder.input.pod = await select({\n message: constructInquirerFormattedMessage({\n name: 'Install CocoaPods?',\n }),\n choices: [\n { name: 'yes', value: true, description: 'Install pods before release' },\n { name: 'no', value: false, description: 'Skip pods install' },\n ],\n });\n }\n },\n androidBuildOutput: async () => {\n if (OptionHolder.input.platform === 'android') {\n if (!OptionHolder.input.androidOutput) {\n OptionHolder.input.androidOutput = await select({\n message: constructInquirerFormattedMessage({\n name: 'Android output artifact type',\n }),\n choices: [\n { name: 'aab', value: 'aab', description: 'Build as App bundle' },\n { name: 'apk', value: 'apk', description: 'Build as APK' },\n ],\n });\n }\n }\n },\n uploadMetadata: async () => {\n if (!is.boolean(OptionHolder.input.uploadMetadata)) {\n OptionHolder.input.uploadMetadata = await select({\n message: constructInquirerFormattedMessage({\n name: 'Upload Text Metadata(title, description, ...)',\n }),\n choices: [\n { name: 'yes', value: true, description: 'Upload' },\n { name: 'no', value: false, description: \"Don't Upload\" },\n ],\n });\n }\n },\n uploadScreenshot: async () => {\n if (!is.boolean(OptionHolder.input.uploadScreenshot)) {\n OptionHolder.input.uploadScreenshot = await select({\n message: constructInquirerFormattedMessage({\n name: 'Upload Screenshots & Images',\n }),\n choices: [\n { name: 'yes', value: true, description: 'Upload' },\n { name: 'no', value: false, description: \"Don't Upload\" },\n ],\n });\n }\n },\n useLiveVersionIos: async () => {\n if (\n !is.boolean(OptionHolder.input.useLiveVersionIos) &&\n OptionHolder.input.platform === 'ios'\n ) {\n OptionHolder.input.useLiveVersionIos = await select({\n message: constructInquirerFormattedMessage({\n name: 'Download metadatas from live version rather than draft',\n }),\n choices: [\n { name: 'yes', value: true, description: 'Download from live version' },\n { name: 'no', value: false, description: 'Download from draft' },\n ],\n });\n }\n },\n};\n\nexport function constructInquirerFormattedMessage({\n example,\n explanation,\n referUrl,\n name,\n}: {\n name: string;\n explanation?: string;\n example?: string;\n referUrl?: string;\n}) {\n let ret = `${chalk.bold(name)}`;\n if (explanation) {\n ret += `\\n\\n${chalk.italic.blue(explanation)}`;\n }\n if (example) {\n ret += `\\n${chalk.italic(`${chalk.greenBright('example :')} ${example}`)}`;\n }\n if (referUrl) {\n ret += `\\n${chalk.italic(`${chalk.greenBright('references :')} ${chalk.underline.blue(referUrl)}`)}`;\n }\n\n if (explanation) {\n ret += '\\n';\n if (example || referUrl) {\n ret += '\\n';\n }\n }\n\n return ret;\n}\n"],"mappings":";;;;;;AAKA,MAAa,gBAAgB;CAC3B,UAAU,YAAY;AACpB,OAAK,aAAa,MAAM,SACtB,cAAa,MAAM,WAAW,MAAM,OAAO;GACzC,SAAS,kCAAkC;IACzC,MAAM;IACN,aAAa;GACd,EAAC;GACF,SAAS,CACP;IAAE,MAAM;IAAO,OAAO;IAAO,aAAa;GAAe,GACzD;IAAE,MAAM;IAAW,OAAO;IAAW,aAAa;GAAmB,CACtE;EACF,EAAC;CAEL;CACD,YAAY,YAAY;AACtB,MAAI,aAAa,MAAM,aAAa,UAAU,GAAG,QAAQ,aAAa,MAAM,IAAI,CAC9E,cAAa,MAAM,MAAM,MAAM,OAAO;GACpC,SAAS,kCAAkC,EACzC,MAAM,qBACP,EAAC;GACF,SAAS,CACP;IAAE,MAAM;IAAO,OAAO;IAAM,aAAa;GAA+B,GACxE;IAAE,MAAM;IAAM,OAAO;IAAO,aAAa;GAAqB,CAC/D;EACF,EAAC;CAEL;CACD,oBAAoB,YAAY;AAC9B,MAAI,aAAa,MAAM,aAAa,WAClC;QAAK,aAAa,MAAM,cACtB,cAAa,MAAM,gBAAgB,MAAM,OAAO;IAC9C,SAAS,kCAAkC,EACzC,MAAM,+BACP,EAAC;IACF,SAAS,CACP;KAAE,MAAM;KAAO,OAAO;KAAO,aAAa;IAAuB,GACjE;KAAE,MAAM;KAAO,OAAO;KAAO,aAAa;IAAgB,CAC3D;GACF,EAAC;EACH;CAEJ;CACD,gBAAgB,YAAY;AAC1B,OAAK,GAAG,QAAQ,aAAa,MAAM,eAAe,CAChD,cAAa,MAAM,iBAAiB,MAAM,OAAO;GAC/C,SAAS,kCAAkC,EACzC,MAAM,gDACP,EAAC;GACF,SAAS,CACP;IAAE,MAAM;IAAO,OAAO;IAAM,aAAa;GAAU,GACnD;IAAE,MAAM;IAAM,OAAO;IAAO,aAAa;GAAgB,CAC1D;EACF,EAAC;CAEL;CACD,kBAAkB,YAAY;AAC5B,OAAK,GAAG,QAAQ,aAAa,MAAM,iBAAiB,CAClD,cAAa,MAAM,mBAAmB,MAAM,OAAO;GACjD,SAAS,kCAAkC,EACzC,MAAM,8BACP,EAAC;GACF,SAAS,CACP;IAAE,MAAM;IAAO,OAAO;IAAM,aAAa;GAAU,GACnD;IAAE,MAAM;IAAM,OAAO;IAAO,aAAa;GAAgB,CAC1D;EACF,EAAC;CAEL;CACD,mBAAmB,YAAY;AAC7B,OACG,GAAG,QAAQ,aAAa,MAAM,kBAAkB,IACjD,aAAa,MAAM,aAAa,MAEhC,cAAa,MAAM,oBAAoB,MAAM,OAAO;GAClD,SAAS,kCAAkC,EACzC,MAAM,yDACP,EAAC;GACF,SAAS,CACP;IAAE,MAAM;IAAO,OAAO;IAAM,aAAa;GAA8B,GACvE;IAAE,MAAM;IAAM,OAAO;IAAO,aAAa;GAAuB,CACjE;EACF,EAAC;CAEL;AACF;AAED,SAAgB,kCAAkC,EAChD,SACA,aACA,UACA,MAMD,EAAE;CACD,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC;AAC9B,KAAI,YACF,SAAQ,MAAM,MAAM,OAAO,KAAK,YAAY,CAAC;AAE/C,KAAI,QACF,SAAQ,IAAI,MAAM,QAAQ,EAAE,MAAM,YAAY,eAAe,CAAC,GAAG,QAAQ,EAAE,CAAC;AAE9E,KAAI,SACF,SAAQ,IAAI,MAAM,QAAQ,EAAE,MAAM,YAAY,eAAe,CAAC,GAAG,MAAM,UAAU,KAAK,SAAS,CAAC,EAAE,CAAC;AAGrG,KAAI,aAAa;AACf,SAAO;AACP,MAAI,WAAW,SACb,QAAO;CAEV;AAED,QAAO;AACR"}
@@ -0,0 +1,42 @@
1
+ import { copy, exist, join, relativePath } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-H3HG0A95.js";
3
+ import { logger } from "./logger-DvQ7ScMQ.js";
4
+ import chalk from "chalk";
5
+
6
+ //#region src/util/MetadataSyncUtil.ts
7
+ function copyIosMetadata(to) {
8
+ const iosDir = join(OptionHolder.projectDir, "ios");
9
+ const nativeDir = join(iosDir, "fastlane");
10
+ const metadataNativeDir = join(nativeDir, "metadata");
11
+ const screenshotsNativeDir = join(nativeDir, "screenshots");
12
+ const resourcesDir = join(OptionHolder.resourcesDir, "metadata/ios");
13
+ const metadataResourcesDir = join(resourcesDir, "metadata");
14
+ const screenshotsResourcesDir = join(resourcesDir, "screenshots");
15
+ if (to === "resources") if (exist(metadataNativeDir) && exist(screenshotsNativeDir)) {
16
+ copy(metadataNativeDir, metadataResourcesDir);
17
+ copy(screenshotsNativeDir, screenshotsResourcesDir);
18
+ logger.done(`iOS Metadata saved in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}. You can edit inside contents.`);
19
+ } else logger.warn(`iOS Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`);
20
+ else if (exist(metadataResourcesDir) && exist(screenshotsResourcesDir)) {
21
+ copy(metadataResourcesDir, metadataNativeDir);
22
+ copy(screenshotsResourcesDir, screenshotsNativeDir);
23
+ logger.done(`iOS Metadata copyed to ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`);
24
+ } else logger.warn(`iOS Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}`);
25
+ }
26
+ function copyAndroidMetadata(to) {
27
+ const androidDir = join(OptionHolder.projectDir, "android");
28
+ const nativeDir = join(androidDir, "fastlane/metadata/android");
29
+ const resourcesDir = join(OptionHolder.resourcesDir, "metadata/android");
30
+ if (to === "resouces") if (exist(nativeDir)) {
31
+ copy(nativeDir, resourcesDir);
32
+ logger.done(`Android Metadata saved in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}. You can edit inside contents.`);
33
+ } else logger.warn(`Android Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`);
34
+ else if (exist(resourcesDir)) {
35
+ copy(resourcesDir, nativeDir);
36
+ logger.done(`Android Metadata copyed to ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`);
37
+ } else logger.warn(`Android Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}`);
38
+ }
39
+
40
+ //#endregion
41
+ export { copyAndroidMetadata, copyIosMetadata };
42
+ //# sourceMappingURL=MetadataSyncUtil-j79hX3QT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetadataSyncUtil-j79hX3QT.js","names":["to: 'resources' | 'native'","to: 'resouces' | 'native'"],"sources":["../src/util/MetadataSyncUtil.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { copy, exist, join, relativePath } from './FileUtil';\nimport { OptionHolder } from './OptionHolder';\nimport { logger } from './logger';\n\nexport function copyIosMetadata(to: 'resources' | 'native') {\n const iosDir = join(OptionHolder.projectDir, 'ios');\n\n const nativeDir = join(iosDir, 'fastlane');\n const metadataNativeDir = join(nativeDir, 'metadata');\n const screenshotsNativeDir = join(nativeDir, 'screenshots');\n\n const resourcesDir = join(OptionHolder.resourcesDir, 'metadata/ios');\n const metadataResourcesDir = join(resourcesDir, 'metadata');\n const screenshotsResourcesDir = join(resourcesDir, 'screenshots');\n\n if (to === 'resources') {\n if (exist(metadataNativeDir) && exist(screenshotsNativeDir)) {\n copy(metadataNativeDir, metadataResourcesDir);\n copy(screenshotsNativeDir, screenshotsResourcesDir);\n\n logger.done(\n `iOS Metadata saved in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}. You can edit inside contents.`,\n );\n } else {\n logger.warn(\n `iOS Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`,\n );\n }\n } else {\n if (exist(metadataResourcesDir) && exist(screenshotsResourcesDir)) {\n copy(metadataResourcesDir, metadataNativeDir);\n copy(screenshotsResourcesDir, screenshotsNativeDir);\n\n logger.done(\n `iOS Metadata copyed to ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`,\n );\n } else {\n logger.warn(\n `iOS Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}`,\n );\n }\n }\n}\n\nexport function copyAndroidMetadata(to: 'resouces' | 'native') {\n const androidDir = join(OptionHolder.projectDir, 'android');\n\n const nativeDir = join(androidDir, 'fastlane/metadata/android');\n const resourcesDir = join(OptionHolder.resourcesDir, 'metadata/android');\n\n if (to === 'resouces') {\n if (exist(nativeDir)) {\n copy(nativeDir, resourcesDir);\n logger.done(\n `Android Metadata saved in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}. You can edit inside contents.`,\n );\n } else {\n logger.warn(\n `Android Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`,\n );\n }\n } else {\n if (exist(resourcesDir)) {\n copy(resourcesDir, nativeDir);\n logger.done(\n `Android Metadata copyed to ${chalk.inverse(relativePath(OptionHolder.projectDir, nativeDir))}`,\n );\n } else {\n logger.warn(\n `Android Metadata not found in ${chalk.inverse(relativePath(OptionHolder.projectDir, resourcesDir))}`,\n );\n }\n }\n}\n"],"mappings":";;;;;;AAKA,SAAgB,gBAAgBA,IAA4B;CAC1D,MAAM,SAAS,KAAK,aAAa,YAAY,MAAM;CAEnD,MAAM,YAAY,KAAK,QAAQ,WAAW;CAC1C,MAAM,oBAAoB,KAAK,WAAW,WAAW;CACrD,MAAM,uBAAuB,KAAK,WAAW,cAAc;CAE3D,MAAM,eAAe,KAAK,aAAa,cAAc,eAAe;CACpE,MAAM,uBAAuB,KAAK,cAAc,WAAW;CAC3D,MAAM,0BAA0B,KAAK,cAAc,cAAc;AAEjE,KAAI,OAAO,YACT,KAAI,MAAM,kBAAkB,IAAI,MAAM,qBAAqB,EAAE;AAC3D,OAAK,mBAAmB,qBAAqB;AAC7C,OAAK,sBAAsB,wBAAwB;AAEnD,SAAO,MACJ,wBAAwB,MAAM,QAAQ,aAAa,aAAa,YAAY,aAAa,CAAC,CAAC,iCAC7F;CACF,MACC,QAAO,MACJ,4BAA4B,MAAM,QAAQ,aAAa,aAAa,YAAY,UAAU,CAAC,CAAC,EAC9F;UAGC,MAAM,qBAAqB,IAAI,MAAM,wBAAwB,EAAE;AACjE,OAAK,sBAAsB,kBAAkB;AAC7C,OAAK,yBAAyB,qBAAqB;AAEnD,SAAO,MACJ,yBAAyB,MAAM,QAAQ,aAAa,aAAa,YAAY,UAAU,CAAC,CAAC,EAC3F;CACF,MACC,QAAO,MACJ,4BAA4B,MAAM,QAAQ,aAAa,aAAa,YAAY,aAAa,CAAC,CAAC,EACjG;AAGN;AAED,SAAgB,oBAAoBC,IAA2B;CAC7D,MAAM,aAAa,KAAK,aAAa,YAAY,UAAU;CAE3D,MAAM,YAAY,KAAK,YAAY,4BAA4B;CAC/D,MAAM,eAAe,KAAK,aAAa,cAAc,mBAAmB;AAExE,KAAI,OAAO,WACT,KAAI,MAAM,UAAU,EAAE;AACpB,OAAK,WAAW,aAAa;AAC7B,SAAO,MACJ,4BAA4B,MAAM,QAAQ,aAAa,aAAa,YAAY,aAAa,CAAC,CAAC,iCACjG;CACF,MACC,QAAO,MACJ,gCAAgC,MAAM,QAAQ,aAAa,aAAa,YAAY,UAAU,CAAC,CAAC,EAClG;UAGC,MAAM,aAAa,EAAE;AACvB,OAAK,cAAc,UAAU;AAC7B,SAAO,MACJ,6BAA6B,MAAM,QAAQ,aAAa,aAAa,YAAY,UAAU,CAAC,CAAC,EAC/F;CACF,MACC,QAAO,MACJ,gCAAgC,MAAM,QAAQ,aAAa,aAAa,YAAY,aAAa,CAAC,CAAC,EACrG;AAGN"}
@@ -0,0 +1,99 @@
1
+ import { resolve } from "./FileUtil-B9JnWobK.js";
2
+ import { fileURLToPath } from "url";
3
+
4
+ //#region package.json
5
+ var name = "expo-release-it";
6
+ var module = "src/index.ts";
7
+ var type = "module";
8
+ var version = "0.6.1";
9
+ var license = "MIT";
10
+ var homepage = "https://expo-release-it.mjstudio.net/";
11
+ var repository = "https://github.com/mym0404/expo-release-it";
12
+ var scripts = {
13
+ "build": "pnpm build:json-schema-type && tsdown",
14
+ "build:json-schema-type": "json2ts --input expo-release-it.schema.json --output src/type/ExpoReleaseItConfiguration.d.ts && biome check --fix src/type/ExpoReleaseItConfiguration.d.ts",
15
+ "dev": "pnpm build && NODE_ENV=development node bin/expo-release-it.mjs",
16
+ "release": "pnpm build && pnpm run t && release-it && pnpm publish",
17
+ "t": "lefthook run check"
18
+ };
19
+ var dependencies = {
20
+ "@inquirer/prompts": "^7.4.1",
21
+ "@mj-studio/js-util": "^1.1.20",
22
+ "chalk": "^5.4.1",
23
+ "commander": "^13.1.0",
24
+ "execa": "^9.5.2",
25
+ "fs-extra": "^11.3.0",
26
+ "ora": "^8.2.0",
27
+ "react": "catalog:native",
28
+ "react-native": "catalog:native",
29
+ "semver": "^7.7.1",
30
+ "url": "^0.11.4"
31
+ };
32
+ var devDependencies = {
33
+ "@biomejs/biome": "1.9.4",
34
+ "@commitlint/config-conventional": "^19.8.0",
35
+ "@release-it/conventional-changelog": "^10.0.1",
36
+ "@types/fs-extra": "^11.0.4",
37
+ "@types/semver": "^7.7.0",
38
+ "json-schema-to-typescript": "^15.0.4",
39
+ "lefthook": "^1.11.11",
40
+ "release-it": "^19.0.1",
41
+ "tiny-glob": "^0.2.9",
42
+ "tsdown": "^0.12.7",
43
+ "typescript": "catalog:",
44
+ "vitest": "^3.1.2"
45
+ };
46
+ var bin = "./bin/expo-release-it.mjs";
47
+ var files = [
48
+ "build",
49
+ "package.json",
50
+ "bin",
51
+ "template",
52
+ "expo-release-it.schema.json"
53
+ ];
54
+ var commitlint = { "extends": ["@commitlint/config-conventional"] };
55
+ var packageManager = "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39";
56
+ var package_default = {
57
+ name,
58
+ module,
59
+ type,
60
+ version,
61
+ license,
62
+ homepage,
63
+ repository,
64
+ scripts,
65
+ dependencies,
66
+ devDependencies,
67
+ bin,
68
+ files,
69
+ commitlint,
70
+ packageManager
71
+ };
72
+
73
+ //#endregion
74
+ //#region src/util/OptionHolder.ts
75
+ /**
76
+ * CLI Comprehensive options
77
+ * Each values can be empty by command and timing.
78
+ */
79
+ const OptionHolder = {
80
+ cli: {
81
+ version: package_default.version,
82
+ rootDir: resolve(fileURLToPath(import.meta.url), "../.."),
83
+ templateDir: resolve(fileURLToPath(import.meta.url), "../../template")
84
+ },
85
+ input: { git: {} },
86
+ keyholderMap: {},
87
+ templateDirNames: ["key"],
88
+ projectDir: "",
89
+ resourcesDir: "",
90
+ keyDir: "",
91
+ keyholderFilePath: "",
92
+ versionName: "",
93
+ versionCode: "",
94
+ tempDir: ""
95
+ };
96
+
97
+ //#endregion
98
+ export { OptionHolder };
99
+ //# sourceMappingURL=OptionHolder-H3HG0A95.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionHolder-H3HG0A95.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 pod: boolean;\n useLiveVersionIos: boolean;\n semverIncrement: 'major' | 'minor' | 'patch';\n config?: 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_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n 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 \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.6.1\",\n \"license\": \"MIT\",\n \"homepage\": \"https://expo-release-it.mjstudio.net/\",\n \"repository\": \"https://github.com/mym0404/expo-release-it\",\n \"scripts\": {\n \"build\": \"pnpm build:json-schema-type && tsdown\",\n \"build:json-schema-type\": \"json2ts --input expo-release-it.schema.json --output src/type/ExpoReleaseItConfiguration.d.ts && biome check --fix 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 && release-it && pnpm publish\",\n \"t\": \"lefthook run check\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"execa\": \"^9.5.2\",\n \"fs-extra\": \"^11.3.0\",\n \"ora\": \"^8.2.0\",\n \"react\": \"catalog:native\",\n \"react-native\": \"catalog:native\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\"\n },\n \"devDependencies\": {\n \"@biomejs/biome\": \"1.9.4\",\n \"@commitlint/config-conventional\": \"^19.8.0\",\n \"@release-it/conventional-changelog\": \"^10.0.1\",\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 \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsdown\": \"^0.12.7\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"^3.1.2\"\n },\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 \"commitlint\": {\n \"extends\": [\n \"@commitlint/config-conventional\"\n ]\n },\n \"packageManager\": \"pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39\"\n}\n","import { fileURLToPath } from 'url';\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 pod: boolean;\n useLiveVersionIos: boolean;\n semverIncrement: 'major' | 'minor' | 'patch';\n config?: 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_xcode_project_target: string;\n ios_match_password: string;\n\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n android_package_name: string;\n };\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n 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 templateDirNames: ['key'],\n projectDir: '',\n resourcesDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n tempDir: '',\n};\n"],"mappings":";;;;WACU;aACE;WACF;cACG;cACA;eACC;iBACE;cACH;CACT,SAAS;CACT,0BAA0B;CAC1B,OAAO;CACP,WAAW;CACX,KAAK;AACN;mBACe;CACd,qBAAqB;CACrB,sBAAsB;CACtB,SAAS;CACT,aAAa;CACb,SAAS;CACT,YAAY;CACZ,OAAO;CACP,SAAS;CACT,gBAAgB;CAChB,UAAU;CACV,OAAO;AACR;sBACkB;CACjB,kBAAkB;CAClB,mCAAmC;CACnC,sCAAsC;CACtC,mBAAmB;CACnB,iBAAiB;CACjB,6BAA6B;CAC7B,YAAY;CACZ,cAAc;CACd,aAAa;CACb,UAAU;CACV,cAAc;CACd,UAAU;AACX;UACM;YACE;CACP;CACA;CACA;CACA;CACA;AACD;iBACa,EACZ,WAAW,CACT,iCACD,EACF;qBACiB;sBAvDpB;;;;;;;;;;;;;;;AAwDC;;;;;;;;AChDD,MAAaA,eAmDT;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,kBAAkB,CAAC,KAAM;CACzB,YAAY;CACZ,cAAc;CACd,QAAQ;CACR,mBAAmB;CACnB,aAAa;CACb,aAAa;CACb,SAAS;AACV"}
@@ -0,0 +1,101 @@
1
+ import { read, readJsonSlow, readdir, resolve, write, writeJson } from "./FileUtil-B9JnWobK.js";
2
+ import { OptionHolder } from "./OptionHolder-H3HG0A95.js";
3
+ import { throwError } from "./throwError-DMF6E5pu.js";
4
+ import { padZero } from "@mj-studio/js-util";
5
+ import semver from "semver";
6
+
7
+ //#region src/util/setup/VersionUtil.ts
8
+ const versionNameRegex = () => /const\s+VERSION_NAME\s*?=\s*?['"]([\d\.]*?)['"]\s*?;?/;
9
+ const versionCodeRegex = () => /const\s+VERSION_CODE\s*?=\s*?(\d+)\s*?;?/;
10
+ async function parseBinaryVersions() {
11
+ const files = readdir(OptionHolder.projectDir);
12
+ const jsConfigFiles = [
13
+ "app.config.ts",
14
+ "app.config.js",
15
+ "app.config.cjs",
16
+ "app.config.mjs"
17
+ ];
18
+ const jsonConfigFile = "app.json";
19
+ for (const jsConfigFile of jsConfigFiles) if (files.includes(jsConfigFile)) {
20
+ await parseFromJsConfigFile(jsConfigFile);
21
+ return;
22
+ }
23
+ if (files.includes(jsonConfigFile)) {
24
+ await parseFromJsonConfigFile(jsonConfigFile);
25
+ return;
26
+ }
27
+ throwError("expo config file not found");
28
+ async function parseFromJsConfigFile(filename) {
29
+ const filePath = resolve(OptionHolder.projectDir, filename);
30
+ const content = read(filePath);
31
+ const VERSION_NAME = versionNameRegex().exec(content)?.[1];
32
+ const VERSION_CODE = versionCodeRegex().exec(content)?.[1];
33
+ if (!VERSION_NAME) throwError("cannot parse version name");
34
+ if (!VERSION_CODE) throwError("cannot parse version code");
35
+ if (!semver.valid(VERSION_NAME)) throwError("VERSION_NAME is not a valid semver format");
36
+ OptionHolder.versionName = VERSION_NAME;
37
+ OptionHolder.versionCode = VERSION_CODE;
38
+ }
39
+ async function parseFromJsonConfigFile(filename) {
40
+ const filePath = resolve(OptionHolder.projectDir, filename);
41
+ const json = readJsonSlow(filePath);
42
+ const versionName = `${json.expo?.version}`;
43
+ const iosVersionCode = `${json.expo?.ios?.buildNumber}`;
44
+ const androidVersionCode = `${json.expo?.android?.versionCode}`;
45
+ if (!/\d+/.test(iosVersionCode)) throwError("app.json expo.ios.buildNumber is not an integer");
46
+ if (!/\d+/.test(androidVersionCode)) throwError("app.json expo.android.versionCode is not an integer");
47
+ if (iosVersionCode !== androidVersionCode) throwError("app.json expo.ios.buildNumber is not equal with expo.android.versionCode");
48
+ if (!semver.valid(versionName)) throwError("VERSION_NAME is not a valid semver format");
49
+ OptionHolder.versionName = versionName;
50
+ OptionHolder.versionCode = iosVersionCode;
51
+ }
52
+ }
53
+ async function injectBinaryVersions({ versionCode, versionName }) {
54
+ const files = readdir(OptionHolder.projectDir);
55
+ const jsConfigFiles = [
56
+ "app.config.ts",
57
+ "app.config.js",
58
+ "app.config.cjs",
59
+ "app.config.mjs"
60
+ ];
61
+ const jsonConfigFile = "app.json";
62
+ for (const jsConfigFile of jsConfigFiles) if (files.includes(jsConfigFile)) {
63
+ await injectToJsConfigFile(jsConfigFile);
64
+ return;
65
+ }
66
+ if (files.includes(jsonConfigFile)) {
67
+ await injectToJsonConfigFile(jsonConfigFile);
68
+ return;
69
+ }
70
+ throwError("expo config file not found");
71
+ async function injectToJsConfigFile(filename) {
72
+ const filePath = resolve(OptionHolder.projectDir, filename);
73
+ let content = read(filePath);
74
+ content = content.replace(versionNameRegex(), `const VERSION_NAME = '${versionName}';`);
75
+ content = content.replace(versionCodeRegex(), `const VERSION_CODE = ${versionCode};`);
76
+ write(filePath, content);
77
+ }
78
+ async function injectToJsonConfigFile(filename) {
79
+ const filePath = resolve(OptionHolder.projectDir, filename);
80
+ const json = readJsonSlow(filePath);
81
+ json.expo.version = versionName;
82
+ json.expo.ios.buildNumber = versionCode;
83
+ json.expo.android.versionCode = +versionCode;
84
+ writeJson(filePath, json);
85
+ }
86
+ }
87
+ function checkVersionCodeIsTiedWithVersionName(versionName, versionCode) {
88
+ if (!semver.valid(versionName)) return false;
89
+ return generateVersionCodeTiedWithVersionName(versionName) === versionCode;
90
+ }
91
+ function generateVersionCodeTiedWithVersionName(versionName) {
92
+ if (!semver.valid(versionName)) throwError("Version Name is not a valid semver format when running `generateVersionCodeTiedWithVersionName`");
93
+ const major = semver.major(versionName);
94
+ const minor = semver.minor(versionName);
95
+ const patch = semver.patch(versionName);
96
+ return `${major}${padZero(minor, 3)}${padZero(patch, 3)}`;
97
+ }
98
+
99
+ //#endregion
100
+ export { checkVersionCodeIsTiedWithVersionName, generateVersionCodeTiedWithVersionName, injectBinaryVersions, parseBinaryVersions };
101
+ //# sourceMappingURL=VersionUtil-BDB10Hpb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionUtil-BDB10Hpb.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';\nimport { read, readJsonSlow, readdir, 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":";;;;;;;AAMA,MAAM,mBAAmB,MAAM;AAC/B,MAAM,mBAAmB,MAAM;AAE/B,eAAsB,sBAAsB;CAC1C,MAAM,QAAQ,QAAQ,aAAa,WAAW;CAE9C,MAAM,gBAAgB;EAAC;EAAiB;EAAiB;EAAkB;CAAiB;CAC5F,MAAM,iBAAiB;AAEvB,MAAK,MAAM,gBAAgB,cACzB,KAAI,MAAM,SAAS,aAAa,EAAE;AAChC,QAAM,sBAAsB,aAAa;AACzC;CACD;AAGH,KAAI,MAAM,SAAS,eAAe,EAAE;AAClC,QAAM,wBAAwB,eAAe;AAC7C;CACD;AAED,YAAW,6BAA6B;CAExC,eAAe,sBAAsBA,UAAkB;EACrD,MAAM,WAAW,QAAQ,aAAa,YAAY,SAAS;EAC3D,MAAM,UAAU,KAAK,SAAS;EAE9B,MAAM,eAAe,kBAAkB,CAAC,KAAK,QAAQ,GAAG;EACxD,MAAM,eAAe,kBAAkB,CAAC,KAAK,QAAQ,GAAG;AAExD,OAAK,aACH,YAAW,4BAA4B;AAEzC,OAAK,aACH,YAAW,4BAA4B;AAGzC,OAAK,OAAO,MAAM,aAAa,CAC7B,YAAW,4CAA4C;AAGzD,eAAa,cAAc;AAC3B,eAAa,cAAc;CAC5B;CAED,eAAe,wBAAwBA,UAAkB;EACvD,MAAM,WAAW,QAAQ,aAAa,YAAY,SAAS;EAC3D,MAAM,OAAO,aAAa,SAAS;EAEnC,MAAM,eAAe,EAAE,KAAK,MAAM,QAAQ;EAC1C,MAAM,kBAAkB,EAAE,KAAK,MAAM,KAAK,YAAY;EACtD,MAAM,sBAAsB,EAAE,KAAK,MAAM,SAAS,YAAY;AAE9D,OAAK,MAAM,KAAK,eAAe,CAC7B,YAAW,kDAAkD;AAG/D,OAAK,MAAM,KAAK,mBAAmB,CACjC,YAAW,sDAAsD;AAGnE,MAAI,mBAAmB,mBACrB,YAAW,2EAA2E;AAGxF,OAAK,OAAO,MAAM,YAAY,CAC5B,YAAW,4CAA4C;AAGzD,eAAa,cAAc;AAC3B,eAAa,cAAc;CAC5B;AACF;AAED,eAAsB,qBAAqB,EACzC,aACA,aAID,EAAE;CACD,MAAM,QAAQ,QAAQ,aAAa,WAAW;CAE9C,MAAM,gBAAgB;EAAC;EAAiB;EAAiB;EAAkB;CAAiB;CAC5F,MAAM,iBAAiB;AAEvB,MAAK,MAAM,gBAAgB,cACzB,KAAI,MAAM,SAAS,aAAa,EAAE;AAChC,QAAM,qBAAqB,aAAa;AACxC;CACD;AAGH,KAAI,MAAM,SAAS,eAAe,EAAE;AAClC,QAAM,uBAAuB,eAAe;AAC5C;CACD;AAED,YAAW,6BAA6B;CAExC,eAAe,qBAAqBA,UAAkB;EACpD,MAAM,WAAW,QAAQ,aAAa,YAAY,SAAS;EAC3D,IAAI,UAAU,KAAK,SAAS;AAE5B,YAAU,QAAQ,QAAQ,kBAAkB,GAAG,wBAAwB,YAAY,IAAI;AACvF,YAAU,QAAQ,QAAQ,kBAAkB,GAAG,uBAAuB,YAAY,GAAG;AAErF,QAAM,UAAU,QAAQ;CACzB;CAED,eAAe,uBAAuBA,UAAkB;EACtD,MAAM,WAAW,QAAQ,aAAa,YAAY,SAAS;EAC3D,MAAM,OAAO,aAAa,SAAS;AAEnC,OAAK,KAAK,UAAU;AACpB,OAAK,KAAK,IAAI,cAAc;AAC5B,OAAK,KAAK,QAAQ,eAAe;AAEjC,YAAU,UAAU,KAAK;CAC1B;AACF;AAED,SAAgB,sCACdC,aACAC,aACS;AACT,MAAK,OAAO,MAAM,YAAY,CAAE,QAAO;AACvC,QAAO,uCAAuC,YAAY,KAAK;AAChE;AAED,SAAgB,uCAAuCD,aAAqB;AAC1E,MAAK,OAAO,MAAM,YAAY,CAC5B,YACE,kGACD;CACH,MAAM,QAAQ,OAAO,MAAM,YAAY;CACvC,MAAM,QAAQ,OAAO,MAAM,YAAY;CACvC,MAAM,QAAQ,OAAO,MAAM,YAAY;AAEvC,SAAQ,EAAE,MAAM,EAAE,QAAQ,OAAO,EAAE,CAAC,EAAE,QAAQ,OAAO,EAAE,CAAC;AACzD"}
@@ -0,0 +1,88 @@
1
+ import { isWin } from "./EnvUtil-DWWwkHaf.js";
2
+ import { copy, relativePath, remove, resolve } from "./FileUtil-B9JnWobK.js";
3
+ import { OptionHolder } from "./OptionHolder-H3HG0A95.js";
4
+ import { getIosFastlaneOptions } from "./FastlaneOption-B9A0ECDL.js";
5
+ import { calculateElapsed } from "./calculateElapsed-CynU9UU_.js";
6
+ import { InqueryInputs } from "./InqueryInputs-BGj-DlRa.js";
7
+ import { logger } from "./logger-DvQ7ScMQ.js";
8
+ import { exe } from "./execShellScript-Bd5xbFX5.js";
9
+ import { prepareAndroid } from "./prepareAndroid-Cjz6r6o0.js";
10
+ import { prepareIos } from "./prepareIos-ByPLFHC8.js";
11
+ import { setup } from "./setup-CRNjdK5q.js";
12
+ import chalk from "chalk";
13
+
14
+ //#region src/command/build.ts
15
+ async function build({ options }) {
16
+ Object.assign(OptionHolder.input, options);
17
+ const startTime = Date.now();
18
+ await setup();
19
+ await promptInputs();
20
+ logger.info("Build Started");
21
+ if (OptionHolder.input.platform === "ios") {
22
+ await buildIos();
23
+ logger.success(`iOS Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);
24
+ } else {
25
+ await buildAndroid();
26
+ logger.success(`Android Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);
27
+ }
28
+ }
29
+ async function promptInputs() {
30
+ await InqueryInputs.platform();
31
+ await InqueryInputs.podinstall();
32
+ await InqueryInputs.androidBuildOutput();
33
+ }
34
+ async function buildIos() {
35
+ const iosDir = resolve(OptionHolder.projectDir, "ios");
36
+ const exeEnv = exe({
37
+ cwd: iosDir,
38
+ env: { MATCH_PASSWORD: OptionHolder.keyholderMap.ios_match_password }
39
+ });
40
+ await prepareIos();
41
+ await fastlane();
42
+ async function fastlane() {
43
+ if (OptionHolder.input.pod) {
44
+ await exeEnv("bundle", [
45
+ "exec",
46
+ "pod",
47
+ "install"
48
+ ]);
49
+ logger.done("Pod Install");
50
+ }
51
+ remove(resolve(iosDir, ".xcode.env.local"));
52
+ await exeEnv("bundle", [
53
+ "exec",
54
+ "fastlane",
55
+ "build",
56
+ ...getIosFastlaneOptions()
57
+ ]);
58
+ logger.success(`artifact generated: ${relativePath(OptionHolder.projectDir, resolve(OptionHolder.resourcesDir, "output", "ios", "app.ipa"))}`);
59
+ }
60
+ }
61
+ async function buildAndroid() {
62
+ const androidDir = resolve(OptionHolder.projectDir, "android");
63
+ const exeEnv = exe({ cwd: androidDir });
64
+ await prepareAndroid();
65
+ await fastlane();
66
+ async function fastlane() {
67
+ let buildOutputDir;
68
+ let outputDir;
69
+ if (OptionHolder.input.androidOutput === "aab") {
70
+ await exeEnv(isWin ? "gradle.bat" : "./gradlew", ["app:bundleRelease"]);
71
+ logger.done("Bundle AAB");
72
+ buildOutputDir = resolve(androidDir, "app", "build", "outputs", "bundle", "release");
73
+ outputDir = resolve(OptionHolder.resourcesDir, "output", "android", "aab");
74
+ } else {
75
+ await exeEnv(isWin ? "gradle.bat" : "./gradlew", ["app:assembleRelease"]);
76
+ logger.done("Assemble APK");
77
+ buildOutputDir = resolve(androidDir, "app", "build", "outputs", "apk", "release");
78
+ outputDir = resolve(OptionHolder.resourcesDir, "output", "android", "apk");
79
+ }
80
+ remove(outputDir);
81
+ copy(buildOutputDir, outputDir);
82
+ logger.success(`artifact generated: ${relativePath(OptionHolder.projectDir, outputDir)}`);
83
+ }
84
+ }
85
+
86
+ //#endregion
87
+ export { build };
88
+ //# sourceMappingURL=build-DLOdnj2j.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-DLOdnj2j.js","names":["buildOutputDir: string","outputDir: string"],"sources":["../src/command/build.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { isWin } from '../util/EnvUtil';\nimport { getIosFastlaneOptions } from '../util/FastlaneOption';\nimport { copy, relativePath, remove, resolve } from '../util/FileUtil';\nimport { OptionHolder } from '../util/OptionHolder';\nimport { calculateElapsed } from '../util/calculateElapsed';\nimport { InqueryInputs } from '../util/input/InqueryInputs';\nimport { logger } from '../util/logger';\nimport { exe } from '../util/setup/execShellScript';\nimport { prepareAndroid } from '../util/setup/prepareAndroid';\nimport { prepareIos } from '../util/setup/prepareIos';\nimport { setup } from '../util/setup/setup';\n\nexport async function build({ options }: { options: any }) {\n Object.assign(OptionHolder.input, options);\n const startTime = Date.now();\n await setup();\n await promptInputs();\n\n logger.info('Build Started');\n\n if (OptionHolder.input.platform === 'ios') {\n await buildIos();\n logger.success(`iOS Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);\n } else {\n await buildAndroid();\n logger.success(`Android Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);\n }\n}\n\nasync function promptInputs() {\n await InqueryInputs.platform();\n await InqueryInputs.podinstall();\n await InqueryInputs.androidBuildOutput();\n}\n\nasync function buildIos() {\n const iosDir = resolve(OptionHolder.projectDir, 'ios');\n const exeEnv = exe({\n cwd: iosDir,\n env: {\n MATCH_PASSWORD: OptionHolder.keyholderMap.ios_match_password,\n },\n });\n await prepareIos();\n await fastlane();\n\n async function fastlane() {\n if (OptionHolder.input.pod) {\n await exeEnv('bundle', ['exec', 'pod', 'install']);\n logger.done('Pod Install');\n }\n remove(resolve(iosDir, '.xcode.env.local'));\n\n await exeEnv('bundle', ['exec', 'fastlane', 'build', ...getIosFastlaneOptions()]);\n\n logger.success(\n `artifact generated: ${relativePath(OptionHolder.projectDir, resolve(OptionHolder.resourcesDir, 'output', 'ios', 'app.ipa'))}`,\n );\n }\n}\nasync function buildAndroid() {\n const androidDir = resolve(OptionHolder.projectDir, 'android');\n const exeEnv = exe({\n cwd: androidDir,\n });\n await prepareAndroid();\n await fastlane();\n\n async function fastlane() {\n let buildOutputDir: string;\n let outputDir: string;\n\n if (OptionHolder.input.androidOutput === 'aab') {\n // aab: app/build/outputs/bundle/release/app-release.aab\n await exeEnv(isWin ? 'gradle.bat' : './gradlew', ['app:bundleRelease']);\n logger.done('Bundle AAB');\n buildOutputDir = resolve(androidDir, 'app', 'build', 'outputs', 'bundle', 'release');\n outputDir = resolve(OptionHolder.resourcesDir, 'output', 'android', 'aab');\n } else {\n // apk: app/build/outputs/apk/release/app-release.apk\n await exeEnv(isWin ? 'gradle.bat' : './gradlew', ['app:assembleRelease']);\n logger.done('Assemble APK');\n buildOutputDir = resolve(androidDir, 'app', 'build', 'outputs', 'apk', 'release');\n outputDir = resolve(OptionHolder.resourcesDir, 'output', 'android', 'apk');\n }\n\n remove(outputDir);\n copy(buildOutputDir, outputDir);\n\n logger.success(`artifact generated: ${relativePath(OptionHolder.projectDir, outputDir)}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAaA,eAAsB,MAAM,EAAE,SAA2B,EAAE;AACzD,QAAO,OAAO,aAAa,OAAO,QAAQ;CAC1C,MAAM,YAAY,KAAK,KAAK;AAC5B,OAAM,OAAO;AACb,OAAM,cAAc;AAEpB,QAAO,KAAK,gBAAgB;AAE5B,KAAI,aAAa,MAAM,aAAa,OAAO;AACzC,QAAM,UAAU;AAChB,SAAO,SAAS,YAAY,MAAM,KAAK,QAAQ,iBAAiB,UAAU,CAAC,CAAC,EAAE;CAC/E,OAAM;AACL,QAAM,cAAc;AACpB,SAAO,SAAS,gBAAgB,MAAM,KAAK,QAAQ,iBAAiB,UAAU,CAAC,CAAC,EAAE;CACnF;AACF;AAED,eAAe,eAAe;AAC5B,OAAM,cAAc,UAAU;AAC9B,OAAM,cAAc,YAAY;AAChC,OAAM,cAAc,oBAAoB;AACzC;AAED,eAAe,WAAW;CACxB,MAAM,SAAS,QAAQ,aAAa,YAAY,MAAM;CACtD,MAAM,SAAS,IAAI;EACjB,KAAK;EACL,KAAK,EACH,gBAAgB,aAAa,aAAa,mBAC3C;CACF,EAAC;AACF,OAAM,YAAY;AAClB,OAAM,UAAU;CAEhB,eAAe,WAAW;AACxB,MAAI,aAAa,MAAM,KAAK;AAC1B,SAAM,OAAO,UAAU;IAAC;IAAQ;IAAO;GAAU,EAAC;AAClD,UAAO,KAAK,cAAc;EAC3B;AACD,SAAO,QAAQ,QAAQ,mBAAmB,CAAC;AAE3C,QAAM,OAAO,UAAU;GAAC;GAAQ;GAAY;GAAS,GAAG,uBAAuB;EAAC,EAAC;AAEjF,SAAO,SACJ,sBAAsB,aAAa,aAAa,YAAY,QAAQ,aAAa,cAAc,UAAU,OAAO,UAAU,CAAC,CAAC,EAC9H;CACF;AACF;AACD,eAAe,eAAe;CAC5B,MAAM,aAAa,QAAQ,aAAa,YAAY,UAAU;CAC9D,MAAM,SAAS,IAAI,EACjB,KAAK,WACN,EAAC;AACF,OAAM,gBAAgB;AACtB,OAAM,UAAU;CAEhB,eAAe,WAAW;EACxB,IAAIA;EACJ,IAAIC;AAEJ,MAAI,aAAa,MAAM,kBAAkB,OAAO;AAE9C,SAAM,OAAO,QAAQ,eAAe,aAAa,CAAC,mBAAoB,EAAC;AACvE,UAAO,KAAK,aAAa;AACzB,oBAAiB,QAAQ,YAAY,OAAO,SAAS,WAAW,UAAU,UAAU;AACpF,eAAY,QAAQ,aAAa,cAAc,UAAU,WAAW,MAAM;EAC3E,OAAM;AAEL,SAAM,OAAO,QAAQ,eAAe,aAAa,CAAC,qBAAsB,EAAC;AACzE,UAAO,KAAK,eAAe;AAC3B,oBAAiB,QAAQ,YAAY,OAAO,SAAS,WAAW,OAAO,UAAU;AACjF,eAAY,QAAQ,aAAa,cAAc,UAAU,WAAW,MAAM;EAC3E;AAED,SAAO,UAAU;AACjB,OAAK,gBAAgB,UAAU;AAE/B,SAAO,SAAS,sBAAsB,aAAa,aAAa,YAAY,UAAU,CAAC,EAAE;CAC1F;AACF"}