export type Row = Record<string, unknown>;
/** Whether a decoded JSON value is an object. */
export declare function isRow(value: unknown): value is Row;
/** A decoded JSON object, or an empty one for anything else. */
export declare function asRow(value: unknown): Row;
/** The objects of a decoded JSON array; anything else holds none. */
export declare function asRows(value: unknown): Row[];
/** One base as the listing names it: id, name and permission level. */
export declare function normalizeBaseSummary(base: Row): Row;
/** base.json: the base and the tables it holds. */
export declare function normalizeBase(base: Row, tables: readonly Row[]): Row;
/** One column: its id, name, type and the type's options. */
export declare function normalizeField(column: Row): Row;
/** One saved view: its id, name and kind (grid, kanban, ...). */
export declare function normalizeView(view: Row): Row;
/** table.json: the column schema and the saved views. */
export declare function normalizeTable(table: Row, baseId: string): Row;
/**
 * One records.jsonl row. `fields` is Airtable's cell map, keyed by field
 * name and passed through untouched: an empty cell is absent (Airtable never
 * sends one), a link is a list of record ids, and an attachment's url is the
 * API's own, which expires two hours after it was fetched.
 */
export declare function normalizeRecord(record: Row): Row;
/** One comment on a record, with its author flattened. */
export declare function normalizeComment(comment: Row): Row;
/** One deleted record, as the delete answer names it. */
export declare function normalizeDeletion(row: Row): Row;
/** Render records one per line, in the order they were listed. */
export declare function recordsJsonl(listed: readonly Row[]): Uint8Array;
/** Render deleted records one per line, in the order they were deleted. */
export declare function deletionsJsonl(rows: readonly Row[]): Uint8Array;
//# sourceMappingURL=normalize.d.ts.map