@expo/cli
Version:
147 lines (146 loc) • 6.21 kB
JavaScript
// import { resolveDestinationsAsync } from './appleDestinations';
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
resolveDeviceAsync: ()=>resolveDeviceAsync,
isSimulatorDevice: ()=>isSimulatorDevice
});
const _promptDevice = require("./promptDevice");
const _log = /*#__PURE__*/ _interopRequireWildcard(require("../../../log"));
const _appleDeviceManager = require("../../../start/platforms/ios/AppleDeviceManager");
const _promptAppleDevice = require("../../../start/platforms/ios/promptAppleDevice");
const _simctl = /*#__PURE__*/ _interopRequireWildcard(require("../../../start/platforms/ios/simctl"));
const _array = require("../../../utils/array");
const _errors = require("../../../utils/errors");
const _profile = require("../../../utils/profile");
const _hints = require("../../hints");
const _appleDevice = /*#__PURE__*/ _interopRequireWildcard(require("../appleDevice/AppleDevice"));
function _getRequireWildcardCache(nodeInterop) {
if (typeof WeakMap !== "function") return null;
var cacheBabelInterop = new WeakMap();
var cacheNodeInterop = new WeakMap();
return (_getRequireWildcardCache = function(nodeInterop) {
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
})(nodeInterop);
}
function _interopRequireWildcard(obj, nodeInterop) {
if (!nodeInterop && obj && obj.__esModule) {
return obj;
}
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
return {
default: obj
};
}
var cache = _getRequireWildcardCache(nodeInterop);
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
for(var key in obj){
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
// type AnyDevice = SimControl.Device | AppleDevice.ConnectedDevice;
/** Get a list of devices (called destinations) that are connected to the host machine. Filter by `osType` if defined. */ async function getDevicesAsync({ osType }) {
const devices = await (0, _promptAppleDevice.sortDefaultDeviceToBeginningAsync)((0, _array.uniqBy)((await Promise.all([
_appleDevice.getConnectedDevicesAsync(),
await (0, _profile.profile)(_simctl.getDevicesAsync)(),
])).flat(), (item)=>item.udid), osType);
// Sort devices to top of front of the list
const physical = [];
const simulators = devices.filter((device)=>{
if ("isAvailable" in device) {
return true;
} else {
physical.push(device);
return false;
}
});
const isPhone = (a)=>a.osType === "iOS";
const sorted = [
...physical.sort((a, b)=>{
const aPhone = isPhone(a);
const bPhone = isPhone(b);
if (aPhone && !bPhone) return -1;
if (!aPhone && bPhone) return 1;
return 0;
}),
...simulators,
];
// If osType is defined, then filter out ineligible simulators.
// Only do this inside of the device selection so users who pass the entire device udid can attempt to select any simulator (even if it's invalid).
return osType ? filterDevicesForOsType(sorted, osType) : sorted;
}
/** @returns a list of devices, filtered by the provided `osType`. */ function filterDevicesForOsType(devices, osType) {
return devices.filter((device)=>{
if (osType === "iOS") {
// Compatible devices for iOS builds
return [
"iOS",
"macOS",
"xrOS"
].includes(device.osType);
}
return device.osType === osType;
});
}
async function resolveDeviceAsync(device, buildProps) {
await _appleDeviceManager.AppleDeviceManager.assertSystemRequirementsAsync();
if (!device) {
/** Finds the first possible device and returns in a booted state. */ const manager = await _appleDeviceManager.AppleDeviceManager.resolveAsync({
device: {
osType: buildProps.osType
}
});
_log.debug(`Resolved default device (name: ${manager.device.name}, udid: ${manager.device.udid}, osType: ${buildProps.osType})`);
return manager.device;
}
const devices = await getDevicesAsync(buildProps);
const resolved = device === true ? // @ts-expect-error
await (0, _promptDevice.promptDeviceAsync)(devices) : findDeviceFromSearchValue(devices, device.toLowerCase());
return ensureBootedAsync(resolved);
}
function isSimulatorDevice(device) {
var ref;
return !("deviceType" in device) || !!((ref = device.deviceType) == null ? void 0 : ref.startsWith == null ? void 0 : ref.startsWith("com.apple.CoreSimulator.SimDeviceType."));
}
/** @returns device matching the `searchValue` against name or UDID. */ function findDeviceFromSearchValue(devices, searchValue) {
const device = devices.find((device)=>device.udid.toLowerCase() === searchValue || device.name.toLowerCase() === searchValue);
if (!device) {
throw new _errors.CommandError("BAD_ARGS", `No device UDID or name matching "${searchValue}"`);
}
return device;
}
/** Ensures the device is booted if it's a simulator. */ async function ensureBootedAsync(device) {
// --device with no props after
(0, _hints.logDeviceArgument)(device.udid);
if (isSimulatorDevice(device)) {
return (0, _appleDeviceManager.ensureSimulatorOpenAsync)({
udid: device.udid
});
}
return device;
}
//# sourceMappingURL=resolveDevice.js.map