expo-release-it 0.0.11 → 0.0.13

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 (70) hide show
  1. package/bin/expo-release-it.mjs +3 -1
  2. package/build/command/build.d.ts +10 -0
  3. package/build/command/build.js +422 -69
  4. package/build/command/build.js.map +1 -0
  5. package/build/command/bump.d.ts +6 -0
  6. package/build/command/bump.js +291 -32
  7. package/build/command/bump.js.map +1 -0
  8. package/build/command/init.d.ts +6 -0
  9. package/build/command/init.js +334 -92
  10. package/build/command/init.js.map +1 -0
  11. package/build/command/submit.d.ts +8 -0
  12. package/build/command/submit.js +376 -56
  13. package/build/command/submit.js.map +1 -0
  14. package/build/command/upload.d.ts +8 -0
  15. package/build/command/upload.js +379 -57
  16. package/build/command/upload.js.map +1 -0
  17. package/build/index.d.ts +3 -0
  18. package/build/index.js +670 -53
  19. package/build/index.js.map +1 -0
  20. package/build/util/EnvUtil.d.ts +4 -0
  21. package/build/util/EnvUtil.js +8 -2
  22. package/build/util/EnvUtil.js.map +1 -0
  23. package/build/util/FileUtil.d.ts +18 -0
  24. package/build/util/FileUtil.js +73 -55
  25. package/build/util/FileUtil.js.map +1 -0
  26. package/build/util/OptionHolder.d.ts +50 -0
  27. package/build/util/OptionHolder.js +83 -28
  28. package/build/util/OptionHolder.js.map +1 -0
  29. package/build/util/VersionUtil.d.ts +7 -0
  30. package/build/util/VersionUtil.js +217 -80
  31. package/build/util/VersionUtil.js.map +1 -0
  32. package/build/util/calculateElapsed.d.ts +3 -0
  33. package/build/util/calculateElapsed.js +11 -6
  34. package/build/util/calculateElapsed.js.map +1 -0
  35. package/build/util/hydrateKeyholderFileValues.d.ts +3 -0
  36. package/build/util/hydrateKeyholderFileValues.js +91 -4
  37. package/build/util/hydrateKeyholderFileValues.js.map +1 -0
  38. package/build/util/iterateAllFilesInGeneratedTemplate.d.ts +3 -0
  39. package/build/util/iterateAllFilesInGeneratedTemplate.js +112 -16
  40. package/build/util/iterateAllFilesInGeneratedTemplate.js.map +1 -0
  41. package/build/util/logger.d.ts +10 -0
  42. package/build/util/logger.js +15 -0
  43. package/build/util/logger.js.map +1 -0
  44. package/build/util/setup/prepareAndroid.d.ts +3 -0
  45. package/build/util/setup/prepareAndroid.js +170 -26
  46. package/build/util/setup/prepareAndroid.js.map +1 -0
  47. package/build/util/setup/prepareIos.d.ts +3 -0
  48. package/build/util/setup/prepareIos.js +143 -16
  49. package/build/util/setup/prepareIos.js.map +1 -0
  50. package/build/util/setup/promptCommonInputs.d.ts +3 -0
  51. package/build/util/setup/promptCommonInputs.js +113 -21
  52. package/build/util/setup/promptCommonInputs.js.map +1 -0
  53. package/build/util/setup/setup.d.ts +3 -0
  54. package/build/util/setup/setup.js +213 -7
  55. package/build/util/setup/setup.js.map +1 -0
  56. package/build/util/throwError.d.ts +3 -0
  57. package/build/util/throwError.js +24 -9
  58. package/build/util/throwError.js.map +1 -0
  59. package/package.json +5 -3
  60. package/build/command/release.js +0 -86
  61. package/build/util/EnvironmentPreparationUtil.js +0 -41
  62. package/build/util/Log.js +0 -9
  63. package/build/util/Logger.js +0 -9
  64. package/build/util/logutil.js +0 -9
  65. package/build/util/parseBinaryVersion.js +0 -59
  66. package/build/util/pathfinder.js +0 -5
  67. package/build/util/prepareAndroid.js +0 -34
  68. package/build/util/prepareIos.js +0 -17
  69. package/build/util/promptCommonInputs.js +0 -27
  70. package/build/util/setup.js +0 -8
@@ -0,0 +1,10 @@
1
+ declare const logger: {
2
+ success: (...msg: any[]) => void;
3
+ error: (...msg: any[]) => void;
4
+ warn: (...msg: any[]) => void;
5
+ info: (...msg: any[]) => void;
6
+ title: (...msg: any[]) => void;
7
+ dim: (...msg: any[]) => void;
8
+ };
9
+
10
+ export { logger };
@@ -0,0 +1,15 @@
1
+ // src/util/logger.ts
2
+ import chalk from "chalk";
3
+ var logger = {
4
+ success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
5
+ error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
6
+ warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
7
+ info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
8
+ title: (...msg) => console.log(chalk.bold.blue(`
9
+ ${msg.join(", ")}`)),
10
+ dim: (...msg) => console.log(chalk.dim(msg.join(", ")))
11
+ };
12
+ export {
13
+ logger
14
+ };
15
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n"],"mappings":";AAAA,OAAO,WAAW;AAEX,IAAM,SAAS;AAAA,EACpB,SAAS,IAAI,QAAe,QAAQ,IAAI,MAAM,MAAM,UAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC1E,OAAO,IAAI,QAAe,QAAQ,IAAI,MAAM,IAAI,UAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACtE,MAAM,IAAI,QAAe,QAAQ,IAAI,MAAM,OAAO,UAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACxE,MAAM,IAAI,QAAe,QAAQ,IAAI,MAAM,KAAK,UAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EACtE,OAAO,IAAI,QAAe,QAAQ,IAAI,MAAM,KAAK,KAAK;AAAA,EAAK,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,EAC5E,KAAK,IAAI,QAAe,QAAQ,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;AAC/D;","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function prepareAndroid(): Promise<void>;
2
+
3
+ export { prepareAndroid };
@@ -1,34 +1,178 @@
1
- import { spinner, $, path } from 'zx';
2
- import { resolve, remove, iterateDir, copy, read, write } from '../FileUtil';
3
- import { OptionHolder } from '../OptionHolder';
4
- import { logger } from '../logger';
5
- export async function prepareAndroid() {
6
- const androidDir = resolve(OptionHolder.rootDir, 'android');
7
- const fastlaneSrcDir = resolve(OptionHolder.outDir, 'fastlane-android');
8
- const fastlaneDestDir = resolve(OptionHolder.rootDir, 'android', 'fastlane');
9
- await spinner('Prebuild Android', () => $ `cd ${OptionHolder.rootDir} && expo prebuild -p android --no-install`);
10
- remove(fastlaneDestDir);
11
- await iterateDir(fastlaneSrcDir, async (file) => {
12
- const filePath = resolve(fastlaneSrcDir, file);
13
- remove(resolve(androidDir, file));
14
- copy(filePath, resolve(androidDir, file));
15
- });
16
- logger.success('Inject Android Fastlane files');
17
- await replaceAndroidSigningConfig();
18
- async function replaceAndroidSigningConfig() {
19
- const buildGradlePath = resolve(androidDir, 'app', 'build.gradle');
20
- const { android_keystore_store_password, android_keystore_key_alias, android_keystore_key_password, } = OptionHolder.keyholderFileValueMap;
21
- const content = read(buildGradlePath).replace(/signingConfigs.*?{.*?debug.*?{.*?}.*?}/s, `
1
+ // src/util/setup/prepareAndroid.ts
2
+ import { spinner, $, path as path2 } from "zx";
3
+
4
+ // src/util/FileUtil.ts
5
+ import fs from "fs-extra";
6
+ import * as path from "path";
7
+ var resolve2 = path.resolve;
8
+ function exist(path3) {
9
+ return fs.existsSync(path3);
10
+ }
11
+ function isDir(path3) {
12
+ return exist(path3) && fs.lstatSync(path3).isDirectory();
13
+ }
14
+ function read(path3) {
15
+ return fs.readFileSync(path3, { encoding: "utf8" });
16
+ }
17
+ function write(p, content) {
18
+ const dir = path.dirname(p);
19
+ if (!exist(dir)) {
20
+ fs.mkdirSync(dir, { recursive: true });
21
+ }
22
+ return fs.writeFileSync(p, content);
23
+ }
24
+ function copy(src, dest, options) {
25
+ fs.copySync(src, dest, options);
26
+ }
27
+ function remove(path3) {
28
+ if (!exist(path3)) {
29
+ return;
30
+ }
31
+ if (fs.lstatSync(path3).isDirectory()) {
32
+ return fs.rmSync(path3, { force: true, recursive: true });
33
+ } else {
34
+ return fs.rmSync(path3, { force: true });
35
+ }
36
+ }
37
+ async function iterateDir(path3, fn) {
38
+ if (!isDir(path3)) {
39
+ return;
40
+ }
41
+ for (const file of fs.readdirSync(path3)) {
42
+ await fn(file);
43
+ }
44
+ }
45
+
46
+ // package.json
47
+ var package_default = {
48
+ name: "expo-release-it",
49
+ module: "src/index.ts",
50
+ type: "module",
51
+ version: "0.0.12",
52
+ license: "MIT",
53
+ scripts: {
54
+ build: "tsup",
55
+ dev: "bun run build && NODE_ENV=development node bin/expo-release-it.mjs",
56
+ release: "yarn build && release-it",
57
+ android: "expo run:android",
58
+ ios: "expo run:ios",
59
+ t: "tsc --noEmit -p ."
60
+ },
61
+ dependencies: {
62
+ "@inquirer/prompts": "^7.4.1",
63
+ "@mj-studio/js-util": "^1.1.20",
64
+ chalk: "^5.4.1",
65
+ commander: "^13.1.0",
66
+ "fs-extra": "^11.3.0",
67
+ react: "18.3.1",
68
+ "react-native": "0.76.9",
69
+ semver: "^7.7.1",
70
+ url: "^0.11.4",
71
+ zx: "^8.5.3"
72
+ },
73
+ devDependencies: {
74
+ "@types/bun": "latest",
75
+ "@types/fs-extra": "^11.0.4",
76
+ "@types/semver": "^7.7.0",
77
+ prettier: "3.5.3",
78
+ "release-it": "^19.0.1",
79
+ "tiny-glob": "^0.2.9",
80
+ tsup: "^8.4.0",
81
+ typescript: "^5.8.3"
82
+ },
83
+ workspaces: [
84
+ "example"
85
+ ],
86
+ bin: "./bin/expo-release-it.mjs",
87
+ files: [
88
+ "build",
89
+ "package.json",
90
+ "bin",
91
+ "template"
92
+ ],
93
+ packageManager: "yarn@4.9.1"
94
+ };
95
+
96
+ // src/util/OptionHolder.ts
97
+ import { fileURLToPath } from "url";
98
+ var OptionHolder = {
99
+ cli: {
100
+ version: package_default.version,
101
+ rootDir: resolve2(fileURLToPath(import.meta.url), "../.."),
102
+ templateDir: resolve2(fileURLToPath(import.meta.url), "../../template")
103
+ },
104
+ init: {},
105
+ bump: {},
106
+ build: {},
107
+ upload: {},
108
+ submit: {},
109
+ templateValuePlaceholderMap: {},
110
+ keyholderFileValueMap: {},
111
+ templateDirNames: ["fastlane-android", "fastlane-ios", "key"],
112
+ iosBundleIdentifier: "",
113
+ androidPackageName: "",
114
+ projectDir: "",
115
+ outputOfInitDir: "",
116
+ keyDir: "",
117
+ keyholderFilePath: "",
118
+ versionName: "",
119
+ versionCode: ""
120
+ };
121
+
122
+ // src/util/logger.ts
123
+ import chalk from "chalk";
124
+ var logger = {
125
+ success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
126
+ error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
127
+ warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
128
+ info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
129
+ title: (...msg) => console.log(chalk.bold.blue(`
130
+ ${msg.join(", ")}`)),
131
+ dim: (...msg) => console.log(chalk.dim(msg.join(", ")))
132
+ };
133
+
134
+ // src/util/setup/prepareAndroid.ts
135
+ async function prepareAndroid() {
136
+ const androidDir = resolve2(OptionHolder.projectDir, "android");
137
+ const fastlaneSrcDir = resolve2(OptionHolder.outputOfInitDir, "fastlane-android");
138
+ const fastlaneDestDir = resolve2(OptionHolder.projectDir, "android", "fastlane");
139
+ await spinner(
140
+ "Prebuild Android",
141
+ () => $`cd ${OptionHolder.projectDir} && expo prebuild -p android --no-install`
142
+ );
143
+ remove(fastlaneDestDir);
144
+ await iterateDir(fastlaneSrcDir, async (file) => {
145
+ const filePath = resolve2(fastlaneSrcDir, file);
146
+ remove(resolve2(androidDir, file));
147
+ copy(filePath, resolve2(androidDir, file));
148
+ });
149
+ logger.success("Inject Android Fastlane files");
150
+ await replaceAndroidSigningConfig();
151
+ async function replaceAndroidSigningConfig() {
152
+ const buildGradlePath = resolve2(androidDir, "app", "build.gradle");
153
+ const {
154
+ android_keystore_store_password,
155
+ android_keystore_key_alias,
156
+ android_keystore_key_password
157
+ } = OptionHolder.keyholderFileValueMap;
158
+ const content = read(buildGradlePath).replace(
159
+ /signingConfigs.*?{.*?debug.*?{.*?}.*?}/s,
160
+ `
22
161
  signingConfigs {
23
162
  debug {
24
- storeFile file('${path.relative(buildGradlePath, resolve(OptionHolder.outDir, 'key', 'android_release_keystore.jks'))}')
163
+ storeFile file('${path2.relative(buildGradlePath, resolve2(OptionHolder.outputOfInitDir, "key", "android_release_keystore.jks"))}')
25
164
  storePassword '${android_keystore_store_password}'
26
165
  keyAlias '${android_keystore_key_alias}'
27
166
  keyPassword '${android_keystore_key_password}'
28
167
  }
29
168
  }
30
- `);
31
- write(buildGradlePath, content);
32
- logger.success('Replace Android Signing Config');
33
- }
169
+ `
170
+ );
171
+ write(buildGradlePath, content);
172
+ logger.success("Replace Android Signing Config");
173
+ }
34
174
  }
175
+ export {
176
+ prepareAndroid
177
+ };
178
+ //# sourceMappingURL=prepareAndroid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/util/setup/prepareAndroid.ts","../../../src/util/FileUtil.ts","../../../package.json","../../../src/util/OptionHolder.ts","../../../src/util/logger.ts"],"sourcesContent":["import { spinner, $, path } from 'zx';\nimport { resolve, remove, iterateDir, copy, read, write } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { logger } from '../logger';\n\nexport async function prepareAndroid() {\n const androidDir = resolve(OptionHolder.projectDir, 'android');\n const fastlaneSrcDir = resolve(OptionHolder.outputOfInitDir, 'fastlane-android');\n const fastlaneDestDir = resolve(OptionHolder.projectDir, 'android', 'fastlane');\n\n await spinner(\n 'Prebuild Android',\n () => $`cd ${OptionHolder.projectDir} && expo prebuild -p android --no-install`,\n );\n\n remove(fastlaneDestDir);\n\n await iterateDir(fastlaneSrcDir, async (file) => {\n const filePath = resolve(fastlaneSrcDir, file);\n remove(resolve(androidDir, file));\n copy(filePath, resolve(androidDir, file));\n });\n logger.success('Inject Android Fastlane files');\n await replaceAndroidSigningConfig();\n\n async function replaceAndroidSigningConfig() {\n const buildGradlePath = resolve(androidDir, 'app', 'build.gradle');\n const {\n android_keystore_store_password,\n android_keystore_key_alias,\n android_keystore_key_password,\n } = OptionHolder.keyholderFileValueMap;\n\n const content = read(buildGradlePath).replace(\n /signingConfigs.*?{.*?debug.*?{.*?}.*?}/s,\n `\n signingConfigs {\n debug {\n storeFile file('${path.relative(buildGradlePath, resolve(OptionHolder.outputOfInitDir, 'key', 'android_release_keystore.jks'))}')\n storePassword '${android_keystore_store_password}'\n keyAlias '${android_keystore_key_alias}'\n keyPassword '${android_keystore_key_password}'\n }\n }\n `,\n );\n write(buildGradlePath, content);\n logger.success('Replace Android Signing Config');\n }\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.0.12\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"bun run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"fs-extra\": \"^11.3.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\",\n \"zx\": \"^8.5.3\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport type { BuildOptions } from '../command/build';\nimport type { InitOptions } from '../command/init';\nimport type { BumpOptions } from '../command/bump';\nimport type { SubmitOptions } from '../command/submit';\nimport type { UploadOptions } from '../command/upload';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n init: InitOptions;\n bump: BumpOptions;\n build: BuildOptions;\n upload: UploadOptions;\n submit: SubmitOptions;\n\n templateValuePlaceholderMap: {\n ios_app_identifier: string;\n ios_app_store_connect_team_id: 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 android_package_name: string;\n key_dir_relative_path: string;\n };\n keyholderFileValueMap: {\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n ios_match_password: string;\n };\n iosBundleIdentifier: string;\n androidPackageName: string;\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n init: {} as any,\n bump: {} as any,\n build: {} as any,\n upload: {} as any,\n submit: {} as any,\n templateValuePlaceholderMap: {} as any,\n keyholderFileValueMap: {} as any,\n templateDirNames: ['fastlane-android', 'fastlane-ios', 'key'],\n iosBundleIdentifier: '',\n androidPackageName: '',\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n"],"mappings":"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","names":["path","resolve","path","path","path","resolve","resolve","path"]}
@@ -0,0 +1,3 @@
1
+ declare function prepareIos(): Promise<void>;
2
+
3
+ export { prepareIos };
@@ -1,17 +1,144 @@
1
- import { $, spinner } from 'zx';
2
- import { remove, resolve, iterateDir, copy } from '../FileUtil';
3
- import { OptionHolder } from '../OptionHolder';
4
- import { logger } from '../logger';
5
- export async function prepareIos() {
6
- const iosDir = resolve(OptionHolder.rootDir, 'ios');
7
- const fastlaneSrcDir = resolve(OptionHolder.outDir, 'fastlane-ios');
8
- const fastlaneDestDir = resolve(OptionHolder.rootDir, 'ios', 'fastlane');
9
- await spinner('Prebuild iOS', () => $ `cd ${OptionHolder.rootDir} && expo prebuild -p ios --no-install`);
10
- remove(fastlaneDestDir);
11
- await iterateDir(fastlaneSrcDir, async (file) => {
12
- const filePath = resolve(fastlaneSrcDir, file);
13
- remove(resolve(iosDir, file));
14
- copy(filePath, resolve(iosDir, file));
15
- });
16
- logger.success('Inject iOS Fastlane files');
1
+ // src/util/setup/prepareIos.ts
2
+ import { $, spinner } from "zx";
3
+
4
+ // src/util/FileUtil.ts
5
+ import fs from "fs-extra";
6
+ import * as path from "path";
7
+ var resolve2 = path.resolve;
8
+ function exist(path2) {
9
+ return fs.existsSync(path2);
17
10
  }
11
+ function isDir(path2) {
12
+ return exist(path2) && fs.lstatSync(path2).isDirectory();
13
+ }
14
+ function copy(src, dest, options) {
15
+ fs.copySync(src, dest, options);
16
+ }
17
+ function remove(path2) {
18
+ if (!exist(path2)) {
19
+ return;
20
+ }
21
+ if (fs.lstatSync(path2).isDirectory()) {
22
+ return fs.rmSync(path2, { force: true, recursive: true });
23
+ } else {
24
+ return fs.rmSync(path2, { force: true });
25
+ }
26
+ }
27
+ async function iterateDir(path2, fn) {
28
+ if (!isDir(path2)) {
29
+ return;
30
+ }
31
+ for (const file of fs.readdirSync(path2)) {
32
+ await fn(file);
33
+ }
34
+ }
35
+
36
+ // package.json
37
+ var package_default = {
38
+ name: "expo-release-it",
39
+ module: "src/index.ts",
40
+ type: "module",
41
+ version: "0.0.12",
42
+ license: "MIT",
43
+ scripts: {
44
+ build: "tsup",
45
+ dev: "bun run build && NODE_ENV=development node bin/expo-release-it.mjs",
46
+ release: "yarn build && release-it",
47
+ android: "expo run:android",
48
+ ios: "expo run:ios",
49
+ t: "tsc --noEmit -p ."
50
+ },
51
+ dependencies: {
52
+ "@inquirer/prompts": "^7.4.1",
53
+ "@mj-studio/js-util": "^1.1.20",
54
+ chalk: "^5.4.1",
55
+ commander: "^13.1.0",
56
+ "fs-extra": "^11.3.0",
57
+ react: "18.3.1",
58
+ "react-native": "0.76.9",
59
+ semver: "^7.7.1",
60
+ url: "^0.11.4",
61
+ zx: "^8.5.3"
62
+ },
63
+ devDependencies: {
64
+ "@types/bun": "latest",
65
+ "@types/fs-extra": "^11.0.4",
66
+ "@types/semver": "^7.7.0",
67
+ prettier: "3.5.3",
68
+ "release-it": "^19.0.1",
69
+ "tiny-glob": "^0.2.9",
70
+ tsup: "^8.4.0",
71
+ typescript: "^5.8.3"
72
+ },
73
+ workspaces: [
74
+ "example"
75
+ ],
76
+ bin: "./bin/expo-release-it.mjs",
77
+ files: [
78
+ "build",
79
+ "package.json",
80
+ "bin",
81
+ "template"
82
+ ],
83
+ packageManager: "yarn@4.9.1"
84
+ };
85
+
86
+ // src/util/OptionHolder.ts
87
+ import { fileURLToPath } from "url";
88
+ var OptionHolder = {
89
+ cli: {
90
+ version: package_default.version,
91
+ rootDir: resolve2(fileURLToPath(import.meta.url), "../.."),
92
+ templateDir: resolve2(fileURLToPath(import.meta.url), "../../template")
93
+ },
94
+ init: {},
95
+ bump: {},
96
+ build: {},
97
+ upload: {},
98
+ submit: {},
99
+ templateValuePlaceholderMap: {},
100
+ keyholderFileValueMap: {},
101
+ templateDirNames: ["fastlane-android", "fastlane-ios", "key"],
102
+ iosBundleIdentifier: "",
103
+ androidPackageName: "",
104
+ projectDir: "",
105
+ outputOfInitDir: "",
106
+ keyDir: "",
107
+ keyholderFilePath: "",
108
+ versionName: "",
109
+ versionCode: ""
110
+ };
111
+
112
+ // src/util/logger.ts
113
+ import chalk from "chalk";
114
+ var logger = {
115
+ success: (...msg) => console.log(chalk.green(`\u2714 ${msg.join(", ")}`)),
116
+ error: (...msg) => console.log(chalk.red(`\u2716 ${msg.join(", ")}`)),
117
+ warn: (...msg) => console.log(chalk.yellow(`\u26A0 ${msg.join(", ")}`)),
118
+ info: (...msg) => console.log(chalk.cyan(`\u2139 ${msg.join(", ")}`)),
119
+ title: (...msg) => console.log(chalk.bold.blue(`
120
+ ${msg.join(", ")}`)),
121
+ dim: (...msg) => console.log(chalk.dim(msg.join(", ")))
122
+ };
123
+
124
+ // src/util/setup/prepareIos.ts
125
+ async function prepareIos() {
126
+ const iosDir = resolve2(OptionHolder.projectDir, "ios");
127
+ const fastlaneSrcDir = resolve2(OptionHolder.outputOfInitDir, "fastlane-ios");
128
+ const fastlaneDestDir = resolve2(OptionHolder.projectDir, "ios", "fastlane");
129
+ await spinner(
130
+ "Prebuild iOS",
131
+ () => $`cd ${OptionHolder.projectDir} && expo prebuild -p ios --no-install`
132
+ );
133
+ remove(fastlaneDestDir);
134
+ await iterateDir(fastlaneSrcDir, async (file) => {
135
+ const filePath = resolve2(fastlaneSrcDir, file);
136
+ remove(resolve2(iosDir, file));
137
+ copy(filePath, resolve2(iosDir, file));
138
+ });
139
+ logger.success("Inject iOS Fastlane files");
140
+ }
141
+ export {
142
+ prepareIos
143
+ };
144
+ //# sourceMappingURL=prepareIos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/util/setup/prepareIos.ts","../../../src/util/FileUtil.ts","../../../package.json","../../../src/util/OptionHolder.ts","../../../src/util/logger.ts"],"sourcesContent":["import { $, spinner } from 'zx';\nimport { remove, resolve, iterateDir, copy } from '../FileUtil';\nimport { OptionHolder } from '../OptionHolder';\nimport { logger } from '../logger';\n\nexport async function prepareIos() {\n const iosDir = resolve(OptionHolder.projectDir, 'ios');\n const fastlaneSrcDir = resolve(OptionHolder.outputOfInitDir, 'fastlane-ios');\n const fastlaneDestDir = resolve(OptionHolder.projectDir, 'ios', 'fastlane');\n\n await spinner(\n 'Prebuild iOS',\n () => $`cd ${OptionHolder.projectDir} && expo prebuild -p ios --no-install`,\n );\n\n remove(fastlaneDestDir);\n\n await iterateDir(fastlaneSrcDir, async (file) => {\n const filePath = resolve(fastlaneSrcDir, file);\n remove(resolve(iosDir, file));\n copy(filePath, resolve(iosDir, file));\n });\n\n logger.success('Inject iOS Fastlane files');\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.0.12\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"bun run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"fs-extra\": \"^11.3.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\",\n \"zx\": \"^8.5.3\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport type { BuildOptions } from '../command/build';\nimport type { InitOptions } from '../command/init';\nimport type { BumpOptions } from '../command/bump';\nimport type { SubmitOptions } from '../command/submit';\nimport type { UploadOptions } from '../command/upload';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n init: InitOptions;\n bump: BumpOptions;\n build: BuildOptions;\n upload: UploadOptions;\n submit: SubmitOptions;\n\n templateValuePlaceholderMap: {\n ios_app_identifier: string;\n ios_app_store_connect_team_id: 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 android_package_name: string;\n key_dir_relative_path: string;\n };\n keyholderFileValueMap: {\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n ios_match_password: string;\n };\n iosBundleIdentifier: string;\n androidPackageName: string;\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n init: {} as any,\n bump: {} as any,\n build: {} as any,\n upload: {} as any,\n submit: {} as any,\n templateValuePlaceholderMap: {} as any,\n keyholderFileValueMap: {} as any,\n templateDirNames: ['fastlane-android', 'fastlane-ios', 'key'],\n iosBundleIdentifier: '',\n androidPackageName: '',\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n};\n","import chalk from 'chalk';\n\nexport const logger = {\n success: (...msg: any[]) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),\n error: (...msg: any[]) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),\n warn: (...msg: any[]) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),\n info: (...msg: any[]) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),\n title: (...msg: any[]) => console.log(chalk.bold.blue(`\\n${msg.join(', ')}`)),\n dim: (...msg: any[]) => console.log(chalk.dim(msg.join(', '))),\n};\n"],"mappings":"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","names":["resolve","path","path","resolve","resolve"]}
@@ -0,0 +1,3 @@
1
+ declare function promptCommonInputs(): Promise<void>;
2
+
3
+ export { promptCommonInputs };
@@ -1,22 +1,114 @@
1
- import { OptionHolder } from '../OptionHolder';
2
- import { input } from '@inquirer/prompts';
3
- import { isDev } from '../EnvUtil';
4
- import { exist, resolve } from '../FileUtil';
5
- export async function promptCommonInputs() {
6
- OptionHolder.rootDir = isDev
7
- ? resolve('example')
8
- : resolve(await input({
9
- message: 'react native project root directory path',
10
- default: isDev ? 'example' : '.',
11
- validate: (value) => {
12
- const p = resolve(value, 'package.json');
13
- if (!exist(p)) {
14
- return "package.json hasn\'t been detected. provider valid project root.";
15
- }
16
- return true;
17
- },
18
- }));
19
- OptionHolder.outDir = resolve(OptionHolder.rootDir, 'expo-local-build');
20
- OptionHolder.keyDir = resolve(OptionHolder.outDir, 'key');
21
- OptionHolder.keyholderFilePath = resolve(OptionHolder.outDir, 'keyholder.json');
1
+ // package.json
2
+ var package_default = {
3
+ name: "expo-release-it",
4
+ module: "src/index.ts",
5
+ type: "module",
6
+ version: "0.0.12",
7
+ license: "MIT",
8
+ scripts: {
9
+ build: "tsup",
10
+ dev: "bun run build && NODE_ENV=development node bin/expo-release-it.mjs",
11
+ release: "yarn build && release-it",
12
+ android: "expo run:android",
13
+ ios: "expo run:ios",
14
+ t: "tsc --noEmit -p ."
15
+ },
16
+ dependencies: {
17
+ "@inquirer/prompts": "^7.4.1",
18
+ "@mj-studio/js-util": "^1.1.20",
19
+ chalk: "^5.4.1",
20
+ commander: "^13.1.0",
21
+ "fs-extra": "^11.3.0",
22
+ react: "18.3.1",
23
+ "react-native": "0.76.9",
24
+ semver: "^7.7.1",
25
+ url: "^0.11.4",
26
+ zx: "^8.5.3"
27
+ },
28
+ devDependencies: {
29
+ "@types/bun": "latest",
30
+ "@types/fs-extra": "^11.0.4",
31
+ "@types/semver": "^7.7.0",
32
+ prettier: "3.5.3",
33
+ "release-it": "^19.0.1",
34
+ "tiny-glob": "^0.2.9",
35
+ tsup: "^8.4.0",
36
+ typescript: "^5.8.3"
37
+ },
38
+ workspaces: [
39
+ "example"
40
+ ],
41
+ bin: "./bin/expo-release-it.mjs",
42
+ files: [
43
+ "build",
44
+ "package.json",
45
+ "bin",
46
+ "template"
47
+ ],
48
+ packageManager: "yarn@4.9.1"
49
+ };
50
+
51
+ // src/util/FileUtil.ts
52
+ import fs from "fs-extra";
53
+ import * as path from "path";
54
+ var resolve2 = path.resolve;
55
+ function exist(path2) {
56
+ return fs.existsSync(path2);
22
57
  }
58
+
59
+ // src/util/OptionHolder.ts
60
+ import { fileURLToPath } from "url";
61
+ var OptionHolder = {
62
+ cli: {
63
+ version: package_default.version,
64
+ rootDir: resolve2(fileURLToPath(import.meta.url), "../.."),
65
+ templateDir: resolve2(fileURLToPath(import.meta.url), "../../template")
66
+ },
67
+ init: {},
68
+ bump: {},
69
+ build: {},
70
+ upload: {},
71
+ submit: {},
72
+ templateValuePlaceholderMap: {},
73
+ keyholderFileValueMap: {},
74
+ templateDirNames: ["fastlane-android", "fastlane-ios", "key"],
75
+ iosBundleIdentifier: "",
76
+ androidPackageName: "",
77
+ projectDir: "",
78
+ outputOfInitDir: "",
79
+ keyDir: "",
80
+ keyholderFilePath: "",
81
+ versionName: "",
82
+ versionCode: ""
83
+ };
84
+
85
+ // src/util/setup/promptCommonInputs.ts
86
+ import { input } from "@inquirer/prompts";
87
+
88
+ // src/util/EnvUtil.ts
89
+ var isDev = process.env.NODE_ENV === "development";
90
+ var isWin = process.platform.startsWith("win");
91
+
92
+ // src/util/setup/promptCommonInputs.ts
93
+ async function promptCommonInputs() {
94
+ OptionHolder.projectDir = isDev ? resolve2("example") : resolve2(
95
+ await input({
96
+ message: "react native project root directory path",
97
+ default: isDev ? "example" : ".",
98
+ validate: (value) => {
99
+ const p = resolve2(value, "package.json");
100
+ if (!exist(p)) {
101
+ return "package.json hasn't been detected. provider valid project root.";
102
+ }
103
+ return true;
104
+ }
105
+ })
106
+ );
107
+ OptionHolder.outputOfInitDir = resolve2(OptionHolder.projectDir, "expo-local-build");
108
+ OptionHolder.keyDir = resolve2(OptionHolder.outputOfInitDir, "key");
109
+ OptionHolder.keyholderFilePath = resolve2(OptionHolder.outputOfInitDir, "keyholder.json");
110
+ }
111
+ export {
112
+ promptCommonInputs
113
+ };
114
+ //# sourceMappingURL=promptCommonInputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../package.json","../../../src/util/FileUtil.ts","../../../src/util/OptionHolder.ts","../../../src/util/setup/promptCommonInputs.ts","../../../src/util/EnvUtil.ts"],"sourcesContent":["{\n \"name\": \"expo-release-it\",\n \"module\": \"src/index.ts\",\n \"type\": \"module\",\n \"version\": \"0.0.12\",\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"bun run build && NODE_ENV=development node bin/expo-release-it.mjs\",\n \"release\": \"yarn build && release-it\",\n \"android\": \"expo run:android\",\n \"ios\": \"expo run:ios\",\n \"t\": \"tsc --noEmit -p .\"\n },\n \"dependencies\": {\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@mj-studio/js-util\": \"^1.1.20\",\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"fs-extra\": \"^11.3.0\",\n \"react\": \"18.3.1\",\n \"react-native\": \"0.76.9\",\n \"semver\": \"^7.7.1\",\n \"url\": \"^0.11.4\",\n \"zx\": \"^8.5.3\"\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/semver\": \"^7.7.0\",\n \"prettier\": \"3.5.3\",\n \"release-it\": \"^19.0.1\",\n \"tiny-glob\": \"^0.2.9\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"^5.8.3\"\n },\n \"workspaces\": [\n \"example\"\n ],\n \"bin\": \"./bin/expo-release-it.mjs\",\n \"files\": [\n \"build\",\n \"package.json\",\n \"bin\",\n \"template\"\n ],\n \"packageManager\": \"yarn@4.9.1\"\n}\n","import fs from 'fs-extra';\nimport * as path from 'path';\n\nexport const join = path.join;\nexport const resolve = path.resolve;\n\nexport function exist(path: string) {\n return fs.existsSync(path);\n}\n\nexport function isDir(path: string) {\n return exist(path) && fs.lstatSync(path).isDirectory();\n}\n\nexport function relativePath(from: string, to: string) {\n return path.relative(from, to);\n}\n\nexport function isFile(path: string) {\n return exist(path) && fs.lstatSync(path).isFile();\n}\n\nexport function read(path: string) {\n return fs.readFileSync(path, { encoding: 'utf8' });\n}\n\nexport function readdir(path: string) {\n return fs.readdirSync(path);\n}\n\n// you should require when possible(optimized in js)\nexport function readJsonSlow(path: string) {\n return fs.readJSONSync(path);\n}\n\nexport function write(p: string, content: string) {\n const dir = path.dirname(p);\n if (!exist(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n return fs.writeFileSync(p, content);\n}\nexport function copy(src: string, dest: string, options?: fs.CopyOptionsSync) {\n fs.copySync(src, dest, options);\n}\n\nexport function writeJson(path: string, json: any) {\n return write(path, JSON.stringify(json, null, 2));\n}\n\nexport function remove(path: string) {\n if (!exist(path)) {\n return;\n }\n\n if (fs.lstatSync(path).isDirectory()) {\n return fs.rmSync(path, { force: true, recursive: true });\n } else {\n return fs.rmSync(path, { force: true });\n }\n}\n\nexport async function iterateDir(path: string, fn: (file: string) => Promise<void> | void) {\n if (!isDir(path)) {\n return;\n }\n\n for (const file of fs.readdirSync(path)) {\n await fn(file);\n }\n}\n","import pkgJson from '../../package.json';\nimport { resolve } from './FileUtil';\nimport type { BuildOptions } from '../command/build';\nimport type { InitOptions } from '../command/init';\nimport type { BumpOptions } from '../command/bump';\nimport type { SubmitOptions } from '../command/submit';\nimport type { UploadOptions } from '../command/upload';\nimport { fileURLToPath } from 'url';\n\n/**\n * CLI Comprehensive options\n * Each values can be empty by command and timing.\n */\nexport const OptionHolder: {\n // cli specific options\n cli: {\n // cli version\n version: string;\n // cli project root directory\n rootDir: string;\n // cli template source directory\n templateDir: string;\n };\n init: InitOptions;\n bump: BumpOptions;\n build: BuildOptions;\n upload: UploadOptions;\n submit: SubmitOptions;\n\n templateValuePlaceholderMap: {\n ios_app_identifier: string;\n ios_app_store_connect_team_id: 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 android_package_name: string;\n key_dir_relative_path: string;\n };\n keyholderFileValueMap: {\n android_keystore_store_password: string;\n android_keystore_key_alias: string;\n android_keystore_key_password: string;\n ios_match_password: string;\n };\n iosBundleIdentifier: string;\n androidPackageName: string;\n templateDirNames: string[];\n // dest project root directory\n projectDir: string;\n // dest project output of init command direcotry\n outputOfInitDir: string;\n keyDir: string;\n keyholderFilePath: string;\n versionName: string;\n versionCode: string;\n} = {\n cli: {\n version: pkgJson.version,\n rootDir: resolve(fileURLToPath(import.meta.url), '../..'),\n templateDir: resolve(fileURLToPath(import.meta.url), '../../template'),\n },\n init: {} as any,\n bump: {} as any,\n build: {} as any,\n upload: {} as any,\n submit: {} as any,\n templateValuePlaceholderMap: {} as any,\n keyholderFileValueMap: {} as any,\n templateDirNames: ['fastlane-android', 'fastlane-ios', 'key'],\n iosBundleIdentifier: '',\n androidPackageName: '',\n projectDir: '',\n outputOfInitDir: '',\n keyDir: '',\n keyholderFilePath: '',\n versionName: '',\n versionCode: '',\n};\n","import { OptionHolder } from '../OptionHolder';\nimport { input } from '@inquirer/prompts';\nimport { isDev } from '../EnvUtil';\nimport { exist, resolve } from '../FileUtil';\n\nexport async function promptCommonInputs() {\n OptionHolder.projectDir = isDev\n ? resolve('example')\n : resolve(\n await input({\n message: 'react native project root directory path',\n default: isDev ? 'example' : '.',\n validate: (value) => {\n const p = resolve(value, 'package.json');\n if (!exist(p)) {\n return \"package.json hasn\\'t been detected. provider valid project root.\";\n }\n return true;\n },\n }),\n );\n\n OptionHolder.outputOfInitDir = resolve(OptionHolder.projectDir, 'expo-local-build');\n OptionHolder.keyDir = resolve(OptionHolder.outputOfInitDir, 'key');\n OptionHolder.keyholderFilePath = resolve(OptionHolder.outputOfInitDir, 'keyholder.json');\n}\n","export const isDev = process.env.NODE_ENV === 'development';\nexport const isWin = process.platform.startsWith('win');\n"],"mappings":";AAAA;AAAA,EACE,MAAQ;AAAA,EACR,QAAU;AAAA,EACV,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,SAAW;AAAA,EACX,SAAW;AAAA,IACT,OAAS;AAAA,IACT,KAAO;AAAA,IACP,SAAW;AAAA,IACX,SAAW;AAAA,IACX,KAAO;AAAA,IACP,GAAK;AAAA,EACP;AAAA,EACA,cAAgB;AAAA,IACd,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,OAAS;AAAA,IACT,WAAa;AAAA,IACb,YAAY;AAAA,IACZ,OAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,QAAU;AAAA,IACV,KAAO;AAAA,IACP,IAAM;AAAA,EACR;AAAA,EACA,iBAAmB;AAAA,IACjB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAY;AAAA,IACZ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,MAAQ;AAAA,IACR,YAAc;AAAA,EAChB;AAAA,EACA,YAAc;AAAA,IACZ;AAAA,EACF;AAAA,EACA,KAAO;AAAA,EACP,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,gBAAkB;AACpB;;;AC/CA,OAAO,QAAQ;AACf,YAAY,UAAU;AAGf,IAAMA,WAAe;AAErB,SAAS,MAAMC,OAAc;AAClC,SAAO,GAAG,WAAWA,KAAI;AAC3B;;;ACDA,SAAS,qBAAqB;AAMvB,IAAM,eA4CT;AAAA,EACF,KAAK;AAAA,IACH,SAAS,gBAAQ;AAAA,IACjB,SAASC,SAAQ,cAAc,YAAY,GAAG,GAAG,OAAO;AAAA,IACxD,aAAaA,SAAQ,cAAc,YAAY,GAAG,GAAG,gBAAgB;AAAA,EACvE;AAAA,EACA,MAAM,CAAC;AAAA,EACP,MAAM,CAAC;AAAA,EACP,OAAO,CAAC;AAAA,EACR,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,6BAA6B,CAAC;AAAA,EAC9B,uBAAuB,CAAC;AAAA,EACxB,kBAAkB,CAAC,oBAAoB,gBAAgB,KAAK;AAAA,EAC5D,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,aAAa;AACf;;;AC9EA,SAAS,aAAa;;;ACDf,IAAM,QAAQ,QAAQ,IAAI,aAAa;AACvC,IAAM,QAAQ,QAAQ,SAAS,WAAW,KAAK;;;ADItD,eAAsB,qBAAqB;AACzC,eAAa,aAAa,QACtBC,SAAQ,SAAS,IACjBA;AAAA,IACE,MAAM,MAAM;AAAA,MACV,SAAS;AAAA,MACT,SAAS,QAAQ,YAAY;AAAA,MAC7B,UAAU,CAAC,UAAU;AACnB,cAAM,IAAIA,SAAQ,OAAO,cAAc;AACvC,YAAI,CAAC,MAAM,CAAC,GAAG;AACb,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AAEJ,eAAa,kBAAkBA,SAAQ,aAAa,YAAY,kBAAkB;AAClF,eAAa,SAASA,SAAQ,aAAa,iBAAiB,KAAK;AACjE,eAAa,oBAAoBA,SAAQ,aAAa,iBAAiB,gBAAgB;AACzF;","names":["resolve","path","resolve","resolve"]}
@@ -0,0 +1,3 @@
1
+ declare function setup(): Promise<void>;
2
+
3
+ export { setup };