177 lines
5.5 KiB
JavaScript
177 lines
5.5 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true,
|
|
});
|
|
exports.default = void 0;
|
|
var _createDevMiddlewareLogger = _interopRequireDefault(
|
|
require("../../utils/createDevMiddlewareLogger")
|
|
);
|
|
var _isDevServerRunning = _interopRequireDefault(
|
|
require("../../utils/isDevServerRunning")
|
|
);
|
|
var _loadMetroConfig = _interopRequireDefault(
|
|
require("../../utils/loadMetroConfig")
|
|
);
|
|
var version = _interopRequireWildcard(require("../../utils/version"));
|
|
var _attachKeyHandlers = _interopRequireDefault(require("./attachKeyHandlers"));
|
|
var _middleware = require("./middleware");
|
|
var _devMiddleware = require("@react-native/dev-middleware");
|
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
var _metro = _interopRequireDefault(require("metro"));
|
|
var _metroCore = require("metro-core");
|
|
var _path = _interopRequireDefault(require("path"));
|
|
var _url = _interopRequireDefault(require("url"));
|
|
function _getRequireWildcardCache(e) {
|
|
if ("function" != typeof WeakMap) return null;
|
|
var r = new WeakMap(),
|
|
t = new WeakMap();
|
|
return (_getRequireWildcardCache = function (e) {
|
|
return e ? t : r;
|
|
})(e);
|
|
}
|
|
function _interopRequireWildcard(e, r) {
|
|
if (!r && e && e.__esModule) return e;
|
|
if (null === e || ("object" != typeof e && "function" != typeof e))
|
|
return { default: e };
|
|
var t = _getRequireWildcardCache(r);
|
|
if (t && t.has(e)) return t.get(e);
|
|
var n = { __proto__: null },
|
|
a = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
for (var u in e)
|
|
if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
|
|
var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
|
|
i && (i.get || i.set) ? Object.defineProperty(n, u, i) : (n[u] = e[u]);
|
|
}
|
|
return (n.default = e), t && t.set(e, n), n;
|
|
}
|
|
function _interopRequireDefault(e) {
|
|
return e && e.__esModule ? e : { default: e };
|
|
}
|
|
async function runServer(_argv, cliConfig, args) {
|
|
const metroConfig = await (0, _loadMetroConfig.default)(cliConfig, {
|
|
config: args.config,
|
|
maxWorkers: args.maxWorkers,
|
|
port: args.port,
|
|
resetCache: args.resetCache,
|
|
watchFolders: args.watchFolders,
|
|
projectRoot: args.projectRoot,
|
|
sourceExts: args.sourceExts,
|
|
});
|
|
const hostname = args.host?.length ? args.host : "localhost";
|
|
const {
|
|
projectRoot,
|
|
server: { port },
|
|
watchFolders,
|
|
} = metroConfig;
|
|
const protocol = args.https === true ? "https" : "http";
|
|
const devServerUrl = _url.default.format({
|
|
protocol,
|
|
hostname,
|
|
port,
|
|
});
|
|
console.info(
|
|
_chalk.default.blue(
|
|
`\nWelcome to React Native v${cliConfig.reactNativeVersion}`
|
|
)
|
|
);
|
|
const serverStatus = await (0, _isDevServerRunning.default)(
|
|
devServerUrl,
|
|
projectRoot
|
|
);
|
|
if (serverStatus === "matched_server_running") {
|
|
console.info(
|
|
`A dev server is already running for this project on port ${port}. Exiting.`
|
|
);
|
|
return;
|
|
} else if (serverStatus === "port_taken") {
|
|
console.error(
|
|
`${_chalk.default.red(
|
|
"error"
|
|
)}: Another process is running on port ${port}. Please terminate this ` +
|
|
'process and try again, or use another port with "--port".'
|
|
);
|
|
return;
|
|
}
|
|
console.info(`Starting dev server on ${devServerUrl}\n`);
|
|
if (args.assetPlugins) {
|
|
metroConfig.transformer.assetPlugins = args.assetPlugins.map((plugin) =>
|
|
require.resolve(plugin)
|
|
);
|
|
}
|
|
let reportEvent;
|
|
const terminal = new _metroCore.Terminal(process.stdout);
|
|
const ReporterImpl = getReporterImpl(args.customLogReporterPath);
|
|
const terminalReporter = new ReporterImpl(terminal);
|
|
const {
|
|
middleware: communityMiddleware,
|
|
websocketEndpoints: communityWebsocketEndpoints,
|
|
messageSocketEndpoint,
|
|
eventsSocketEndpoint,
|
|
} = (0, _middleware.createDevServerMiddleware)({
|
|
host: hostname,
|
|
port,
|
|
watchFolders,
|
|
});
|
|
const { middleware, websocketEndpoints } = (0,
|
|
_devMiddleware.createDevMiddleware)({
|
|
projectRoot,
|
|
serverBaseUrl: devServerUrl,
|
|
logger: (0, _createDevMiddlewareLogger.default)(terminalReporter),
|
|
});
|
|
metroConfig.reporter = {
|
|
update(event) {
|
|
terminalReporter.update(event);
|
|
if (reportEvent) {
|
|
reportEvent(event);
|
|
}
|
|
if (args.interactive && event.type === "initialize_done") {
|
|
terminalReporter.update({
|
|
type: "unstable_server_log",
|
|
level: "info",
|
|
data: `Dev server ready. ${_chalk.default.dim(
|
|
"Press Ctrl+C to exit."
|
|
)}`,
|
|
});
|
|
(0, _attachKeyHandlers.default)({
|
|
devServerUrl,
|
|
messageSocket: messageSocketEndpoint,
|
|
reporter: terminalReporter,
|
|
});
|
|
}
|
|
},
|
|
};
|
|
const serverInstance = await _metro.default.runServer(metroConfig, {
|
|
host: args.host,
|
|
secure: args.https,
|
|
secureCert: args.cert,
|
|
secureKey: args.key,
|
|
unstable_extraMiddleware: [
|
|
communityMiddleware,
|
|
_middleware.indexPageMiddleware,
|
|
middleware,
|
|
],
|
|
websocketEndpoints: {
|
|
...communityWebsocketEndpoints,
|
|
...websocketEndpoints,
|
|
},
|
|
});
|
|
reportEvent = eventsSocketEndpoint.reportEvent;
|
|
serverInstance.keepAliveTimeout = 30000;
|
|
await version.logIfUpdateAvailable(cliConfig, terminalReporter);
|
|
}
|
|
function getReporterImpl(customLogReporterPath) {
|
|
if (customLogReporterPath == null) {
|
|
return require("metro/src/lib/TerminalReporter");
|
|
}
|
|
try {
|
|
return require(customLogReporterPath);
|
|
} catch (e) {
|
|
if (e.code !== "MODULE_NOT_FOUND") {
|
|
throw e;
|
|
}
|
|
return require(_path.default.resolve(customLogReporterPath));
|
|
}
|
|
}
|
|
var _default = (exports.default = runServer);
|