@oada/cli
Version:
CLI OADA client
82 lines • 2.61 kB
JavaScript
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