@scalepad/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +13 -0
- package/dist/config.js +49 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +9 -0
- package/dist/credentials.js +91 -0
- package/dist/credentials.js.map +1 -0
- package/dist/filters.d.ts +6 -0
- package/dist/filters.js +56 -0
- package/dist/filters.js.map +1 -0
- package/dist/format.d.ts +20 -0
- package/dist/format.js +155 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +437 -0
- package/dist/index.js.map +1 -0
- package/package.json +24 -0
- package/src/config.ts +66 -0
- package/src/credentials.ts +125 -0
- package/src/filters.ts +73 -0
- package/src/format.ts +210 -0
- package/src/index.ts +603 -0
- package/test/cli.test.ts +118 -0
- package/tsconfig.json +8 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ProfileMetadata {
|
|
2
|
+
storage?: "keytar" | "file";
|
|
3
|
+
}
|
|
4
|
+
export interface CliConfig {
|
|
5
|
+
currentProfile: string;
|
|
6
|
+
profiles: Record<string, ProfileMetadata>;
|
|
7
|
+
}
|
|
8
|
+
export declare function getConfigPath(): string;
|
|
9
|
+
export declare function getFallbackCredentialsPath(): string;
|
|
10
|
+
export declare function ensureConfigDir(): Promise<void>;
|
|
11
|
+
export declare function loadConfig(): Promise<CliConfig>;
|
|
12
|
+
export declare function saveConfig(config: CliConfig): Promise<void>;
|
|
13
|
+
export declare function writePrivateJson(path: string, value: unknown): Promise<void>;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const DEFAULT_CONFIG = {
|
|
5
|
+
currentProfile: "default",
|
|
6
|
+
profiles: {}
|
|
7
|
+
};
|
|
8
|
+
function configRoot() {
|
|
9
|
+
const xdg = process.env.XDG_CONFIG_HOME;
|
|
10
|
+
if (xdg) {
|
|
11
|
+
return join(xdg, "scalepad-cli");
|
|
12
|
+
}
|
|
13
|
+
return join(homedir(), ".config", "scalepad-cli");
|
|
14
|
+
}
|
|
15
|
+
export function getConfigPath() {
|
|
16
|
+
return join(configRoot(), "config.json");
|
|
17
|
+
}
|
|
18
|
+
export function getFallbackCredentialsPath() {
|
|
19
|
+
return join(configRoot(), "credentials.json");
|
|
20
|
+
}
|
|
21
|
+
export async function ensureConfigDir() {
|
|
22
|
+
await mkdir(configRoot(), { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
export async function loadConfig() {
|
|
25
|
+
try {
|
|
26
|
+
const raw = await readFile(getConfigPath(), "utf8");
|
|
27
|
+
const parsed = JSON.parse(raw);
|
|
28
|
+
return {
|
|
29
|
+
currentProfile: parsed.currentProfile ?? "default",
|
|
30
|
+
profiles: parsed.profiles ?? {}
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return structuredClone(DEFAULT_CONFIG);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function saveConfig(config) {
|
|
38
|
+
await ensureConfigDir();
|
|
39
|
+
const path = getConfigPath();
|
|
40
|
+
await writeFile(path, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
41
|
+
await chmod(path, 0o600);
|
|
42
|
+
}
|
|
43
|
+
export async function writePrivateJson(path, value) {
|
|
44
|
+
await ensureConfigDir();
|
|
45
|
+
await mkdir(dirname(path), { recursive: true });
|
|
46
|
+
await writeFile(path, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
47
|
+
await chmod(path, 0o600);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAW1C,MAAM,cAAc,GAAc;IAChC,cAAc,EAAE,SAAS;IACzB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,SAAS,UAAU;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACxC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACrD,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,SAAS;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IACjE,MAAM,eAAe,EAAE,CAAC;IACxB,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function storeApiKey(profile: string, apiKey: string): Promise<"keytar" | "file">;
|
|
2
|
+
export declare function readStoredApiKey(profile: string): Promise<string | null>;
|
|
3
|
+
export declare function deleteStoredApiKey(profile: string): Promise<boolean>;
|
|
4
|
+
export interface ResolveApiKeyOptions {
|
|
5
|
+
explicitApiKey?: string;
|
|
6
|
+
envApiKey?: string;
|
|
7
|
+
profile: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveApiKey(options: ResolveApiKeyOptions): Promise<string | null>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { chmod, readFile, rm } from "node:fs/promises";
|
|
2
|
+
import { getFallbackCredentialsPath, loadConfig, saveConfig, writePrivateJson } from "./config.js";
|
|
3
|
+
const SERVICE_NAME = "@scalepad/cli";
|
|
4
|
+
async function maybeLoadKeytar() {
|
|
5
|
+
try {
|
|
6
|
+
const module = await import("keytar");
|
|
7
|
+
return module.default;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function accountName(profile) {
|
|
14
|
+
return `profile:${profile}`;
|
|
15
|
+
}
|
|
16
|
+
async function readFallbackFile() {
|
|
17
|
+
try {
|
|
18
|
+
const raw = await readFile(getFallbackCredentialsPath(), "utf8");
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
return { profiles: parsed.profiles ?? {} };
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return { profiles: {} };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function writeFallbackFile(value) {
|
|
27
|
+
await writePrivateJson(getFallbackCredentialsPath(), value);
|
|
28
|
+
}
|
|
29
|
+
export async function storeApiKey(profile, apiKey) {
|
|
30
|
+
const config = await loadConfig();
|
|
31
|
+
const keytar = await maybeLoadKeytar();
|
|
32
|
+
if (keytar) {
|
|
33
|
+
await keytar.setPassword(SERVICE_NAME, accountName(profile), apiKey);
|
|
34
|
+
config.profiles[profile] = { storage: "keytar" };
|
|
35
|
+
config.currentProfile = profile;
|
|
36
|
+
await saveConfig(config);
|
|
37
|
+
return "keytar";
|
|
38
|
+
}
|
|
39
|
+
const fallback = await readFallbackFile();
|
|
40
|
+
fallback.profiles[profile] = apiKey;
|
|
41
|
+
await writeFallbackFile(fallback);
|
|
42
|
+
await chmod(getFallbackCredentialsPath(), 0o600);
|
|
43
|
+
config.profiles[profile] = { storage: "file" };
|
|
44
|
+
config.currentProfile = profile;
|
|
45
|
+
await saveConfig(config);
|
|
46
|
+
return "file";
|
|
47
|
+
}
|
|
48
|
+
export async function readStoredApiKey(profile) {
|
|
49
|
+
const keytar = await maybeLoadKeytar();
|
|
50
|
+
if (keytar) {
|
|
51
|
+
const key = await keytar.getPassword(SERVICE_NAME, accountName(profile));
|
|
52
|
+
if (key) {
|
|
53
|
+
return key;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const fallback = await readFallbackFile();
|
|
57
|
+
return fallback.profiles[profile] ?? null;
|
|
58
|
+
}
|
|
59
|
+
export async function deleteStoredApiKey(profile) {
|
|
60
|
+
const config = await loadConfig();
|
|
61
|
+
let removed = false;
|
|
62
|
+
const keytar = await maybeLoadKeytar();
|
|
63
|
+
if (keytar) {
|
|
64
|
+
removed = (await keytar.deletePassword(SERVICE_NAME, accountName(profile))) || removed;
|
|
65
|
+
}
|
|
66
|
+
const fallback = await readFallbackFile();
|
|
67
|
+
if (profile in fallback.profiles) {
|
|
68
|
+
delete fallback.profiles[profile];
|
|
69
|
+
await writeFallbackFile(fallback);
|
|
70
|
+
removed = true;
|
|
71
|
+
}
|
|
72
|
+
delete config.profiles[profile];
|
|
73
|
+
if (config.currentProfile === profile) {
|
|
74
|
+
config.currentProfile = "default";
|
|
75
|
+
}
|
|
76
|
+
await saveConfig(config);
|
|
77
|
+
if (Object.keys(fallback.profiles).length === 0) {
|
|
78
|
+
await rm(getFallbackCredentialsPath(), { force: true });
|
|
79
|
+
}
|
|
80
|
+
return removed;
|
|
81
|
+
}
|
|
82
|
+
export async function resolveApiKey(options) {
|
|
83
|
+
if (options.explicitApiKey) {
|
|
84
|
+
return options.explicitApiKey;
|
|
85
|
+
}
|
|
86
|
+
if (options.envApiKey) {
|
|
87
|
+
return options.envApiKey;
|
|
88
|
+
}
|
|
89
|
+
return readStoredApiKey(options.profile);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function parseFilterArgs(values: string[]): Record<string, string>;
|
|
2
|
+
export declare function buildSort(sortField: string | undefined, desc: boolean): string | undefined;
|
|
3
|
+
type JsonLike = Record<string, unknown>;
|
|
4
|
+
export declare function projectRecord(record: JsonLike, fields: string[] | undefined): JsonLike;
|
|
5
|
+
export declare function flattenRecord(value: JsonLike, prefix?: string): Record<string, string>;
|
|
6
|
+
export {};
|
package/dist/filters.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export function parseFilterArgs(values) {
|
|
2
|
+
const filters = {};
|
|
3
|
+
for (const rawValue of values) {
|
|
4
|
+
const separatorIndex = rawValue.indexOf("=");
|
|
5
|
+
if (separatorIndex <= 0 || separatorIndex === rawValue.length - 1) {
|
|
6
|
+
throw new Error(`Invalid filter '${rawValue}'. Expected field=expression.`);
|
|
7
|
+
}
|
|
8
|
+
const field = rawValue.slice(0, separatorIndex).trim();
|
|
9
|
+
const expression = rawValue.slice(separatorIndex + 1).trim();
|
|
10
|
+
if (!field || !expression) {
|
|
11
|
+
throw new Error(`Invalid filter '${rawValue}'. Expected field=expression.`);
|
|
12
|
+
}
|
|
13
|
+
filters[field] = expression;
|
|
14
|
+
}
|
|
15
|
+
return filters;
|
|
16
|
+
}
|
|
17
|
+
export function buildSort(sortField, desc) {
|
|
18
|
+
if (!sortField) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
return `${desc ? "-" : "+"}${sortField}`;
|
|
22
|
+
}
|
|
23
|
+
function getNestedValue(record, path) {
|
|
24
|
+
const segments = path.split(".");
|
|
25
|
+
let current = record;
|
|
26
|
+
for (const segment of segments) {
|
|
27
|
+
if (current == null || typeof current !== "object") {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
current = current[segment];
|
|
31
|
+
}
|
|
32
|
+
return current;
|
|
33
|
+
}
|
|
34
|
+
export function projectRecord(record, fields) {
|
|
35
|
+
if (!fields || fields.length === 0) {
|
|
36
|
+
return record;
|
|
37
|
+
}
|
|
38
|
+
return Object.fromEntries(fields.map((field) => [field, getNestedValue(record, field)]));
|
|
39
|
+
}
|
|
40
|
+
export function flattenRecord(value, prefix = "") {
|
|
41
|
+
const flattened = {};
|
|
42
|
+
for (const [key, fieldValue] of Object.entries(value)) {
|
|
43
|
+
const nextKey = prefix ? `${prefix}.${key}` : key;
|
|
44
|
+
if (Array.isArray(fieldValue)) {
|
|
45
|
+
flattened[nextKey] = JSON.stringify(fieldValue);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (fieldValue != null && typeof fieldValue === "object") {
|
|
49
|
+
Object.assign(flattened, flattenRecord(fieldValue, nextKey));
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
flattened[nextKey] = fieldValue == null ? "" : String(fieldValue);
|
|
53
|
+
}
|
|
54
|
+
return flattened;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../src/filters.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type JsonLike = Record<string, unknown>;
|
|
2
|
+
export type OutputFormat = "table" | "json" | "jsonl" | "csv";
|
|
3
|
+
export interface FormatFlags {
|
|
4
|
+
json?: boolean;
|
|
5
|
+
jsonl?: boolean;
|
|
6
|
+
csv?: boolean;
|
|
7
|
+
table?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface ExtractedList {
|
|
10
|
+
items: JsonLike[];
|
|
11
|
+
nextCursor?: string | null;
|
|
12
|
+
totalCount?: number | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function resolveOutputFormat(flags: FormatFlags): OutputFormat;
|
|
15
|
+
export declare function extractList(payload: unknown): ExtractedList;
|
|
16
|
+
export declare function printList(payload: unknown, format: OutputFormat, fields?: string[], metadataWriter?: (message: string) => void): void;
|
|
17
|
+
export declare function printObject(payload: unknown, format: OutputFormat, fields?: string[]): void;
|
|
18
|
+
export declare function parseFields(value: string | undefined): string[] | undefined;
|
|
19
|
+
export declare function formatApiError(error: unknown): string;
|
|
20
|
+
export declare function toPlainMessage(value: unknown): string;
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { flattenRecord, projectRecord } from "./filters.js";
|
|
2
|
+
export function resolveOutputFormat(flags) {
|
|
3
|
+
if (flags.json) {
|
|
4
|
+
return "json";
|
|
5
|
+
}
|
|
6
|
+
if (flags.jsonl) {
|
|
7
|
+
return "jsonl";
|
|
8
|
+
}
|
|
9
|
+
if (flags.csv) {
|
|
10
|
+
return "csv";
|
|
11
|
+
}
|
|
12
|
+
return "table";
|
|
13
|
+
}
|
|
14
|
+
export function extractList(payload) {
|
|
15
|
+
if (Array.isArray(payload)) {
|
|
16
|
+
return { items: payload.filter(isJsonLike) };
|
|
17
|
+
}
|
|
18
|
+
if (!isJsonLike(payload)) {
|
|
19
|
+
return { items: [] };
|
|
20
|
+
}
|
|
21
|
+
const dataCandidate = payload.data;
|
|
22
|
+
const nextCursor = typeof payload.next_cursor === "string" ? payload.next_cursor : null;
|
|
23
|
+
const totalCount = typeof payload.total_count === "number" ? payload.total_count : null;
|
|
24
|
+
if (Array.isArray(dataCandidate)) {
|
|
25
|
+
return {
|
|
26
|
+
items: dataCandidate.filter(isJsonLike),
|
|
27
|
+
nextCursor,
|
|
28
|
+
totalCount
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return { items: [payload], nextCursor, totalCount };
|
|
32
|
+
}
|
|
33
|
+
function isJsonLike(value) {
|
|
34
|
+
return value != null && typeof value === "object" && !Array.isArray(value);
|
|
35
|
+
}
|
|
36
|
+
function formatScalar(value) {
|
|
37
|
+
if (value == null) {
|
|
38
|
+
return "";
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === "string") {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
44
|
+
return String(value);
|
|
45
|
+
}
|
|
46
|
+
return JSON.stringify(value);
|
|
47
|
+
}
|
|
48
|
+
function renderTable(records) {
|
|
49
|
+
if (records.length === 0) {
|
|
50
|
+
return "No records found.";
|
|
51
|
+
}
|
|
52
|
+
const columnSet = new Set();
|
|
53
|
+
const rows = records.map((record) => flattenRecord(record));
|
|
54
|
+
for (const row of rows) {
|
|
55
|
+
for (const key of Object.keys(row)) {
|
|
56
|
+
columnSet.add(key);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const columns = [...columnSet];
|
|
60
|
+
const widths = columns.map((column) => column.length);
|
|
61
|
+
rows.forEach((row) => {
|
|
62
|
+
columns.forEach((column, index) => {
|
|
63
|
+
widths[index] = Math.max(widths[index] ?? 0, (row[column] ?? "").length);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
const header = columns.map((column, index) => column.padEnd(widths[index] ?? column.length)).join(" ");
|
|
67
|
+
const separator = columns.map((column, index) => "-".repeat(widths[index] ?? column.length)).join(" ");
|
|
68
|
+
const body = rows.map((row) => columns.map((column, index) => (row[column] ?? "").padEnd(widths[index] ?? column.length)).join(" "));
|
|
69
|
+
return [header, separator, ...body].join("\n");
|
|
70
|
+
}
|
|
71
|
+
function renderCsv(records) {
|
|
72
|
+
if (records.length === 0) {
|
|
73
|
+
return "";
|
|
74
|
+
}
|
|
75
|
+
const flattened = records.map((record) => flattenRecord(record));
|
|
76
|
+
const columns = [...new Set(flattened.flatMap((record) => Object.keys(record)))];
|
|
77
|
+
const escapeValue = (value) => {
|
|
78
|
+
if (value.includes(",") || value.includes("\"") || value.includes("\n")) {
|
|
79
|
+
return `"${value.replaceAll("\"", "\"\"")}"`;
|
|
80
|
+
}
|
|
81
|
+
return value;
|
|
82
|
+
};
|
|
83
|
+
const lines = [
|
|
84
|
+
columns.join(","),
|
|
85
|
+
...flattened.map((record) => columns.map((column) => escapeValue(record[column] ?? "")).join(","))
|
|
86
|
+
];
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
}
|
|
89
|
+
export function printList(payload, format, fields, metadataWriter = console.error) {
|
|
90
|
+
if (format === "json") {
|
|
91
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const extracted = extractList(payload);
|
|
95
|
+
const projected = extracted.items.map((item) => projectRecord(item, fields));
|
|
96
|
+
switch (format) {
|
|
97
|
+
case "jsonl":
|
|
98
|
+
projected.forEach((item) => {
|
|
99
|
+
console.log(JSON.stringify(item));
|
|
100
|
+
});
|
|
101
|
+
break;
|
|
102
|
+
case "csv":
|
|
103
|
+
console.log(renderCsv(projected));
|
|
104
|
+
break;
|
|
105
|
+
case "table":
|
|
106
|
+
console.log(renderTable(projected));
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
const parts = [];
|
|
112
|
+
parts.push(`items=${projected.length}`);
|
|
113
|
+
if (extracted.totalCount != null) {
|
|
114
|
+
parts.push(`total_count=${extracted.totalCount}`);
|
|
115
|
+
}
|
|
116
|
+
if (extracted.nextCursor) {
|
|
117
|
+
parts.push(`next_cursor=${extracted.nextCursor}`);
|
|
118
|
+
}
|
|
119
|
+
metadataWriter(parts.join(" "));
|
|
120
|
+
}
|
|
121
|
+
export function printObject(payload, format, fields) {
|
|
122
|
+
if (!isJsonLike(payload)) {
|
|
123
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const projected = projectRecord(payload, fields);
|
|
127
|
+
if (format === "json" || format === "jsonl") {
|
|
128
|
+
console.log(JSON.stringify(projected, null, format === "json" ? 2 : 0));
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (format === "csv") {
|
|
132
|
+
console.log(renderCsv([projected]));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log(renderTable([projected]));
|
|
136
|
+
}
|
|
137
|
+
export function parseFields(value) {
|
|
138
|
+
if (!value) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
return value.split(",").map((field) => field.trim()).filter(Boolean);
|
|
142
|
+
}
|
|
143
|
+
export function formatApiError(error) {
|
|
144
|
+
if (error instanceof Error) {
|
|
145
|
+
return error.message;
|
|
146
|
+
}
|
|
147
|
+
return String(error);
|
|
148
|
+
}
|
|
149
|
+
export function toPlainMessage(value) {
|
|
150
|
+
if (typeof value === "string") {
|
|
151
|
+
return value;
|
|
152
|
+
}
|
|
153
|
+
return formatScalar(value);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED