verdaccio
Version:
A lightweight private npm proxy registry
91 lines (90 loc) • 3.57 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_runtime = require("../_virtual/_rolldown/runtime.js");
const require_lib_logger_index = require("./logger/index.js");
const require_lib_utils = require("./utils.js");
const require_api_index = require("../api/index.js");
const require_lib_experiments = require("./experiments.js");
let lodash = require("lodash");
lodash = require_runtime.__toESM(lodash);
let debug = require("debug");
debug = require_runtime.__toESM(debug);
let _verdaccio_config = require("@verdaccio/config");
let fs = require("fs");
fs = require_runtime.__toESM(fs);
let constants = require("constants");
constants = require_runtime.__toESM(constants);
let http = require("http");
http = require_runtime.__toESM(http);
let https = require("https");
https = require_runtime.__toESM(https);
//#region src/lib/run-server.ts
var debug$1 = (0, debug.default)("verdaccio:run-server");
/**
* Exposes a server factory to be instantiated programmatically.
*
const app = await runServer(); // default configuration
const app = await runServer('./config/config.yaml');
const app = await runServer({ configuration });
app.listen(4000, (event) => {
// do something
});
* @param config
*/
async function runServer(config, options) {
const configurationParsed = (0, _verdaccio_config.getConfigParsed)(config);
require_lib_utils.initLogger(configurationParsed);
require_lib_experiments.displayExperimentsInfoBox({
...configurationParsed?.flags || {},
...configurationParsed?.experiments || {}
});
return createServerFactory(configurationParsed, (0, _verdaccio_config.getListenAddress)(options?.listenArg ?? configurationParsed?.listen, require_lib_logger_index.logger), await require_api_index.default(configurationParsed));
}
/**
* Return a native HTTP/HTTPS server instance
* @param config
* @param addr
* @param app
*/
function createServerFactory(config, addr, app) {
let serverFactory;
if (addr.proto === "https") {
debug$1("https enabled");
try {
let httpsOptions = { secureOptions: constants.default.SSL_OP_NO_SSLv2 | constants.default.SSL_OP_NO_SSLv3 };
const keyCertConfig = config.https;
const pfxConfig = config.https;
if (!(keyCertConfig.key && keyCertConfig.cert || pfxConfig.pfx)) throw Error("bad format https configuration");
if (pfxConfig.pfx) {
const { pfx, passphrase } = pfxConfig;
httpsOptions = lodash.default.assign(httpsOptions, {
pfx: fs.default.readFileSync(pfx),
passphrase: passphrase || ""
});
} else {
const { key, cert, ca } = keyCertConfig;
httpsOptions = lodash.default.assign(httpsOptions, {
key: fs.default.readFileSync(key),
cert: fs.default.readFileSync(cert),
...ca && { ca: fs.default.readFileSync(ca) }
});
}
serverFactory = https.default.createServer(httpsOptions, app);
} catch (err) {
require_lib_logger_index.logger.fatal({ err }, "cannot create server: @{err.message}");
process.exit(2);
}
} else {
debug$1("http enabled");
serverFactory = http.default.createServer(app);
}
if (config.server && typeof config.server.keepAliveTimeout !== "undefined" && config.server.keepAliveTimeout !== "null") serverFactory.keepAliveTimeout = config.server.keepAliveTimeout * 1e3;
unlinkAddressPath(addr);
return serverFactory;
}
function unlinkAddressPath(addr) {
if (addr.path && fs.default.existsSync(addr.path)) fs.default.unlinkSync(addr.path);
}
//#endregion
exports.createServerFactory = createServerFactory;
exports.runServer = runServer;
//# sourceMappingURL=run-server.js.map