"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requireBaseId = exports.run = exports.makeCtx = void 0; const config_1 = require("./config"); const client_1 = require("./client"); const request_1 = require("./request"); /** * Build a Ctx. `command` is the subcommand being executed (so .opts() returns * its local options); `program` is the top-level program (for global options). */ function makeCtx(program, command) { const g = program.opts(); const cfg = (0, config_1.resolveConfig)({ endpoint: g.endpoint, token: g.token, baseId: g.baseId, }); return { client: new client_1.Client(cfg), json: !!g.json, baseId: cfg.baseId, command, program, }; } exports.makeCtx = makeCtx; /** * Wrap an async command action with normalized error handling. * * The wrapped fn receives (ctx, positionalArgs[], options). commander passes * positional args before the trailing Command; we detect the trailing Command * and forward everything else as positional, plus parsed options. */ function run(fn) { return async function (...cmdArgs) { // commander convention: last arg is the Command instance (the subcommand). const command = cmdArgs[cmdArgs.length - 1]; const program = command?.parent ? findRoot(command) : command; const positional = cmdArgs.slice(0, -1); const options = (command?.opts() || {}); const ctx = makeCtx(program, command); try { await fn(ctx, positional, options); } catch (err) { const { status, code, message } = (0, request_1.describeError)(err); if (ctx.json) { process.stdout.write(JSON.stringify({ error: { status, code, message } }) + '\n'); } else { process.stderr.write(`✗ ${code}${status ? ` (${status})` : ''}: ${message}\n`); } process.exitCode = 1; } }; } exports.run = run; function findRoot(cmd) { let c = cmd; while (c.parent) c = c.parent; return c; } /** Require a baseId: from flag, else ctx default, else throw with guidance. */ function requireBaseId(ctx, flagVal) { const baseId = flagVal || ctx.baseId; if (!baseId) { throw new client_1.ApiError(0, 'MISSING_BASE_ID', 'No base id. Pass --base-id , set a default with `inkreach-teable auth login --base-id `, or export INKREACH_TEABLE_BASE_ID.'); } return baseId; } exports.requireBaseId = requireBaseId;