@kevisual/noco
Version:
一个轻量级的 NocoDB API SDK,支持表记录操作和 Base 管理功能。
149 lines (140 loc) • 3.91 kB
text/typescript
import { Query, ResponseList } from '../api.ts';
export type BaseOptions = {
query: Query;
};
type TableMetaInfo = {
id: string;
source_id: string;
base_id: string;
table_name: string;
title: string;
type: string;
meta: any;
schema: any;
enabled: boolean;
mm: boolean;
tags: string | null;
pinned: boolean | null;
deleted: boolean | null;
order: number;
created_at: string;
updated_at: string;
description: string;
synced: boolean;
created_by: string | null;
owned_by: string | null;
uuid: string | null;
password: string | null;
fk_custom_url_id: string | null;
views?: Array<any>;
columns?: Array<any>;
columnsById?: Record<string, any>;
columnHash?: string;
}
export class MetaTables {
query: Query;
constructor(options?: BaseOptions) {
this.query = options?.query;
}
/**
* 列出所有 tables
*/
async list(baseId: string): Promise<ResponseList<TableMetaInfo>> {
return this.query.makeRequest(`/api/v2/meta/bases/${baseId}/tables`, {
method: 'GET',
});
}
async createTable(baseId: string, data: CreateTableData): Promise<{ code: number; data: TableMetaInfo }> {
return this.query.makeRequest(`/api/v2/meta/bases/${baseId}/tables`, {
method: 'POST',
data,
});
}
async getTableMeta(tableId: string): Promise<{ code: number; data: TableMetaInfo }> {
return this.query.makeRequest(`/api/v2/meta/tables/${tableId}`, {
method: 'GET',
});
}
async createColumn(tableId: string, data: any): Promise<{ code: number; data: any }> {
return this.query.makeRequest(`/api/v2/meta/tables/${tableId}/columns`, {
method: 'POST',
data,
});
}
}
export type CreateColumnData = {
title: string;
uidt?: ColumnTypes
description?: string;
/** id 自增的必填项 */
pk?: boolean;
/**
* 是否为主键 primay 的值
*/
pv?: boolean;
/** 是否必填 */
rqd?: boolean;
/** 单元格默认值 */
cdf?: string;
/**
* 列选项配置
*/
colOptions?: {
options?: Array<{
title: string;
color?: string;
[key: string]: any;
}>;
};
/**
* 其他元信息
*/
meta?: Record<string, any>;
}
export const columnTypes = [
'SingleLineText', // 单行文本
'LongText', // 长文本
'PhoneNumber', // 电话号码
'Email', // 邮箱
'URL', // 链接
'Number', // 数字
'Decimal', // 小数
'Percent', // 百分比
'Currency', // 货币
'Duration', // 时长
'Date', // 日期
'Time', // 时间
'DateTime', // 日期时间
'Year', // 年份
'SingleSelect', // 单选
'MultiSelect', // 多选
'User', // 用户
'Attachment', // 附件
'Checkbox', // 复选框
'Rating', // 评分
'Button', // 按钮
'Formula', // 公式
'Barcode', // 条形码
'QRCode', // 二维码
'Links', // 链接关系
'LinkToAnotherRecord', // 关联记录
'Lookup', // 查找
'Rollup', // 汇总
'ID', // ID
'CreatedTime', // 创建时间
'LastModifiedTime', // 最后修改时间
'CreatedBy', // 创建者
'LastModifiedBy', // 最后修改者
'GeoData', // 地理数据
'Geometry', // 几何图形
'JSON', // JSON
'SpecificDBType' // 特定数据库类型
] as const;
export type ColumnTypes = typeof columnTypes[number];
export type CreateTableData = {
table_name?: string;
title: string;
description?: string;
columns: CreateColumnData[];
[key: string]: any;
}