UNPKG

@oada/cli

Version:

CLI OADA client

82 lines 2.61 kB
import { join } from 'node:path'; import 'dotenv/config'; import { Command, Flags } from '@oclif/core'; import { findUp } from 'find-up'; import objectAssignDeep from 'object-assign-deep'; import { importable } from './io.js'; const defaults = { token: 'god', domain: 'localhost', domains: { localhost: { token: 'god', domain: undefined } }, }; function handleDefaults({ domains, ...rest }) { return { ...rest, domains: { ...Object.entries(domains) .map(([name, { token, domain = name }]) => { const config = { token, domain }; return { [name]: config, [domain]: config, }; }) .reduce((o1, o2) => objectAssignDeep(o1, o2), {}), }, }; } async function loadUserConfig(paths) { const config = {}; for await (const path of paths) { try { const { default: userConfig } = (await import(path)); objectAssignDeep(config, userConfig); } catch { } } return config; } export const configTypes = ['.json', ...importable]; class BaseCommand extends Command { async init() { this.configFiles = [join(this.config.configDir, 'config')].concat((await findUp(configTypes.map((extension) => `.oadacli${extension}`))) ?? []); const userConfig = await loadUserConfig(this.configFiles); const { flags: fFlags } = await this.parse(BaseCommand); const config = objectAssignDeep(defaults, userConfig, fFlags); if (fFlags.domain) { const { domain = config.domain, token = config.token } = config.domains[fFlags.domain] ?? {}; config.domain = domain; if (!fFlags.token) { config.token = token; } } this.iconfig = handleDefaults(config); } } BaseCommand.baseFlags = { domain: Flags.string({ description: 'default OADA API domain', char: 'd', default: process.env.OADA_DOMAIN, }), token: Flags.string({ description: 'default OADA API token', char: 't', default: process.env.OADA_TOKEN, }), tty: Flags.boolean({ description: 'format output for TTY', allowNo: true, default: process.stdout.isTTY, }), ws: Flags.boolean({ description: 'use WebSockets for OADA API', allowNo: true, default: false, }), }; BaseCommand.flags = {}; BaseCommand.strict = false; export default BaseCommand; //# sourceMappingURL=BaseCommand.js.map