@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 9.65 kB
Source Map (JSON)
{"version":3,"sources":["../src/startCore.ts"],"names":["buildArgumentsParser","config","yargs","option","boolean","description","default","number","defaultPort","string","startCore","args","optLogger","parser","effectiveParser","argsBuilder","params","parse","logger","shouldLoadEnvFiles","envFile","certPath","cert","process","env","HTTPS_CERT_PATH","keyPath","HTTPS_KEY_PATH","host","SERVER_HOSTNAME","port","PORT","http","Error","certExist","fs","pathExists","keyExist","server","createServer","https","readFileSync","key","passphrase","HTTPS_PASSPHRASE","handleServerRequestsWithDevTools","watch","serviceSetupInWatchMode","configFile","serviceConfigModuleId","configFilePath","exists","newConfig","teardown","Promise","res","rej","handled","on","err","listen","mode","log","pid","filter","Boolean","join","close"],"mappings":"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","sourcesContent":["import 'source-map-support/register';\nimport * as http from 'http';\nimport * as https from 'https';\nimport fs from 'fs-extra';\nimport yargs from 'yargs';\nimport { resolve } from 'path';\n\nimport { loadEnv } from './shared/env';\nimport { serviceSetup } from './setup';\nimport { ICommandLineArgs, IServiceConfig, BasicLogger } from './shared';\nimport { initializeLoggerOrFallback } from './setup/initializeLogger';\n\nconst buildArgumentsParser = (config: IServiceConfig) =>\n (yargs as yargs.Argv<ICommandLineArgs>)\n .option('http', {\n boolean: true,\n description: 'Disable encryption',\n default: false,\n })\n .option('watch', {\n boolean: true,\n description: 'Watch code for changes',\n default: false,\n })\n .option('port', {\n number: true,\n description: 'port to listen on',\n default: config.defaultPort,\n })\n .option('host', {\n string: true,\n description: 'address to listen on',\n })\n .option('cert', {\n string: true,\n description:\n 'Path to an HTTPS certificate (must be full chain certificate)',\n })\n .option('key', {\n string: true,\n description: 'Path to an HTTPS private-key',\n });\n\nexport async function startCore(\n config: IServiceConfig,\n args?: ICommandLineArgs,\n optLogger?: BasicLogger\n) {\n const parser = buildArgumentsParser(config);\n const effectiveParser = config.argsBuilder\n ? config.argsBuilder(parser)\n : parser;\n\n const params = args || effectiveParser.parse();\n\n const logger = optLogger ?? (await initializeLoggerOrFallback(config));\n\n const shouldLoadEnvFiles = config.shouldLoadEnvFiles ?? true;\n\n if (shouldLoadEnvFiles) {\n await loadEnv({\n envFile: params.envFile,\n logger,\n });\n }\n\n const certPath = params.cert || process.env.HTTPS_CERT_PATH;\n const keyPath = params.cert || process.env.HTTPS_KEY_PATH;\n const host = params.host || process.env.SERVER_HOSTNAME;\n const port = process.env.PORT || params.port;\n\n if (!params.http) {\n if (!certPath) {\n throw new Error(\n 'No certificate path provided. Please generate HTTPS certificate and key, or use --http option'\n );\n }\n if (!keyPath) {\n throw new Error(\n 'No private key path provided. Please generate HTTPS certificate and key, or use --http option'\n );\n }\n\n const certExist = await fs.pathExists(certPath);\n if (!certExist) {\n throw new Error(`Cannot find file at path '${certPath}'`);\n }\n\n const keyExist = await fs.pathExists(keyPath);\n if (!keyExist) {\n throw new Error(`Cannot find file at path '${keyPath}'`);\n }\n }\n\n const server = params.http\n ? http.createServer()\n : https.createServer({\n cert: certPath && fs.readFileSync(certPath, 'utf8'),\n key: keyPath && fs.readFileSync(keyPath, 'utf8'),\n passphrase: process.env.HTTPS_PASSPHRASE,\n });\n\n const handleServerRequestsWithDevTools = async () => {\n if (params.watch) {\n const { serviceSetupInWatchMode } = await import(\n './setup/watchServerCode'\n );\n\n const configFile = config.serviceConfigModuleId || './lib/config.js';\n const configFilePath = resolve(configFile);\n const exists = await fs.pathExists(configFilePath);\n\n if (!exists) {\n throw new Error(\n `Cannot resolve service configuration module (${configFilePath}), setup is required for watch mode to work`\n );\n }\n\n return await serviceSetupInWatchMode(\n configFilePath,\n async (newConfig) => {\n return await serviceSetup(server, newConfig, params, logger);\n }\n );\n } else {\n return await serviceSetup(server, config, params, logger);\n }\n };\n\n const teardown = await handleServerRequestsWithDevTools();\n\n await new Promise((res, rej) => {\n let handled = false;\n server.on('error', (err) => {\n if (handled) {\n return;\n }\n\n handled = true;\n rej(err);\n });\n server.listen(\n {\n port,\n host,\n },\n () => {\n if (handled) {\n return;\n }\n\n handled = true;\n const mode = params.http\n ? '(un-encrypted http/ws)'\n : \"(https/wss) - Pass '--http' argument to disable encryption\";\n logger.log(\n `👍 PID ${process.pid}; Currently listening on ${[host, port]\n .filter(Boolean)\n .join(':')} ${mode}`\n );\n res();\n }\n );\n });\n\n return async () => {\n await teardown('destroy');\n await new Promise((res, rej) =>\n server.close((err) => {\n if (err) {\n rej(err);\n } else {\n res();\n }\n })\n );\n };\n}\n"],"file":"startCore.js"}