/* eslint-disable import/no-dynamic-require */ /* eslint-disable no-await-in-loop */ /* eslint-disable no-eval */ import 'reflect-metadata'; import './init'; import './interface'; import os from 'os'; import path from 'path'; import fs from 'fs-extra'; import './utils'; import cac from 'cac'; import { Logger } from './logger'; import './ui'; export * from './interface'; const argv = cac().parse(); if (argv.options.debug) { process.env.NODE_ENV = 'development'; process.env.DEV = 'on'; } else process.env.NODE_ENV = process.env.NODE_ENV || 'production'; const logger = new Logger('loader'); logger.debug('%o', argv); process.on('unhandledRejection', logger.error); process.on('uncaughtException', logger.error); const publicTemp = path.resolve(os.tmpdir(), 'hydro', 'public'); export function addon(addonPath: string, prepend = false) { if (!(fs.existsSync(addonPath) && fs.statSync(addonPath).isFile())) { try { // Is a npm package const packagejson = require.resolve(`${addonPath}/package.json`); const modulePath = path.dirname(packagejson); const publicPath = path.resolve(modulePath, 'public'); if (fs.existsSync(publicPath)) fs.copySync(publicPath, publicTemp); if (prepend) global.addons.unshift(modulePath); else global.addons.push(modulePath); } catch (e) { logger.error(`Addon not found: ${addonPath}`); } } else logger.error(`Addon not found: ${addonPath}`); } export async function load() { addon(path.resolve(__dirname, '..'), true); Error.stackTraceLimit = 50; require('./entry/worker').load(); if (global.gc) global.gc(); } export async function loadCli() { require('./entry/cli').load(); process.kill(process.pid, 'SIGINT'); }