polyv-live-cli
Version:
CLI tool for managing PolyV live streaming services.
177 lines • 6.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadApiCommandConfig = loadApiCommandConfig;
exports.validateOutputFormat = validateOutputFormat;
exports.validateYn = validateYn;
exports.parsePositiveInteger = parsePositiveInteger;
exports.parseNonNegativeNumber = parseNonNegativeNumber;
exports.parseTimestamp = parseTimestamp;
exports.parseJsonObject = parseJsonObject;
exports.resolveJsonObjectOption = resolveJsonObjectOption;
exports.parseJsonArray = parseJsonArray;
exports.parseStringList = parseStringList;
exports.parseNumberList = parseNumberList;
exports.compactParams = compactParams;
exports.apiParams = apiParams;
exports.confirmWrite = confirmWrite;
exports.displayApiResult = displayApiResult;
exports.commandParentOptions = commandParentOptions;
const auth_adapter_1 = require("../config/auth-adapter");
const manager_1 = require("../config/manager");
const confirmation_1 = require("./confirmation");
const formatter_1 = require("./formatter");
async function loadApiCommandConfig(parentOptions) {
const authResult = auth_adapter_1.authAdapter.tryGetAuthConfig(parentOptions);
if (!authResult) {
throw new Error(auth_adapter_1.authAdapter.getStatusMessage(parentOptions));
}
let configResult;
try {
configResult = await manager_1.configManager.load({ cliOptions: parentOptions });
}
catch (error) {
if (error instanceof Error && error.message.includes('Auth configuration is incomplete')) {
configResult = {
config: {
baseUrl: 'https://api.polyv.net',
timeout: 30000,
maxRetries: 3,
debug: false,
},
};
}
else {
throw error;
}
}
return {
authConfig: authResult.config,
serviceConfig: {
baseUrl: configResult.config.baseUrl,
timeout: configResult.config.timeout,
maxRetries: configResult.config.maxRetries,
debug: configResult.config.debug,
},
};
}
function validateOutputFormat(value) {
if (value !== 'table' && value !== 'json') {
throw new Error('output must be table or json');
}
return value;
}
function validateYn(value) {
if (value !== 'Y' && value !== 'N') {
throw new Error('value must be Y or N');
}
return value;
}
function parsePositiveInteger(value) {
const parsed = Number(value);
if (!Number.isInteger(parsed) || parsed <= 0) {
throw new Error('value must be a positive integer');
}
return parsed;
}
function parseNonNegativeNumber(value) {
const parsed = Number(value);
if (!Number.isFinite(parsed) || parsed < 0) {
throw new Error('value must be a non-negative number');
}
return parsed;
}
function parseTimestamp(value) {
const parsed = Number(value);
if (!Number.isFinite(parsed) || parsed <= 0) {
throw new Error('timestamp must be a positive number');
}
return parsed;
}
function parseJsonObject(value) {
const parsed = JSON.parse(value);
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
throw new Error('value must be a JSON object');
}
return parsed;
}
function resolveJsonObjectOption(value, legacyGlobalConfigValue) {
if (value && typeof value === 'object' && !Array.isArray(value)) {
return value;
}
if (typeof value === 'string') {
return parseJsonObject(value);
}
if (typeof legacyGlobalConfigValue === 'string' && legacyGlobalConfigValue.trim().startsWith('{')) {
return parseJsonObject(legacyGlobalConfigValue);
}
return undefined;
}
function parseJsonArray(value) {
const parsed = JSON.parse(value);
if (!Array.isArray(parsed)) {
throw new Error('value must be a JSON array');
}
return parsed;
}
function parseStringList(value) {
const list = value.split(',').map((item) => item.trim()).filter(Boolean);
if (list.length === 0) {
throw new Error('list must not be empty');
}
return list;
}
function parseNumberList(value) {
return parseStringList(value).map((item) => parsePositiveInteger(item));
}
function compactParams(params) {
return Object.fromEntries(Object.entries(params).filter(([, value]) => value !== undefined && value !== ''));
}
function apiParams(params) {
const { output, force, dryRun, ...rest } = params;
void output;
void force;
void dryRun;
return compactParams(rest);
}
async function confirmWrite(force, message) {
if (force)
return;
const confirmed = await (0, confirmation_1.confirmDeletion)(message);
if (!confirmed) {
throw new Error('Operation cancelled.');
}
}
function displayApiResult(data, output = 'table') {
if (output === 'json') {
console.log((0, formatter_1.formatJSON)(data));
return;
}
if (Array.isArray(data) && data.length > 0 && typeof data[0] === 'object' && data[0] !== null) {
const headers = Object.keys(data[0]);
const rows = data.map((item) => headers.map((header) => formatCell(item[header])));
console.log((0, formatter_1.formatTable)({ headers, data: rows }));
return;
}
if (data && typeof data === 'object' && !Array.isArray(data)) {
const entries = Object.entries(data);
if (entries.every(([, value]) => typeof value !== 'object' || value === null)) {
console.log((0, formatter_1.formatTable)({
headers: ['Field', 'Value'],
data: entries.map(([key, value]) => [key, formatCell(value)]),
}));
return;
}
}
console.log((0, formatter_1.formatJSON)(data));
}
function formatCell(value) {
if (value === undefined || value === null)
return '';
if (typeof value === 'object')
return JSON.stringify(value);
return String(value);
}
function commandParentOptions(program) {
return program.opts();
}
//# sourceMappingURL=api-command.js.map