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.
116 lines
5.4 KiB
116 lines
5.4 KiB
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.ExpoRunFormatter = void 0;
|
|
const chalk_1 = __importDefault(require("chalk"));
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const Formatter_1 = require("./Formatter");
|
|
const MetroParser_1 = require("./MetroParser");
|
|
const PodfileTracer_1 = require("./utils/PodfileTracer");
|
|
const parsePodfileLock_1 = require("./utils/parsePodfileLock");
|
|
const symbols_1 = require("./utils/symbols");
|
|
/**
|
|
* A superset of `Formatter` which adds support for Metro build errors and cleaner formatting for Node projects.
|
|
*/
|
|
class ExpoRunFormatter extends Formatter_1.Formatter {
|
|
constructor(props) {
|
|
var _a;
|
|
super(props);
|
|
this.props = props;
|
|
let podfile = {};
|
|
const podfileLock = path_1.default.join(props.projectRoot, 'ios', 'Podfile.lock');
|
|
try {
|
|
const podfileContents = fs_1.default.readFileSync(podfileLock, 'utf8');
|
|
podfile = (_a = parsePodfileLock_1.parsePodfileLock(podfileContents)) !== null && _a !== void 0 ? _a : {};
|
|
}
|
|
catch { }
|
|
this.podfileTracer = new PodfileTracer_1.PodfileTracer({
|
|
...props,
|
|
podfile,
|
|
});
|
|
}
|
|
static create(projectRoot, { xcodeProject, isDebug, } = {}) {
|
|
var _a;
|
|
const appName = ((_a = xcodeProject === null || xcodeProject === void 0 ? void 0 : xcodeProject.name.match(/.*\/(.*)\.\w+/)) === null || _a === void 0 ? void 0 : _a[1]) || '';
|
|
const formatter = new ExpoRunFormatter({
|
|
projectRoot,
|
|
appName,
|
|
isDebug,
|
|
});
|
|
return formatter;
|
|
}
|
|
get parser() {
|
|
if (this._parser) {
|
|
return this._parser;
|
|
}
|
|
this._parser = new MetroParser_1.MetroParser(this);
|
|
return this._parser;
|
|
}
|
|
formatMetroAssetCollectionError(errorContents) {
|
|
const results = `\n${chalk_1.default.red(symbols_1.ERROR +
|
|
// Provide proper attribution.
|
|
'Metro encountered an error:\n' +
|
|
errorContents)}\nLearn more: https://docs.expo.dev/build-reference/troubleshooting\n`;
|
|
this.errors.push(results);
|
|
return results;
|
|
}
|
|
shouldShowCompileWarning(filePath, lineNumber, columnNumber) {
|
|
if (this.props.isDebug) {
|
|
return true;
|
|
}
|
|
return (!filePath.match(/node_modules/) &&
|
|
!filePath.match(/\/ios\/Pods\//) &&
|
|
// Don't show warnings in the generated build folder.
|
|
!Formatter_1.Formatter.getAppRoot(filePath));
|
|
}
|
|
getNodeModuleName(filePath, target) {
|
|
const results = this.podfileTracer.getNodeModuleName(filePath, target);
|
|
return (results === null || results === void 0 ? void 0 : results.name) ? chalk_1.default.cyan(results.name) : null;
|
|
}
|
|
formatFileOperation(props) {
|
|
const title = this.getFileOperationTitle(props.type);
|
|
const moduleNameTag = this.getNodeModuleName(props.filePath, props.target);
|
|
return Formatter_1.Formatter.format(title, [moduleNameTag, Formatter_1.Formatter.formatBreadCrumb(props.fileName, props.target, props.project)]
|
|
.filter(Boolean)
|
|
.join(' '));
|
|
}
|
|
formatCopy({ from, to, target }) {
|
|
let relativeFile = Formatter_1.Formatter.relativePath(this.props.projectRoot, from);
|
|
// If the relative file reaches outside of the project root, we
|
|
// should attempt to resolve relative to the app output directory.
|
|
if (relativeFile.startsWith('../../')) {
|
|
const appFileRoot = Formatter_1.Formatter.getAppRoot(from);
|
|
relativeFile = Formatter_1.Formatter.highlightLastPathComponent(Formatter_1.Formatter.relativePath(appFileRoot, from));
|
|
}
|
|
const appFileRoot = Formatter_1.Formatter.getAppRoot(to);
|
|
const relativeAppFile = Formatter_1.Formatter.highlightLastPathComponent(Formatter_1.Formatter.relativePath(appFileRoot, to));
|
|
const moduleNameTag = this.getNodeModuleName('', target);
|
|
return Formatter_1.Formatter.format('Copying ', [moduleNameTag, [relativeFile, relativeAppFile].join(' ➜ ')].filter(Boolean).join(' '));
|
|
}
|
|
formatPhaseScriptExecution(scriptName, target, project) {
|
|
const moduleNameTag = this.getNodeModuleName('', target);
|
|
if (scriptName === 'Start Packager') {
|
|
const port = process.env.RCT_METRO_PORT || '8081';
|
|
const isDisabled = isTruthy(process.env.RCT_NO_LAUNCH_PACKAGER);
|
|
const status = isDisabled ? 'disabled' : `http://localhost:${port}`;
|
|
// Add some insight into if the bundler was started or not, and which port was used.
|
|
if (isDisabled) {
|
|
scriptName = chalk_1.default.gray(`${scriptName} (disabled)`);
|
|
}
|
|
else {
|
|
scriptName = scriptName + chalk_1.default.gray(` on ${status}`);
|
|
}
|
|
}
|
|
return Formatter_1.Formatter.format('Executing', [moduleNameTag, Formatter_1.Formatter.formatBreadCrumb(scriptName, target, project)]
|
|
.filter(Boolean)
|
|
.join(' '));
|
|
}
|
|
}
|
|
exports.ExpoRunFormatter = ExpoRunFormatter;
|
|
function isTruthy(value) {
|
|
return value === 'true' || value === 1 || value === '1';
|
|
}
|
|
//# sourceMappingURL=ExpoRunFormatter.js.map
|