expo-release-it 0.0.10 → 0.0.11

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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../build/index.js';
@@ -1,39 +1,33 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.build = build;
7
- const prompts_1 = require("@inquirer/prompts");
8
- const prepareAndroid_1 = require("../util/setup/prepareAndroid");
9
- const setup_1 = require("../util/setup/setup");
10
- const prepareIos_1 = require("../util/setup/prepareIos");
11
- const logger_1 = require("../util/logger");
12
- const OptionHolder_1 = require("../util/OptionHolder");
13
- const zx_1 = require("zx");
14
- const FileUtil_1 = require("../util/FileUtil");
15
- const chalk_1 = __importDefault(require("chalk"));
16
- const calculateElapsed_1 = require("../util/calculateElapsed");
17
- const EnvUtil_1 = require("../util/EnvUtil");
18
- async function build({ options }) {
19
- Object.assign(OptionHolder_1.OptionHolder.build, options);
1
+ import { select } from '@inquirer/prompts';
2
+ import { prepareAndroid } from '../util/setup/prepareAndroid';
3
+ import { setup } from '../util/setup/setup';
4
+ import { prepareIos } from '../util/setup/prepareIos';
5
+ import { logger } from '../util/logger';
6
+ import { OptionHolder } from '../util/OptionHolder';
7
+ import { spinner, $ } from 'zx';
8
+ import { resolve, remove } from '../util/FileUtil';
9
+ import chalk from 'chalk';
10
+ import { calculateElapsed } from '../util/calculateElapsed';
11
+ import { isWin } from '../util/EnvUtil';
12
+ export async function build({ options }) {
13
+ Object.assign(OptionHolder.build, options);
20
14
  const startTime = Date.now();
21
- await (0, setup_1.setup)();
15
+ await setup();
22
16
  await promptInputs();
23
- logger_1.logger.info('Build Started');
24
- logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
25
- if (OptionHolder_1.OptionHolder.build.platform === 'ios') {
17
+ logger.info('Build Started');
18
+ logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
19
+ if (OptionHolder.build.platform === 'ios') {
26
20
  await buildIos();
27
- logger_1.logger.success(`iOS Build ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
21
+ logger.success(`iOS Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);
28
22
  }
29
23
  else {
30
24
  await buildAndroid();
31
- logger_1.logger.success(`Android Build ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
25
+ logger.success(`Android Build ${chalk.bold.inverse(calculateElapsed(startTime))}`);
32
26
  }
33
27
  }
34
28
  async function promptInputs() {
35
- if (!OptionHolder_1.OptionHolder.build.platform) {
36
- OptionHolder_1.OptionHolder.build.platform = await (0, prompts_1.select)({
29
+ if (!OptionHolder.build.platform) {
30
+ OptionHolder.build.platform = await select({
37
31
  message: 'Platform to release',
38
32
  choices: [
39
33
  { name: 'ios', value: 'ios', description: 'Release ios' },
@@ -41,8 +35,8 @@ async function promptInputs() {
41
35
  ],
42
36
  });
43
37
  }
44
- if (OptionHolder_1.OptionHolder.build.platform === 'ios') {
45
- OptionHolder_1.OptionHolder.build.pod = await (0, prompts_1.select)({
38
+ if (OptionHolder.build.platform === 'ios') {
39
+ OptionHolder.build.pod = await select({
46
40
  message: 'Install Cocoapods',
47
41
  choices: [
48
42
  { name: 'yes', value: true, description: 'Install pods before release' },
@@ -52,36 +46,36 @@ async function promptInputs() {
52
46
  }
53
47
  }
54
48
  async function buildIos() {
55
- const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
56
- const $$ = (0, zx_1.$)({
49
+ const iosDir = resolve(OptionHolder.rootDir, 'ios');
50
+ const $$ = $({
57
51
  verbose: false,
58
52
  cwd: iosDir,
59
53
  env: {
60
- MATCH_PASSWORD: OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password,
54
+ MATCH_PASSWORD: OptionHolder.keyholderFileValueMap.ios_match_password,
61
55
  },
62
56
  });
63
- await (0, prepareIos_1.prepareIos)();
57
+ await prepareIos();
64
58
  await fastlane();
65
59
  async function fastlane() {
66
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
67
- logger_1.logger.success('Bundler Install');
68
- if (OptionHolder_1.OptionHolder.build.pod) {
69
- await (0, zx_1.spinner)('Pod Install', () => $$ `bundle exec pod install`);
70
- logger_1.logger.success('Pod Install');
60
+ await spinner('Bundler Install', () => $$ `bundle install`);
61
+ logger.success('Bundler Install');
62
+ if (OptionHolder.build.pod) {
63
+ await spinner('Pod Install', () => $$ `bundle exec pod install`);
64
+ logger.success('Pod Install');
71
65
  }
72
- (0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, '.xcode.env.local'));
73
- await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane build version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
66
+ remove(resolve(iosDir, '.xcode.env.local'));
67
+ await spinner('Fastlane', () => $$ `bundle exec fastlane build version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
74
68
  }
75
69
  }
76
70
  async function buildAndroid() {
77
- const $$ = (0, zx_1.$)({
71
+ const $$ = $({
78
72
  verbose: false,
79
- cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
73
+ cwd: resolve(OptionHolder.rootDir, 'android'),
80
74
  });
81
- await (0, prepareAndroid_1.prepareAndroid)();
75
+ await prepareAndroid();
82
76
  await fastlane();
83
77
  async function fastlane() {
84
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
85
- await (0, zx_1.spinner)('Bundle AAB', () => $$ `${EnvUtil_1.isWin ? 'gradle.bat' : './gradlew'} app:bundleRelease`);
78
+ await spinner('Bundler Install', () => $$ `bundle install`);
79
+ await spinner('Bundle AAB', () => $$ `${isWin ? 'gradle.bat' : './gradlew'} app:bundleRelease`);
86
80
  }
87
81
  }
@@ -1,44 +1,38 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.bump = bump;
7
- const VersionUtil_1 = require("../util/VersionUtil");
8
- const throwError_1 = require("../util/throwError");
9
- const logger_1 = require("../util/logger");
10
- const OptionHolder_1 = require("../util/OptionHolder");
11
- const semver_1 = __importDefault(require("semver"));
12
- const EnvUtil_1 = require("../util/EnvUtil");
13
- const zx_1 = require("zx");
14
- const setup_1 = require("../util/setup/setup");
15
- async function bump({ options }) {
16
- Object.assign(OptionHolder_1.OptionHolder.bump, options);
1
+ import { injectBinaryVersions } from '../util/VersionUtil';
2
+ import { throwError } from '../util/throwError';
3
+ import { logger } from '../util/logger';
4
+ import { OptionHolder } from '../util/OptionHolder';
5
+ import semver from 'semver';
6
+ import { isDev } from '../util/EnvUtil';
7
+ import { $ } from 'zx';
8
+ import { setup } from '../util/setup/setup';
9
+ export async function bump({ options }) {
10
+ Object.assign(OptionHolder.bump, options);
17
11
  await preCheck();
18
- await (0, setup_1.setup)();
19
- logger_1.logger.info(`current version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
20
- const nextVersionName = semver_1.default.inc(OptionHolder_1.OptionHolder.versionName, 'patch');
21
- const nextVersionCode = Number(OptionHolder_1.OptionHolder.versionCode) + 1 + '';
22
- logger_1.logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);
23
- await (0, VersionUtil_1.injectBinaryVersions)({ versionName: nextVersionName, versionCode: nextVersionCode });
24
- logger_1.logger.success('Binary versions have been bumped in expo config file');
12
+ await setup();
13
+ logger.info(`current version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
14
+ const nextVersionName = semver.inc(OptionHolder.versionName, 'patch');
15
+ const nextVersionCode = Number(OptionHolder.versionCode) + 1 + '';
16
+ logger.info(`next version: ${nextVersionName}(${nextVersionCode})`);
17
+ await injectBinaryVersions({ versionName: nextVersionName, versionCode: nextVersionCode });
18
+ logger.success('Binary versions have been bumped in expo config file');
25
19
  }
26
20
  async function preCheck() {
27
- if (EnvUtil_1.isDev)
21
+ if (isDev)
28
22
  return;
29
23
  try {
30
24
  let hasChange = false;
31
25
  try {
32
- await (0, zx_1.$) `git diff --quiet HEAD`;
26
+ await $ `git diff --quiet HEAD`;
33
27
  }
34
28
  catch (_) {
35
29
  hasChange = true;
36
30
  }
37
31
  if (hasChange) {
38
- (0, throwError_1.throwError)('Workspace is not clean. Before bump version, you should commit all changes.');
32
+ throwError('Workspace is not clean. Before bump version, you should commit all changes.');
39
33
  }
40
34
  }
41
35
  catch (e) {
42
- (0, throwError_1.throwError)('Precheck Failed', e);
36
+ throwError('Precheck Failed', e);
43
37
  }
44
38
  }
@@ -1,106 +1,100 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.init = init;
7
- const OptionHolder_1 = require("../util/OptionHolder");
8
- const logger_1 = require("../util/logger");
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const prompts_1 = require("@inquirer/prompts");
11
- const iterateAllFilesInGeneratedTemplate_1 = require("../util/iterateAllFilesInGeneratedTemplate");
12
- const EnvUtil_1 = require("../util/EnvUtil");
13
- const VersionUtil_1 = require("../util/VersionUtil");
14
- const promptCommonInputs_1 = require("../util/setup/promptCommonInputs");
15
- const FileUtil_1 = require("../util/FileUtil");
16
- const zx_1 = require("zx");
17
- async function init({ options }) {
18
- Object.assign(OptionHolder_1.OptionHolder.init, options);
19
- logger_1.logger.info(`${chalk_1.default.inverse('expo-local-build')}`);
20
- await (0, promptCommonInputs_1.promptCommonInputs)();
21
- await (0, VersionUtil_1.parseBinaryVersions)();
1
+ import { OptionHolder } from '../util/OptionHolder';
2
+ import { logger } from '../util/logger';
3
+ import chalk from 'chalk';
4
+ import { input } from '@inquirer/prompts';
5
+ import { iterateAllFilesInGeneratedTemplate } from '../util/iterateAllFilesInGeneratedTemplate';
6
+ import { isDev } from '../util/EnvUtil';
7
+ import { parseBinaryVersions } from '../util/VersionUtil';
8
+ import { promptCommonInputs } from '../util/setup/promptCommonInputs';
9
+ import { exist, remove, copy, read, write, join, writeJson } from '../util/FileUtil';
10
+ import { path } from 'zx';
11
+ export async function init({ options }) {
12
+ Object.assign(OptionHolder.init, options);
13
+ logger.info(`${chalk.inverse('expo-local-build')}`);
14
+ await promptCommonInputs();
15
+ await parseBinaryVersions();
22
16
  await promptInputs();
23
17
  await copyTemplates();
24
18
  await injectPlaceHolders();
25
- logger_1.logger.success('expo-local-build init success');
19
+ logger.success('expo-local-build init success');
26
20
  }
27
21
  async function promptInputs() {
28
22
  /* ios */
29
- OptionHolder_1.OptionHolder.iosBundleIdentifier = OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_identifier =
30
- await (0, prompts_1.input)({
23
+ OptionHolder.iosBundleIdentifier = OptionHolder.templateValuePlaceholderMap.ios_app_identifier =
24
+ await input({
31
25
  message: 'IOS Bundle Identifier',
32
26
  required: true,
33
- default: EnvUtil_1.isDev ? 'ios_app_identifier' : undefined,
27
+ default: isDev ? 'ios_app_identifier' : undefined,
34
28
  });
35
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_team_id = await (0, prompts_1.input)({
29
+ OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_team_id = await input({
36
30
  message: 'IOS App Store Connect Team Id',
37
- default: EnvUtil_1.isDev ? 'ios_app_store_connect_team_id' : undefined,
31
+ default: isDev ? 'ios_app_store_connect_team_id' : undefined,
38
32
  });
39
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_developer_team_id = await (0, prompts_1.input)({
33
+ OptionHolder.templateValuePlaceholderMap.ios_developer_team_id = await input({
40
34
  message: 'IOS Developer Portal Team Id',
41
- default: EnvUtil_1.isDev ? 'ios_developer_team_id' : undefined,
35
+ default: isDev ? 'ios_developer_team_id' : undefined,
42
36
  });
43
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_match_git_url = await (0, prompts_1.input)({
37
+ OptionHolder.templateValuePlaceholderMap.ios_match_git_url = await input({
44
38
  message: 'IOS Match Key Storage Github URL',
45
- default: EnvUtil_1.isDev ? 'ios_match_git_url' : undefined,
39
+ default: isDev ? 'ios_match_git_url' : undefined,
46
40
  });
47
- OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password = await (0, prompts_1.input)({
41
+ OptionHolder.keyholderFileValueMap.ios_match_password = await input({
48
42
  message: 'IOS Match Password',
49
- default: EnvUtil_1.isDev ? 'ios_match_password' : undefined,
43
+ default: isDev ? 'ios_match_password' : undefined,
50
44
  });
51
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_id = await (0, prompts_1.input)({
45
+ OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_id = await input({
52
46
  message: 'IOS App Store Connect Api Key Id',
53
- default: EnvUtil_1.isDev ? 'ios_app_store_connect_api_key_id' : undefined,
47
+ default: isDev ? 'ios_app_store_connect_api_key_id' : undefined,
54
48
  });
55
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_issuer_id = await (0, prompts_1.input)({
49
+ OptionHolder.templateValuePlaceholderMap.ios_app_store_connect_api_key_issuer_id = await input({
56
50
  message: 'IOS App Store Connect Api Key Issuer Id',
57
- default: EnvUtil_1.isDev ? 'ios_app_store_connect_api_key_issuer_id' : undefined,
51
+ default: isDev ? 'ios_app_store_connect_api_key_issuer_id' : undefined,
58
52
  });
59
- OptionHolder_1.OptionHolder.templateValuePlaceholderMap.ios_xcode_project_target = await (0, prompts_1.input)({
53
+ OptionHolder.templateValuePlaceholderMap.ios_xcode_project_target = await input({
60
54
  message: 'IOS Xcode Target Name',
61
55
  default: 'app',
62
56
  });
63
57
  /* android */
64
- OptionHolder_1.OptionHolder.androidPackageName = OptionHolder_1.OptionHolder.templateValuePlaceholderMap.android_package_name =
65
- await (0, prompts_1.input)({
58
+ OptionHolder.androidPackageName = OptionHolder.templateValuePlaceholderMap.android_package_name =
59
+ await input({
66
60
  message: 'Android Package Name',
67
- default: EnvUtil_1.isDev ? 'android_package_name' : undefined,
61
+ default: isDev ? 'android_package_name' : undefined,
68
62
  });
69
- OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_store_password = await (0, prompts_1.input)({
63
+ OptionHolder.keyholderFileValueMap.android_keystore_store_password = await input({
70
64
  message: 'Android Keystore Store Password',
71
- default: EnvUtil_1.isDev ? 'android_keystore_store_password' : undefined,
65
+ default: isDev ? 'android_keystore_store_password' : undefined,
72
66
  });
73
- OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_key_alias = await (0, prompts_1.input)({
67
+ OptionHolder.keyholderFileValueMap.android_keystore_key_alias = await input({
74
68
  message: 'Android Keystore Key Alias',
75
- default: EnvUtil_1.isDev ? 'android_keystore_key_alias' : undefined,
69
+ default: isDev ? 'android_keystore_key_alias' : undefined,
76
70
  });
77
- OptionHolder_1.OptionHolder.keyholderFileValueMap.android_keystore_key_password = await (0, prompts_1.input)({
71
+ OptionHolder.keyholderFileValueMap.android_keystore_key_password = await input({
78
72
  message: 'Android Keystore Key Password',
79
- default: EnvUtil_1.isDev ? 'android_keystore_key_password' : undefined,
73
+ default: isDev ? 'android_keystore_key_password' : undefined,
80
74
  });
81
- (0, FileUtil_1.writeJson)(OptionHolder_1.OptionHolder.keyholderFilePath, OptionHolder_1.OptionHolder.keyholderFileValueMap);
75
+ writeJson(OptionHolder.keyholderFilePath, OptionHolder.keyholderFileValueMap);
82
76
  }
83
77
  async function copyTemplates() {
84
- for (const dir of OptionHolder_1.OptionHolder.templateDirNames) {
78
+ for (const dir of OptionHolder.templateDirNames) {
85
79
  await copyDirRecursively(dir);
86
80
  }
87
81
  async function copyDirRecursively(dir) {
88
- const sourceDirPath = (0, FileUtil_1.join)(OptionHolder_1.OptionHolder.cli.templateDir, dir);
89
- const destDirPath = (0, FileUtil_1.join)(OptionHolder_1.OptionHolder.outDir, dir);
90
- if ((0, FileUtil_1.exist)(destDirPath)) {
91
- (0, FileUtil_1.remove)(destDirPath);
82
+ const sourceDirPath = join(OptionHolder.cli.templateDir, dir);
83
+ const destDirPath = join(OptionHolder.outDir, dir);
84
+ if (exist(destDirPath)) {
85
+ remove(destDirPath);
92
86
  }
93
- (0, FileUtil_1.copy)(sourceDirPath, destDirPath);
87
+ copy(sourceDirPath, destDirPath);
94
88
  }
95
89
  }
96
90
  async function injectPlaceHolders() {
97
- await (0, iterateAllFilesInGeneratedTemplate_1.iterateAllFilesInGeneratedTemplate)(async (filePath) => {
98
- let content = (0, FileUtil_1.read)(filePath);
99
- for (const [key, value] of Object.entries(OptionHolder_1.OptionHolder.templateValuePlaceholderMap)) {
91
+ await iterateAllFilesInGeneratedTemplate(async (filePath) => {
92
+ let content = read(filePath);
93
+ for (const [key, value] of Object.entries(OptionHolder.templateValuePlaceholderMap)) {
100
94
  content = content.replaceAll(`{{${key}}}`, value);
101
95
  }
102
96
  // dynamic replace
103
- content = content.replaceAll('{{key_dir_relative_path}}', zx_1.path.relative(filePath, OptionHolder_1.OptionHolder.keyDir));
104
- (0, FileUtil_1.write)(filePath, content);
97
+ content = content.replaceAll('{{key_dir_relative_path}}', path.relative(filePath, OptionHolder.keyDir));
98
+ write(filePath, content);
105
99
  });
106
100
  }
@@ -1,38 +1,32 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.submit = submit;
7
- const setup_1 = require("../util/setup/setup");
8
- const prompts_1 = require("@inquirer/prompts");
9
- const logger_1 = require("../util/logger");
10
- const OptionHolder_1 = require("../util/OptionHolder");
11
- const chalk_1 = __importDefault(require("chalk"));
12
- const calculateElapsed_1 = require("../util/calculateElapsed");
13
- const zx_1 = require("zx");
14
- const prepareAndroid_1 = require("../util/setup/prepareAndroid");
15
- const FileUtil_1 = require("../util/FileUtil");
16
- const prepareIos_1 = require("../util/setup/prepareIos");
17
- async function submit({ options }) {
18
- Object.assign(OptionHolder_1.OptionHolder.submit, options);
1
+ import { setup } from '../util/setup/setup';
2
+ import { select } from '@inquirer/prompts';
3
+ import { logger } from '../util/logger';
4
+ import { OptionHolder } from '../util/OptionHolder';
5
+ import chalk from 'chalk';
6
+ import { calculateElapsed } from '../util/calculateElapsed';
7
+ import { spinner, $ } from 'zx';
8
+ import { prepareAndroid } from '../util/setup/prepareAndroid';
9
+ import { remove, resolve } from '../util/FileUtil';
10
+ import { prepareIos } from '../util/setup/prepareIos';
11
+ export async function submit({ options }) {
12
+ Object.assign(OptionHolder.submit, options);
19
13
  const startTime = Date.now();
20
- await (0, setup_1.setup)();
14
+ await setup();
21
15
  await promptInputs();
22
- logger_1.logger.info('Submit Started');
23
- logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
24
- if (OptionHolder_1.OptionHolder.submit.platform === 'ios') {
16
+ logger.info('Submit Started');
17
+ logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
18
+ if (OptionHolder.submit.platform === 'ios') {
25
19
  await submitIos();
26
- logger_1.logger.success(`Appstore Review Submitted ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
20
+ logger.success(`Appstore Review Submitted ${chalk.bold.inverse(calculateElapsed(startTime))}`);
27
21
  }
28
22
  else {
29
23
  await submitAndroid();
30
- logger_1.logger.success(`Playstore Review Submitted ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
24
+ logger.success(`Playstore Review Submitted ${chalk.bold.inverse(calculateElapsed(startTime))}`);
31
25
  }
32
26
  }
33
27
  async function promptInputs() {
34
- if (!OptionHolder_1.OptionHolder.submit.platform) {
35
- OptionHolder_1.OptionHolder.submit.platform = await (0, prompts_1.select)({
28
+ if (!OptionHolder.submit.platform) {
29
+ OptionHolder.submit.platform = await select({
36
30
  message: 'Platform to submit',
37
31
  choices: [
38
32
  { name: 'ios', value: 'ios', description: 'Release ios' },
@@ -42,30 +36,30 @@ async function promptInputs() {
42
36
  }
43
37
  }
44
38
  async function submitAndroid() {
45
- const $$ = (0, zx_1.$)({
39
+ const $$ = $({
46
40
  verbose: false,
47
- cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
41
+ cwd: resolve(OptionHolder.rootDir, 'android'),
48
42
  });
49
- await (0, prepareAndroid_1.prepareAndroid)();
43
+ await prepareAndroid();
50
44
  await fastlane();
51
45
  async function fastlane() {
52
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
53
- logger_1.logger.success('Bundler Install');
54
- await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane submit_playstore_review version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
46
+ await spinner('Bundler Install', () => $$ `bundle install`);
47
+ logger.success('Bundler Install');
48
+ await spinner('Fastlane', () => $$ `bundle exec fastlane submit_playstore_review version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
55
49
  }
56
50
  }
57
51
  async function submitIos() {
58
- const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
59
- const $$ = (0, zx_1.$)({
52
+ const iosDir = resolve(OptionHolder.rootDir, 'ios');
53
+ const $$ = $({
60
54
  verbose: false,
61
55
  cwd: iosDir,
62
56
  });
63
- await (0, prepareIos_1.prepareIos)();
57
+ await prepareIos();
64
58
  await fastlane();
65
59
  async function fastlane() {
66
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
67
- logger_1.logger.success('Bundler Install');
68
- (0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, '.xcode.env.local'));
69
- await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane submit_appstore_review version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
60
+ await spinner('Bundler Install', () => $$ `bundle install`);
61
+ logger.success('Bundler Install');
62
+ remove(resolve(iosDir, '.xcode.env.local'));
63
+ await spinner('Fastlane', () => $$ `bundle exec fastlane submit_appstore_review version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
70
64
  }
71
65
  }
@@ -1,38 +1,32 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.upload = upload;
7
- const prompts_1 = require("@inquirer/prompts");
8
- const prepareAndroid_1 = require("../util/setup/prepareAndroid");
9
- const setup_1 = require("../util/setup/setup");
10
- const prepareIos_1 = require("../util/setup/prepareIos");
11
- const logger_1 = require("../util/logger");
12
- const OptionHolder_1 = require("../util/OptionHolder");
13
- const zx_1 = require("zx");
14
- const FileUtil_1 = require("../util/FileUtil");
15
- const chalk_1 = __importDefault(require("chalk"));
16
- const calculateElapsed_1 = require("../util/calculateElapsed");
17
- async function upload({ options }) {
18
- Object.assign(OptionHolder_1.OptionHolder.upload, options);
1
+ import { select } from '@inquirer/prompts';
2
+ import { prepareAndroid } from '../util/setup/prepareAndroid';
3
+ import { setup } from '../util/setup/setup';
4
+ import { prepareIos } from '../util/setup/prepareIos';
5
+ import { logger } from '../util/logger';
6
+ import { OptionHolder } from '../util/OptionHolder';
7
+ import { spinner, $ } from 'zx';
8
+ import { resolve } from '../util/FileUtil';
9
+ import chalk from 'chalk';
10
+ import { calculateElapsed } from '../util/calculateElapsed';
11
+ export async function upload({ options }) {
12
+ Object.assign(OptionHolder.upload, options);
19
13
  const startTime = Date.now();
20
- await (0, setup_1.setup)();
14
+ await setup();
21
15
  await promptInputs();
22
- logger_1.logger.info('Build & Upload Started');
23
- logger_1.logger.info(`Version: ${OptionHolder_1.OptionHolder.versionName}(${OptionHolder_1.OptionHolder.versionCode})`);
24
- if (OptionHolder_1.OptionHolder.upload.platform === 'ios') {
16
+ logger.info('Build & Upload Started');
17
+ logger.info(`Version: ${OptionHolder.versionName}(${OptionHolder.versionCode})`);
18
+ if (OptionHolder.upload.platform === 'ios') {
25
19
  await uploadIos();
26
- logger_1.logger.success(`iOS Upload ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
20
+ logger.success(`iOS Upload ${chalk.bold.inverse(calculateElapsed(startTime))}`);
27
21
  }
28
22
  else {
29
23
  await uploadAndroid();
30
- logger_1.logger.success(`Android Upload ${chalk_1.default.bold.inverse((0, calculateElapsed_1.calculateElapsed)(startTime))}`);
24
+ logger.success(`Android Upload ${chalk.bold.inverse(calculateElapsed(startTime))}`);
31
25
  }
32
26
  }
33
27
  async function promptInputs() {
34
- if (!OptionHolder_1.OptionHolder.upload.platform) {
35
- OptionHolder_1.OptionHolder.upload.platform = await (0, prompts_1.select)({
28
+ if (!OptionHolder.upload.platform) {
29
+ OptionHolder.upload.platform = await select({
36
30
  message: 'Platform to release',
37
31
  choices: [
38
32
  { name: 'ios', value: 'ios', description: 'Release ios' },
@@ -42,32 +36,32 @@ async function promptInputs() {
42
36
  }
43
37
  }
44
38
  async function uploadIos() {
45
- const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
46
- const $$ = (0, zx_1.$)({
39
+ const iosDir = resolve(OptionHolder.rootDir, 'ios');
40
+ const $$ = $({
47
41
  verbose: false,
48
42
  cwd: iosDir,
49
43
  env: {
50
- MATCH_PASSWORD: OptionHolder_1.OptionHolder.keyholderFileValueMap.ios_match_password,
44
+ MATCH_PASSWORD: OptionHolder.keyholderFileValueMap.ios_match_password,
51
45
  },
52
46
  });
53
- await (0, prepareIos_1.prepareIos)();
47
+ await prepareIos();
54
48
  await fastlane();
55
49
  async function fastlane() {
56
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
57
- logger_1.logger.success('Bundler Install');
58
- await (0, zx_1.spinner)('Fastlane', () => $$ `bundle exec fastlane upload version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
50
+ await spinner('Bundler Install', () => $$ `bundle install`);
51
+ logger.success('Bundler Install');
52
+ await spinner('Fastlane', () => $$ `bundle exec fastlane upload version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
59
53
  }
60
54
  }
61
55
  async function uploadAndroid() {
62
- const $$ = (0, zx_1.$)({
56
+ const $$ = $({
63
57
  verbose: false,
64
- cwd: (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android'),
58
+ cwd: resolve(OptionHolder.rootDir, 'android'),
65
59
  });
66
- await (0, prepareAndroid_1.prepareAndroid)();
60
+ await prepareAndroid();
67
61
  await fastlane();
68
62
  async function fastlane() {
69
- await (0, zx_1.spinner)('Bundler Install', () => $$ `bundle install`);
70
- logger_1.logger.success('Bundler Install');
71
- await (0, zx_1.spinner)('Fastlane Supply', () => $$ `bundle exec fastlane deploy version_name:${OptionHolder_1.OptionHolder.versionName} version_code:${OptionHolder_1.OptionHolder.versionCode}`);
63
+ await spinner('Bundler Install', () => $$ `bundle install`);
64
+ logger.success('Bundler Install');
65
+ await spinner('Fastlane Supply', () => $$ `bundle exec fastlane deploy version_name:${OptionHolder.versionName} version_code:${OptionHolder.versionCode}`);
72
66
  }
73
67
  }
package/build/index.js CHANGED
@@ -1,30 +1,28 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const commander_1 = require("commander");
4
- const init_1 = require("./command/init");
5
- const OptionHolder_1 = require("./util/OptionHolder");
6
- const logger_1 = require("./util/logger");
7
- const bump_1 = require("./command/bump");
8
- const upload_1 = require("./command/upload");
9
- const submit_1 = require("./command/submit");
10
- const platformOption = new commander_1.Option('-p --platform <platform>', 'Platform').choices([
1
+ import { Command, Option } from 'commander';
2
+ import { init } from './command/init';
3
+ import { OptionHolder } from './util/OptionHolder';
4
+ import { logger } from './util/logger';
5
+ import { bump } from './command/bump';
6
+ import { upload } from './command/upload';
7
+ import { submit } from './command/submit';
8
+ const platformOption = new Option('-p --platform <platform>', 'Platform').choices([
11
9
  'android',
12
10
  'ios',
13
11
  ]);
14
- const program = new commander_1.Command();
12
+ const program = new Command();
15
13
  program
16
14
  .name('expo-release-it')
17
15
  .description('Build & Upload & Submit locally for Expo project')
18
- .version(OptionHolder_1.OptionHolder.cli.version);
16
+ .version(OptionHolder.cli.version);
19
17
  program
20
18
  .command('init')
21
19
  .description('Initialize CLI utilities')
22
20
  .action(async (options) => {
23
21
  try {
24
- await (0, init_1.init)({ options });
22
+ await init({ options });
25
23
  }
26
24
  catch (e) {
27
- logger_1.logger.error(e);
25
+ logger.error(e);
28
26
  }
29
27
  });
30
28
  program
@@ -34,27 +32,27 @@ program
34
32
  // new Option('-i --increment <type>', 'increment type').choices(['major', 'minor', 'patch']),
35
33
  // )
36
34
  .action(async (options) => {
37
- await (0, bump_1.bump)({ options });
35
+ await bump({ options });
38
36
  });
39
37
  program
40
38
  .command('build')
41
39
  .description('Build binary')
42
40
  .addOption(platformOption)
43
41
  .action(async (options) => {
44
- await (0, upload_1.upload)({ options });
42
+ await upload({ options });
45
43
  });
46
44
  program
47
45
  .command('upload')
48
46
  .description('Upload artifact to play console internal test track(android) and testflight(ios)')
49
47
  .addOption(platformOption)
50
48
  .action(async (options) => {
51
- await (0, upload_1.upload)({ options });
49
+ await upload({ options });
52
50
  });
53
51
  program
54
52
  .command('submit')
55
53
  .description('Submit Google Play Console & App Store Connect Review with latest testing track')
56
54
  .addOption(platformOption)
57
55
  .action(async (options) => {
58
- await (0, submit_1.submit)({ options });
56
+ await submit({ options });
59
57
  });
60
58
  program.parse();
@@ -1,5 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isWin = exports.isDev = void 0;
4
- exports.isDev = process.env.NODE_ENV === 'development';
5
- exports.isWin = process.platform.startsWith('win');
1
+ export const isDev = process.env.NODE_ENV === 'development';
2
+ export const isWin = process.platform.startsWith('win');
@@ -1,106 +1,56 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.filename = exports.resolve = exports.join = void 0;
40
- exports.exist = exist;
41
- exports.isDir = isDir;
42
- exports.isFile = isFile;
43
- exports.read = read;
44
- exports.readdir = readdir;
45
- exports.readJsonSlow = readJsonSlow;
46
- exports.write = write;
47
- exports.copy = copy;
48
- exports.writeJson = writeJson;
49
- exports.remove = remove;
50
- exports.iterateDir = iterateDir;
51
- const fs_extra_1 = __importDefault(require("fs-extra"));
52
- const path = __importStar(require("path"));
53
- exports.join = path.join;
54
- exports.resolve = path.resolve;
55
- exports.filename = path.basename(__filename);
56
- function exist(path) {
57
- return fs_extra_1.default.existsSync(path);
1
+ import fs from 'fs-extra';
2
+ import * as path from 'path';
3
+ export const join = path.join;
4
+ export const resolve = path.resolve;
5
+ export const filename = path.basename(__filename);
6
+ export function exist(path) {
7
+ return fs.existsSync(path);
58
8
  }
59
- function isDir(path) {
60
- return exist(path) && fs_extra_1.default.lstatSync(path).isDirectory();
9
+ export function isDir(path) {
10
+ return exist(path) && fs.lstatSync(path).isDirectory();
61
11
  }
62
- function isFile(path) {
63
- return exist(path) && fs_extra_1.default.lstatSync(path).isFile();
12
+ export function isFile(path) {
13
+ return exist(path) && fs.lstatSync(path).isFile();
64
14
  }
65
- function read(path) {
66
- return fs_extra_1.default.readFileSync(path, { encoding: 'utf8' });
15
+ export function read(path) {
16
+ return fs.readFileSync(path, { encoding: 'utf8' });
67
17
  }
68
- function readdir(path) {
69
- return fs_extra_1.default.readdirSync(path);
18
+ export function readdir(path) {
19
+ return fs.readdirSync(path);
70
20
  }
71
21
  // you should require when possible(optimized in js)
72
- function readJsonSlow(path) {
73
- return fs_extra_1.default.readJSONSync(path);
22
+ export function readJsonSlow(path) {
23
+ return fs.readJSONSync(path);
74
24
  }
75
- function write(p, content) {
25
+ export function write(p, content) {
76
26
  const dir = path.dirname(p);
77
27
  if (!exist(dir)) {
78
- fs_extra_1.default.mkdirSync(dir, { recursive: true });
28
+ fs.mkdirSync(dir, { recursive: true });
79
29
  }
80
- return fs_extra_1.default.writeFileSync(p, content);
30
+ return fs.writeFileSync(p, content);
81
31
  }
82
- function copy(src, dest) {
83
- fs_extra_1.default.copySync(src, dest);
32
+ export function copy(src, dest) {
33
+ fs.copySync(src, dest);
84
34
  }
85
- function writeJson(path, json) {
35
+ export function writeJson(path, json) {
86
36
  return write(path, JSON.stringify(json, null, 2));
87
37
  }
88
- function remove(path) {
38
+ export function remove(path) {
89
39
  if (!exist(path)) {
90
40
  return;
91
41
  }
92
- if (fs_extra_1.default.lstatSync(path).isDirectory()) {
93
- return fs_extra_1.default.rmSync(path, { force: true, recursive: true });
42
+ if (fs.lstatSync(path).isDirectory()) {
43
+ return fs.rmSync(path, { force: true, recursive: true });
94
44
  }
95
45
  else {
96
- return fs_extra_1.default.rmSync(path, { force: true });
46
+ return fs.rmSync(path, { force: true });
97
47
  }
98
48
  }
99
- async function iterateDir(path, fn) {
49
+ export async function iterateDir(path, fn) {
100
50
  if (!isDir(path)) {
101
51
  return;
102
52
  }
103
- for (const file of fs_extra_1.default.readdirSync(path)) {
53
+ for (const file of fs.readdirSync(path)) {
104
54
  await fn(file);
105
55
  }
106
56
  }
@@ -1,15 +1,9 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.logger = void 0;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- exports.logger = {
9
- success: (...msg) => console.log(chalk_1.default.green(`✔ ${msg.join(', ')}`)),
10
- error: (...msg) => console.log(chalk_1.default.red(`✖ ${msg.join(', ')}`)),
11
- warn: (...msg) => console.log(chalk_1.default.yellow(`⚠ ${msg.join(', ')}`)),
12
- info: (...msg) => console.log(chalk_1.default.cyan(`ℹ ${msg.join(', ')}`)),
13
- title: (...msg) => console.log(chalk_1.default.bold.blue(`\n${msg.join(', ')}`)),
14
- dim: (...msg) => console.log(chalk_1.default.dim(msg.join(', '))),
1
+ import chalk from 'chalk';
2
+ export const logger = {
3
+ success: (...msg) => console.log(chalk.green(`✔ ${msg.join(', ')}`)),
4
+ error: (...msg) => console.log(chalk.red(`✖ ${msg.join(', ')}`)),
5
+ warn: (...msg) => console.log(chalk.yellow(`⚠ ${msg.join(', ')}`)),
6
+ info: (...msg) => console.log(chalk.cyan(`ℹ ${msg.join(', ')}`)),
7
+ title: (...msg) => console.log(chalk.bold.blue(`\n${msg.join(', ')}`)),
8
+ dim: (...msg) => console.log(chalk.dim(msg.join(', '))),
15
9
  };
@@ -1,20 +1,14 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OptionHolder = void 0;
7
- const package_json_1 = __importDefault(require("../../package.json"));
8
- const FileUtil_1 = require("./FileUtil");
1
+ import pkgJson from '../../package.json';
2
+ import { resolve } from './FileUtil';
9
3
  /**
10
4
  * CLI Comprehensive options
11
5
  * Each values can be empty by command and timing.
12
6
  */
13
- exports.OptionHolder = {
7
+ export const OptionHolder = {
14
8
  cli: {
15
- version: package_json_1.default.version,
16
- rootDir: (0, FileUtil_1.resolve)(__dirname, '../..'),
17
- templateDir: (0, FileUtil_1.resolve)(__dirname, '../../template'),
9
+ version: pkgJson.version,
10
+ rootDir: resolve(__dirname, '../..'),
11
+ templateDir: resolve(__dirname, '../../template'),
18
12
  },
19
13
  init: {},
20
14
  bump: {},
@@ -1,16 +1,9 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.parseBinaryVersions = parseBinaryVersions;
7
- exports.injectBinaryVersions = injectBinaryVersions;
8
- const OptionHolder_1 = require("./OptionHolder");
9
- const throwError_1 = require("./throwError");
10
- const semver_1 = __importDefault(require("semver"));
11
- const FileUtil_1 = require("./FileUtil");
12
- async function parseBinaryVersions() {
13
- const files = (0, FileUtil_1.readdir)(OptionHolder_1.OptionHolder.rootDir);
1
+ import { OptionHolder } from './OptionHolder';
2
+ import { throwError } from './throwError';
3
+ import semver from 'semver';
4
+ import { readdir, read, readJsonSlow, write, writeJson, resolve } from './FileUtil';
5
+ export async function parseBinaryVersions() {
6
+ const files = readdir(OptionHolder.rootDir);
14
7
  const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];
15
8
  const jsonConfigFile = 'app.json';
16
9
  for (const jsConfigFile of jsConfigFiles) {
@@ -23,48 +16,48 @@ async function parseBinaryVersions() {
23
16
  await parseFromJsonConfigFile(jsonConfigFile);
24
17
  return;
25
18
  }
26
- (0, throwError_1.throwError)('expo config file not found');
19
+ throwError('expo config file not found');
27
20
  async function parseFromJsConfigFile(filename) {
28
- const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
29
- const content = (0, FileUtil_1.read)(filePath);
21
+ const filePath = resolve(OptionHolder.rootDir, filename);
22
+ const content = read(filePath);
30
23
  const VERSION_NAME = /const VERSION_NAME = '(.*?)';/.exec(content)?.[1];
31
24
  const VERSION_CODE = /const VERSION_CODE = (.*?);/.exec(content)?.[1];
32
25
  if (!VERSION_NAME) {
33
- (0, throwError_1.throwError)('cannot parse version name');
26
+ throwError('cannot parse version name');
34
27
  }
35
28
  if (!VERSION_CODE) {
36
- (0, throwError_1.throwError)('cannot parse version code');
29
+ throwError('cannot parse version code');
37
30
  }
38
- if (!semver_1.default.valid(VERSION_NAME)) {
39
- (0, throwError_1.throwError)('VERSION_NAME is not a valid semver format');
31
+ if (!semver.valid(VERSION_NAME)) {
32
+ throwError('VERSION_NAME is not a valid semver format');
40
33
  }
41
- OptionHolder_1.OptionHolder.versionName = VERSION_NAME;
42
- OptionHolder_1.OptionHolder.versionCode = VERSION_CODE;
34
+ OptionHolder.versionName = VERSION_NAME;
35
+ OptionHolder.versionCode = VERSION_CODE;
43
36
  }
44
37
  async function parseFromJsonConfigFile(filename) {
45
- const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
46
- const json = (0, FileUtil_1.readJsonSlow)(filePath);
38
+ const filePath = resolve(OptionHolder.rootDir, filename);
39
+ const json = readJsonSlow(filePath);
47
40
  const versionName = json.expo?.version + '';
48
41
  const iosVersionCode = json.expo?.ios?.buildNumber + '';
49
42
  const androidVersionCode = json.expo?.android?.versionCode + '';
50
43
  if (!/\d+/.test(iosVersionCode)) {
51
- (0, throwError_1.throwError)('app.json expo.ios.buildNumber is not an integer');
44
+ throwError('app.json expo.ios.buildNumber is not an integer');
52
45
  }
53
46
  if (!/\d+/.test(androidVersionCode)) {
54
- (0, throwError_1.throwError)('app.json expo.android.versionCode is not an integer');
47
+ throwError('app.json expo.android.versionCode is not an integer');
55
48
  }
56
49
  if (iosVersionCode !== androidVersionCode) {
57
- (0, throwError_1.throwError)('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');
50
+ throwError('app.json expo.ios.buildNumber is not equal with expo.android.versionCode');
58
51
  }
59
- if (!semver_1.default.valid(versionName)) {
60
- (0, throwError_1.throwError)('VERSION_NAME is not a valid semver format');
52
+ if (!semver.valid(versionName)) {
53
+ throwError('VERSION_NAME is not a valid semver format');
61
54
  }
62
- OptionHolder_1.OptionHolder.versionName = versionName;
63
- OptionHolder_1.OptionHolder.versionCode = iosVersionCode;
55
+ OptionHolder.versionName = versionName;
56
+ OptionHolder.versionCode = iosVersionCode;
64
57
  }
65
58
  }
66
- async function injectBinaryVersions({ versionCode, versionName, }) {
67
- const files = (0, FileUtil_1.readdir)(OptionHolder_1.OptionHolder.rootDir);
59
+ export async function injectBinaryVersions({ versionCode, versionName, }) {
60
+ const files = readdir(OptionHolder.rootDir);
68
61
  const jsConfigFiles = ['app.config.ts', 'app.config.js', 'app.config.cjs', 'app.config.mjs'];
69
62
  const jsonConfigFile = 'app.json';
70
63
  for (const jsConfigFile of jsConfigFiles) {
@@ -77,20 +70,20 @@ async function injectBinaryVersions({ versionCode, versionName, }) {
77
70
  await injectToJsonConfigFile(jsonConfigFile);
78
71
  return;
79
72
  }
80
- (0, throwError_1.throwError)('expo config file not found');
73
+ throwError('expo config file not found');
81
74
  async function injectToJsConfigFile(filename) {
82
- const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
83
- let content = (0, FileUtil_1.read)(filePath);
75
+ const filePath = resolve(OptionHolder.rootDir, filename);
76
+ let content = read(filePath);
84
77
  content = content.replace(/const VERSION_NAME = '(.*?)';/, `const VERSION_NAME = '${versionName}';`);
85
78
  content = content.replace(/const VERSION_CODE = (.*?);/, `const VERSION_CODE = ${versionCode};`);
86
- (0, FileUtil_1.write)(filePath, content);
79
+ write(filePath, content);
87
80
  }
88
81
  async function injectToJsonConfigFile(filename) {
89
- const filePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, filename);
90
- const json = (0, FileUtil_1.readJsonSlow)(filePath);
82
+ const filePath = resolve(OptionHolder.rootDir, filename);
83
+ const json = readJsonSlow(filePath);
91
84
  json.expo.version = versionName;
92
85
  json.expo.ios.buildNumber = versionCode;
93
86
  json.expo.android.versionCode = +versionCode;
94
- (0, FileUtil_1.writeJson)(filePath, json);
87
+ writeJson(filePath, json);
95
88
  }
96
89
  }
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.calculateElapsed = calculateElapsed;
4
- const js_util_1 = require("@mj-studio/js-util");
5
- function calculateElapsed(t) {
1
+ import { padZero } from '@mj-studio/js-util';
2
+ export function calculateElapsed(t) {
6
3
  let seconds = Math.floor((Date.now() - t) / 1000);
7
4
  const minutes = Math.floor(seconds / 60);
8
5
  seconds = seconds % 60;
9
- return `${minutes}:${(0, js_util_1.padZero)(seconds)}`;
6
+ return `${minutes}:${padZero(seconds)}`;
10
7
  }
@@ -1,8 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.hydrateKeyholderFileValues = hydrateKeyholderFileValues;
4
- const OptionHolder_1 = require("./OptionHolder");
5
- const FileUtil_1 = require("./FileUtil");
6
- async function hydrateKeyholderFileValues() {
7
- Object.assign(OptionHolder_1.OptionHolder.keyholderFileValueMap, (0, FileUtil_1.readJsonSlow)(OptionHolder_1.OptionHolder.keyholderFilePath));
1
+ import { OptionHolder } from './OptionHolder';
2
+ import { readJsonSlow } from './FileUtil';
3
+ export async function hydrateKeyholderFileValues() {
4
+ Object.assign(OptionHolder.keyholderFileValueMap, readJsonSlow(OptionHolder.keyholderFilePath));
8
5
  }
@@ -1,19 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.iterateAllFilesInGeneratedTemplate = iterateAllFilesInGeneratedTemplate;
4
- const OptionHolder_1 = require("./OptionHolder");
5
- const FileUtil_1 = require("./FileUtil");
6
- async function iterateAllFilesInGeneratedTemplate(callback) {
7
- for (const dir of OptionHolder_1.OptionHolder.templateDirNames) {
8
- await go((0, FileUtil_1.join)(OptionHolder_1.OptionHolder.outDir, dir));
1
+ import { OptionHolder } from './OptionHolder';
2
+ import { readdir, isFile, isDir, join } from './FileUtil';
3
+ export async function iterateAllFilesInGeneratedTemplate(callback) {
4
+ for (const dir of OptionHolder.templateDirNames) {
5
+ await go(join(OptionHolder.outDir, dir));
9
6
  }
10
7
  async function go(dirPath) {
11
- const paths = (0, FileUtil_1.readdir)(dirPath).map((f) => (0, FileUtil_1.join)(dirPath, f));
8
+ const paths = readdir(dirPath).map((f) => join(dirPath, f));
12
9
  for (const p of paths) {
13
- if ((0, FileUtil_1.isFile)(p)) {
10
+ if (isFile(p)) {
14
11
  await callback(p);
15
12
  }
16
- else if ((0, FileUtil_1.isDir)(p)) {
13
+ else if (isDir(p)) {
17
14
  await go(p);
18
15
  }
19
16
  }
@@ -1,37 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareAndroid = prepareAndroid;
4
- const zx_1 = require("zx");
5
- const FileUtil_1 = require("../FileUtil");
6
- const OptionHolder_1 = require("../OptionHolder");
7
- const logger_1 = require("../logger");
8
- async function prepareAndroid() {
9
- const androidDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android');
10
- const fastlaneSrcDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'fastlane-android');
11
- const fastlaneDestDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'android', 'fastlane');
12
- await (0, zx_1.spinner)('Prebuild Android', () => (0, zx_1.$) `cd ${OptionHolder_1.OptionHolder.rootDir} && expo prebuild -p android --no-install`);
13
- (0, FileUtil_1.remove)(fastlaneDestDir);
14
- await (0, FileUtil_1.iterateDir)(fastlaneSrcDir, async (file) => {
15
- const filePath = (0, FileUtil_1.resolve)(fastlaneSrcDir, file);
16
- (0, FileUtil_1.remove)((0, FileUtil_1.resolve)(androidDir, file));
17
- (0, FileUtil_1.copy)(filePath, (0, FileUtil_1.resolve)(androidDir, file));
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));
18
15
  });
19
- logger_1.logger.success('Inject Android Fastlane files');
16
+ logger.success('Inject Android Fastlane files');
20
17
  await replaceAndroidSigningConfig();
21
18
  async function replaceAndroidSigningConfig() {
22
- const buildGradlePath = (0, FileUtil_1.resolve)(androidDir, 'app', 'build.gradle');
23
- const { android_keystore_store_password, android_keystore_key_alias, android_keystore_key_password, } = OptionHolder_1.OptionHolder.keyholderFileValueMap;
24
- const content = (0, FileUtil_1.read)(buildGradlePath).replace(/signingConfigs.*?{.*?debug.*?{.*?}.*?}/s, `
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, `
25
22
  signingConfigs {
26
23
  debug {
27
- storeFile file('${zx_1.path.relative(buildGradlePath, (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'key', 'android_release_keystore.jks'))}')
24
+ storeFile file('${path.relative(buildGradlePath, resolve(OptionHolder.outDir, 'key', 'android_release_keystore.jks'))}')
28
25
  storePassword '${android_keystore_store_password}'
29
26
  keyAlias '${android_keystore_key_alias}'
30
27
  keyPassword '${android_keystore_key_password}'
31
28
  }
32
29
  }
33
30
  `);
34
- (0, FileUtil_1.write)(buildGradlePath, content);
35
- logger_1.logger.success('Replace Android Signing Config');
31
+ write(buildGradlePath, content);
32
+ logger.success('Replace Android Signing Config');
36
33
  }
37
34
  }
@@ -1,20 +1,17 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareIos = prepareIos;
4
- const zx_1 = require("zx");
5
- const FileUtil_1 = require("../FileUtil");
6
- const OptionHolder_1 = require("../OptionHolder");
7
- const logger_1 = require("../logger");
8
- async function prepareIos() {
9
- const iosDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios');
10
- const fastlaneSrcDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'fastlane-ios');
11
- const fastlaneDestDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'ios', 'fastlane');
12
- await (0, zx_1.spinner)('Prebuild iOS', () => (0, zx_1.$) `cd ${OptionHolder_1.OptionHolder.rootDir} && expo prebuild -p ios --no-install`);
13
- (0, FileUtil_1.remove)(fastlaneDestDir);
14
- await (0, FileUtil_1.iterateDir)(fastlaneSrcDir, async (file) => {
15
- const filePath = (0, FileUtil_1.resolve)(fastlaneSrcDir, file);
16
- (0, FileUtil_1.remove)((0, FileUtil_1.resolve)(iosDir, file));
17
- (0, FileUtil_1.copy)(filePath, (0, FileUtil_1.resolve)(iosDir, file));
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));
18
15
  });
19
- logger_1.logger.success('Inject iOS Fastlane files');
16
+ logger.success('Inject iOS Fastlane files');
20
17
  }
@@ -1,25 +1,22 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.promptCommonInputs = promptCommonInputs;
4
- const OptionHolder_1 = require("../OptionHolder");
5
- const prompts_1 = require("@inquirer/prompts");
6
- const EnvUtil_1 = require("../EnvUtil");
7
- const FileUtil_1 = require("../FileUtil");
8
- async function promptCommonInputs() {
9
- OptionHolder_1.OptionHolder.rootDir = EnvUtil_1.isDev
10
- ? (0, FileUtil_1.resolve)('example')
11
- : (0, FileUtil_1.resolve)(await (0, prompts_1.input)({
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({
12
9
  message: 'react native project root directory path',
13
- default: EnvUtil_1.isDev ? 'example' : '.',
10
+ default: isDev ? 'example' : '.',
14
11
  validate: (value) => {
15
- const p = (0, FileUtil_1.resolve)(value, 'package.json');
16
- if (!(0, FileUtil_1.exist)(p)) {
12
+ const p = resolve(value, 'package.json');
13
+ if (!exist(p)) {
17
14
  return "package.json hasn\'t been detected. provider valid project root.";
18
15
  }
19
16
  return true;
20
17
  },
21
18
  }));
22
- OptionHolder_1.OptionHolder.outDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.rootDir, 'expo-local-build');
23
- OptionHolder_1.OptionHolder.keyDir = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'key');
24
- OptionHolder_1.OptionHolder.keyholderFilePath = (0, FileUtil_1.resolve)(OptionHolder_1.OptionHolder.outDir, 'keyholder.json');
19
+ OptionHolder.outDir = resolve(OptionHolder.rootDir, 'expo-local-build');
20
+ OptionHolder.keyDir = resolve(OptionHolder.outDir, 'key');
21
+ OptionHolder.keyholderFilePath = resolve(OptionHolder.outDir, 'keyholder.json');
25
22
  }
@@ -1,11 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setup = setup;
4
- const promptCommonInputs_1 = require("./promptCommonInputs");
5
- const hydrateKeyholderFileValues_1 = require("../hydrateKeyholderFileValues");
6
- const VersionUtil_1 = require("../VersionUtil");
7
- async function setup() {
8
- await (0, promptCommonInputs_1.promptCommonInputs)();
9
- await (0, hydrateKeyholderFileValues_1.hydrateKeyholderFileValues)();
10
- await (0, VersionUtil_1.parseBinaryVersions)();
1
+ import { promptCommonInputs } from './promptCommonInputs';
2
+ import { hydrateKeyholderFileValues } from '../hydrateKeyholderFileValues';
3
+ import { parseBinaryVersions } from '../VersionUtil';
4
+ export async function setup() {
5
+ await promptCommonInputs();
6
+ await hydrateKeyholderFileValues();
7
+ await parseBinaryVersions();
11
8
  }
@@ -1,13 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.throwError = throwError;
4
- const logger_1 = require("./logger");
5
- function throwError(message, e) {
1
+ import { logger } from './logger';
2
+ export function throwError(message, e) {
6
3
  if (e) {
7
- logger_1.logger.error(message, e);
4
+ logger.error(message, e);
8
5
  }
9
6
  else {
10
- logger_1.logger.error(message);
7
+ logger.error(message);
11
8
  }
12
9
  process.exit(1);
13
10
  }
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "expo-release-it",
3
3
  "module": "src/index.ts",
4
- "type": "commonjs",
5
- "version": "0.0.10",
4
+ "type": "module",
5
+ "version": "0.0.11",
6
6
  "license": "MIT",
7
7
  "scripts": {
8
8
  "build": "tsc",
@@ -35,7 +35,7 @@
35
35
  "workspaces": [
36
36
  "example"
37
37
  ],
38
- "bin": "./bin/expo-release-it.cjs",
38
+ "bin": "./bin/expo-release-it.mjs",
39
39
  "files": [
40
40
  "build",
41
41
  "package.json",
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- require('../build');