"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.wwwFileCreator = void 0;
const wwwFileCreator = ({ appName, }) => __awaiter(void 0, void 0, void 0, function* () {
    let metadata = `#!/usr/bin/env node

    /**
     * Module dependencies.
     */
    
    var app = require("../app");
    var debug = require("debug")("${appName}:server");
    var http = require("http");
    
    /**
     * Get PORT from environment and store in Express.
     */
    
    var port = normalizePort(process.env.PORT || "3000");
    app.set("port", port);
    
    /**
     * Create HTTP server.
     */
    
    var server = http.createServer(app);
    
    /**
     * Listen on provided port, on all network interfaces.
     */
    
    server.listen(port);
    server.on("error", onError);
    server.on("listening", onListening);
    
    /**
     * Normalize a port into a number, string, or false.
     */
    
    function normalizePort(val) {
      var port = parseInt(val, 10);
    
      if (isNaN(port)) {
        // named pipe
        return val;
      }
    
      if (port >= 0) {
        // port number
        return port;
      }
    
      return false;
    }
    
    /**
     * Event listener for HTTP server "error" event.
     */
    
    function onError(error) {
      if (error.syscall !== "listen") {
        throw error;
      }
    
      var bind = typeof port === "string" ? "Pipe " + port : "Port " + port;
    
      // handle specific listen errors with friendly messages
      switch (error.code) {
        case "EACCES":
          console.error(bind + " requires elevated privileges");
          process.exit(1);
          break;
        case "EADDRINUSE":
          console.error(bind + " is already in use");
          process.exit(1);
          break;
        default:
          throw error;
      }
    }
    
    /**
     * Event listener for HTTP server "listening" event.
     */
    
    function onListening() {
      var addr = server.address();
      var bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port;
      debug("Listening on " + bind);
      console.log('Server running on port ', addr.port);
    }
    `;
    return { metadata };
});
exports.wwwFileCreator = wwwFileCreator;
