You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
255 lines
8.5 KiB
255 lines
8.5 KiB
#!/usr/bin/env node
|
|
"use strict";
|
|
var _arg = _interopRequireDefault(require("arg"));
|
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
var _debug = _interopRequireDefault(require("debug"));
|
|
var _getenv = require("getenv");
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
function _interopRequireWildcard(obj) {
|
|
if (obj && obj.__esModule) {
|
|
return obj;
|
|
} else {
|
|
var newObj = {};
|
|
if (obj != null) {
|
|
for(var key in obj){
|
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
if (desc.get || desc.set) {
|
|
Object.defineProperty(newObj, key, desc);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
newObj.default = obj;
|
|
return newObj;
|
|
}
|
|
}
|
|
// Setup before requiring `debug`.
|
|
if ((0, _getenv).boolish("EXPO_DEBUG", false)) {
|
|
_debug.default.enable("expo:*");
|
|
} else if (_debug.default.enabled("expo:")) {
|
|
process.env.EXPO_DEBUG = "1";
|
|
}
|
|
const defaultCmd = "start";
|
|
const commands = {
|
|
// Add a new command here
|
|
"run:ios": ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/run/ios"));
|
|
}).then((i)=>i.expoRunIos
|
|
)
|
|
,
|
|
"run:android": ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/run/android"));
|
|
}).then((i)=>i.expoRunAndroid
|
|
)
|
|
,
|
|
start: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/start"));
|
|
}).then((i)=>i.expoStart
|
|
)
|
|
,
|
|
prebuild: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/prebuild"));
|
|
}).then((i)=>i.expoPrebuild
|
|
)
|
|
,
|
|
config: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/config"));
|
|
}).then((i)=>i.expoConfig
|
|
)
|
|
,
|
|
export: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/export"));
|
|
}).then((i)=>i.expoExport
|
|
)
|
|
,
|
|
"export:web": ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/export/web"));
|
|
}).then((i)=>i.expoExportWeb
|
|
)
|
|
,
|
|
// Auxiliary commands
|
|
install: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/install"));
|
|
}).then((i)=>i.expoInstall
|
|
)
|
|
,
|
|
customize: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/customize"));
|
|
}).then((i)=>i.expoCustomize
|
|
)
|
|
,
|
|
// Auth
|
|
login: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/login"));
|
|
}).then((i)=>i.expoLogin
|
|
)
|
|
,
|
|
logout: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/logout"));
|
|
}).then((i)=>i.expoLogout
|
|
)
|
|
,
|
|
register: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/register"));
|
|
}).then((i)=>i.expoRegister
|
|
)
|
|
,
|
|
whoami: ()=>Promise.resolve().then(function() {
|
|
return _interopRequireWildcard(require("../src/whoami"));
|
|
}).then((i)=>i.expoWhoami
|
|
)
|
|
};
|
|
const args = (0, _arg).default({
|
|
// Types
|
|
"--version": Boolean,
|
|
"--help": Boolean,
|
|
// NOTE(EvanBacon): This is here to silence warnings from processes that
|
|
// expect the global expo-cli.
|
|
"--non-interactive": Boolean,
|
|
// Aliases
|
|
"-v": "--version",
|
|
"-h": "--help"
|
|
}, {
|
|
permissive: true
|
|
});
|
|
if (args["--version"]) {
|
|
// Version is added in the build script.
|
|
console.log("0.4.11");
|
|
process.exit(0);
|
|
}
|
|
if (args["--non-interactive"]) {
|
|
console.warn(_chalk.default.yellow` {bold --non-interactive} is not supported, use {bold $CI=1} instead`);
|
|
}
|
|
// Check if we are running `npx expo <subcommand>` or `npx expo`
|
|
const isSubcommand = Boolean(commands[args._[0]]);
|
|
// Handle `--help` flag
|
|
if (!isSubcommand && args["--help"]) {
|
|
const { login , logout , whoami , register , start , install , export: _export , config , customize , prebuild , "run:ios": runIos , "run:android": runAndroid , ...others } = commands;
|
|
console.log(_chalk.default`
|
|
{bold Usage}
|
|
{dim $} npx expo <command>
|
|
|
|
{bold Commands}
|
|
${Object.keys({
|
|
start,
|
|
export: _export,
|
|
...others
|
|
}).join(", ")}
|
|
${Object.keys({
|
|
"run:ios": runIos,
|
|
"run:android": runAndroid,
|
|
prebuild
|
|
}).join(", ")}
|
|
${Object.keys({
|
|
install,
|
|
customize,
|
|
config
|
|
}).join(", ")}
|
|
{dim ${Object.keys({
|
|
login,
|
|
logout,
|
|
whoami,
|
|
register
|
|
}).join(", ")}}
|
|
|
|
{bold Options}
|
|
--version, -v Version number
|
|
--help, -h Usage info
|
|
|
|
For more info run a command with the {bold --help} flag
|
|
{dim $} npx expo start --help
|
|
`);
|
|
process.exit(0);
|
|
}
|
|
// NOTE(EvanBacon): Squat some directory names to help with migration,
|
|
// users can still use folders named "send" or "eject" by using the fully qualified `npx expo start ./send`.
|
|
if (!isSubcommand) {
|
|
const migrationMap = {
|
|
init: "npx create-expo-app",
|
|
eject: "npx expo prebuild",
|
|
web: "npx expo start --web",
|
|
"start:web": "npx expo start --web",
|
|
"build:ios": "eas build -p ios",
|
|
"build:android": "eas build -p android",
|
|
"client:install:ios": "npx expo start --ios",
|
|
"client:install:android": "npx expo start --android",
|
|
doctor: "expo-cli doctor",
|
|
upgrade: "expo-cli upgrade",
|
|
"customize:web": "npx expo customize",
|
|
publish: "eas update",
|
|
"publish:set": "eas update",
|
|
"publish:rollback": "eas update",
|
|
"publish:history": "eas update",
|
|
"publish:details": "eas update",
|
|
"build:web": "npx expo export:web",
|
|
"credentials:manager": `eas credentials`,
|
|
"fetch:ios:certs": `eas credentials`,
|
|
"fetch:android:keystore": `eas credentials`,
|
|
"fetch:android:hashes": `eas credentials`,
|
|
"fetch:android:upload-cert": `eas credentials`,
|
|
"push:android:upload": `eas credentials`,
|
|
"push:android:show": `eas credentials`,
|
|
"push:android:clear": `eas credentials`,
|
|
url: `eas build:list`,
|
|
"url:ipa": `eas build:list`,
|
|
"url:apk": `eas build:list`,
|
|
webhooks: `eas webhook`,
|
|
"webhooks:add": `eas webhook:create`,
|
|
"webhooks:remove": `eas webhook:delete`,
|
|
"webhooks:update": `eas webhook:update`,
|
|
"build:status": `eas build:list`,
|
|
"upload:android": `eas submit -p android`,
|
|
"upload:ios": `eas submit -p ios`
|
|
};
|
|
// TODO: Log telemetry about invalid command used.
|
|
const subcommand = args._[0];
|
|
if (subcommand in migrationMap) {
|
|
const replacement = migrationMap[subcommand];
|
|
console.log();
|
|
console.log(_chalk.default.yellow` {gray $} {bold expo ${subcommand}} is not supported in the local CLI, please use {bold ${replacement}} instead`);
|
|
console.log();
|
|
process.exit(1);
|
|
}
|
|
const deprecated = [
|
|
"send",
|
|
"client:ios"
|
|
];
|
|
if (deprecated.includes(subcommand)) {
|
|
console.log();
|
|
console.log(_chalk.default.yellow` {gray $} {bold expo ${subcommand}} is deprecated`);
|
|
console.log();
|
|
process.exit(1);
|
|
}
|
|
}
|
|
const command = isSubcommand ? args._[0] : defaultCmd;
|
|
const commandArgs = isSubcommand ? args._.slice(1) : args._;
|
|
// Push the help flag to the subcommand args.
|
|
if (args["--help"]) {
|
|
commandArgs.push("--help");
|
|
}
|
|
// Install exit hooks
|
|
process.on("SIGINT", ()=>process.exit(0)
|
|
);
|
|
process.on("SIGTERM", ()=>process.exit(0)
|
|
);
|
|
commands[command]().then((exec)=>{
|
|
exec(commandArgs);
|
|
// NOTE(EvanBacon): Track some basic telemetry events indicating the command
|
|
// that was run. This can be disabled with the $EXPO_NO_TELEMETRY environment variable.
|
|
// We do this to determine how well deprecations are going before removing a command.
|
|
const { logEventAsync } = require("../src/utils/analytics/rudderstackClient");
|
|
logEventAsync("action", {
|
|
action: `expo ${command}`,
|
|
source: "expo/cli",
|
|
source_version: "0.4.11"
|
|
});
|
|
});
|
|
|
|
//# sourceMappingURL=cli.map
|