agor
Version:
A Node CLI utility to launch an iOS simulator and navigate Safari to a specified page.
77 lines (70 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var childProcess = require('child_process');
var util = require('util');
var color = require('ansi-colors');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var childProcess__default = /*#__PURE__*/_interopDefaultLegacy(childProcess);
var util__default = /*#__PURE__*/_interopDefaultLegacy(util);
var color__default = /*#__PURE__*/_interopDefaultLegacy(color);
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (result) => {
return result.done ? resolve(result.value) : Promise.resolve(result.value).then(fulfilled, rejected);
};
step((generator = generator.apply(__this, __arguments)).next());
});
};
const exec = util__default['default'].promisify(childProcess__default['default'].exec);
function agor(args) {
return __async(this, null, function* () {
const deviceName = args.d || args.device || "iPhone 12";
const simulatorName = `agor-${deviceName}`.replace(/ /g, "").toLowerCase();
const address = args.a || args.address;
if (!address) {
console.log(color__default['default'].redBright.bold("\n \u{1F4F1} Agor needs an address for the iOS simulator to navigate to. \n"));
process.exit(1);
}
if (!/^https?:\/\/\w+(:[0-9]*)?(\.\w+)?$/.test(address)) {
console.log(color__default['default'].redBright.bold("\n \u{1F4F1} Agor requires a valid url. \n"));
process.exit(1);
}
yield createIfNotExist(simulatorName, deviceName);
yield startSequence(simulatorName, address);
});
}
function startSequence(simulatorName, url) {
return __async(this, null, function* () {
try {
yield exec(`xcrun simctl boot ${simulatorName}`);
} catch (e) {
yield exec(`xcrun simctl openurl ${simulatorName} ${url}`);
yield exec("open -a Simulator.app");
}
});
}
function createIfNotExist(simulatorName, deviceName) {
return __async(this, null, function* () {
const {stdout} = yield exec("xcrun simctl list");
const deviceExists = RegExp(simulatorName).test(stdout);
if (!deviceExists) {
console.log("Agor simulator does not exist. Creating now...");
yield exec(`xcrun simctl create ${simulatorName} "${deviceName}"`);
}
});
}
exports.agor = agor;