"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findProjectRootAsync = findProjectRootAsync;
exports.validateGitStatusAsync = validateGitStatusAsync;
function _jsonFile() {
const data = _interopRequireDefault(require("@expo/json-file"));
_jsonFile = function () {
return data;
};
return data;
}
function _spawnAsync() {
const data = _interopRequireDefault(require("@expo/spawn-async"));
_spawnAsync = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _fs() {
const data = _interopRequireDefault(require("fs"));
_fs = function () {
return data;
};
return data;
}
function _chalk() {
const data = _interopRequireDefault(require("chalk"));
_chalk = function () {
return data;
};
return data;
}
function _CommandError() {
const data = _interopRequireDefault(require("../../CommandError"));
_CommandError = function () {
return data;
};
return data;
}
function _log() {
const data = _interopRequireDefault(require("../../log"));
_log = function () {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
async function findProjectRootAsync(base) {
let previous = null;
let dir = base;
do {
let pkgPath = _path().default.join(dir, 'package.json');
let appJsonPath = _path().default.join(dir, 'app.json');
let pkgExists = _fs().default.existsSync(pkgPath);
let appJsonExists = _fs().default.existsSync(appJsonPath);
if (pkgExists && appJsonExists) {
let pkg = await _jsonFile().default.readAsync(pkgPath);
let expo = await _jsonFile().default.getAsync(_path().default.join(dir, 'app.json'), 'expo', null);
let workflow;
if (expo && pkg.dependencies && pkg.dependencies.hasOwnProperty('react-native-unimodules')) {
workflow = 'bare';
} else if (!expo) {
workflow = 'bare';
} else {
workflow = 'managed';
}
return {
projectRoot: dir,
workflow
};
} else if (pkgExists && !appJsonExists) {
return {
projectRoot: dir,
workflow: 'bare'
};
}
previous = dir;
dir = _path().default.dirname(dir);
} while (dir !== previous);
throw new (_CommandError().default)('NO_PROJECT', 'No managed or bare projects found. Please make sure you are inside a project folder.');
}
async function validateGitStatusAsync() {
let workingTreeStatus = 'unknown';
try {
let result = await (0, _spawnAsync().default)('git', ['status', '--porcelain']);
workingTreeStatus = result.stdout === '' ? 'clean' : 'dirty';
} catch (e) {// Maybe git is not installed?
// Maybe this project is not using git?
}
if (workingTreeStatus === 'clean') {
_log().default.nested(`Your git working tree is ${_chalk().default.green('clean')}`);
_log().default.nested('To revert the changes after this command completes, you can run the following:');
_log().default.nested(' git clean --force && git reset --hard');
return true;
} else if (workingTreeStatus === 'dirty') {
_log().default.nested(`${_chalk().default.bold('Warning!')} Your git working tree is ${_chalk().default.red('dirty')}.`);
_log().default.nested(`It's recommended to ${_chalk().default.bold('commit all your changes before proceeding')},\nso you can revert the changes made by this command if necessary.`);
} else {
_log().default.nested("We couldn't find a git repository in your project directory.");
_log().default.nested("It's recommended to back up your project before proceeding.");
}
return false;
}
//# sourceMappingURL=../../__sourcemaps__/commands/utils/ProjectUtils.js.map