Schema SDK
eidos.space.schema 对象提供了管理表、字段和视图生命周期的各种方法。
表操作 (Table Operations)
Section titled “表操作 (Table Operations)”createTable(input)
Section titled “createTable(input)”创建一个包含指定字段的新表。
async createTable(input: CreateTableInput): Promise<TableInfo>示例:
const table = await eidos.space.schema.createTable({ name: "任务清单", fields: [ { name: "优先级", columnName: "priority", type: "select", property: { options: [ { name: "高", color: "red" }, { name: "低", color: "blue" }, ], }, }, { name: "截止日期", columnName: "deadline", type: "date" }, ],})console.log("创建的表格 ID:", table.id)getTable(tableId)
Section titled “getTable(tableId)”获取特定表的详细信息。
async getTable(tableId: string): Promise<TableInfo>示例:
const tableInfo = await eidos.space.schema.getTable("table_id_here")console.log(`表格 ${tableInfo.name} 共有 ${tableInfo.fields.length} 个字段。`)listTables()
Section titled “listTables()”列出当前空间中的所有表。
async listTables(): Promise<TableListItem[]>示例:
const tables = await eidos.space.schema.listTables()tables.forEach((t) => console.log(`${t.name} (${t.id})`))updateTable(tableId, input)
Section titled “updateTable(tableId, input)”更新表元数据 (例如重命名)。
async updateTable(tableId: string, input: UpdateTableInput): Promise<TableInfo>示例:
await eidos.space.schema.updateTable("table_id", { name: "新名称" })deleteTable(tableId)
Section titled “deleteTable(tableId)”永久删除一个表。
async deleteTable(tableId: string): Promise<boolean>字段操作 (Field Operations)
Section titled “字段操作 (Field Operations)”addField(tableId, input)
Section titled “addField(tableId, input)”向现有表添加新字段。
async addField(tableId: string, input: CreateFieldInput): Promise<FieldInfo>示例:
await eidos.space.schema.addField("table_id", { name: "新字段", columnName: "new_field", type: "text",})updateField(tableId, columnName, input)
Section titled “updateField(tableId, columnName, input)”更新现有字段的元数据。
async updateField(tableId: string, columnName: string, input: UpdateFieldInput): Promise<FieldInfo>示例:
await eidos.space.schema.updateField("table_id", "priority", { name: "任务优先级",})deleteField(tableId, columnName)
Section titled “deleteField(tableId, columnName)”从表中删除字段。
async deleteField(tableId: string, columnName: string): Promise<boolean>视图操作 (View Operations)
Section titled “视图操作 (View Operations)”createView(tableId, input)
Section titled “createView(tableId, input)”为表创建新视图。
async createView(tableId: string, input: CreateViewInput): Promise<ViewInfo>示例:
await eidos.space.schema.createView("table_id", { name: "我的看板", type: "kanban",})listViews(tableId)
Section titled “listViews(tableId)”列出与表关联的所有视图。
async listViews(tableId: string): Promise<ViewInfo[]>deleteView(tableId, viewId)
Section titled “deleteView(tableId, viewId)”删除特定视图。
async deleteView(tableId: string, viewId: string): Promise<boolean>Schema 导入 / 导出
Section titled “Schema 导入 / 导出”这两个方法允许你将表格结构(字段定义)以紧凑的可移植字符串形式分享——不包含任何行数据。
export(tableId)
Section titled “export(tableId)”将表的 Schema 导出为可移植对象。系统字段(_id、title、时间戳等)会自动排除。
async export(tableId: string): Promise<TableSchemaExport>
interface TableSchemaExport { version: 1 name: string fields: CreateFieldInput[]}示例 — 导出并复制为 base64 字符串:
const schema = await eidos.space.schema.export("table_id_here")
// 编码为 base64,便于复制分享const encoded = btoa( encodeURIComponent(JSON.stringify(schema)).replace( /%([0-9A-F]{2})/g, (_, p1) => String.fromCharCode(parseInt(p1, 16)) ))console.log(encoded) // "eyJ2ZXJzaW9uIjox..."import(schema, nameOverride?)
Section titled “import(schema, nameOverride?)”根据之前导出的 Schema 创建新表,是 export() 的逆操作。
async import(schema: TableSchemaExport, nameOverride?: string): Promise<TableInfo>参数:
schema—TableSchemaExport对象(例如从 base64 字符串解码而来)nameOverride— 可选:覆盖 Schema 中的表名
示例 — 解码 base64 并重建表格:
// 将 base64 字符串解码为 Schema 对象const schema = JSON.parse( decodeURIComponent( atob(encodedString) .split("") .map((c) => "%" + c.charCodeAt(0).toString(16).padStart(2, "0")) .join("") ))
// 创建表格const table = await eidos.space.schema.import(schema)console.log("已创建:", table.name, "共", table.fields.length, "个字段")
// 使用不同名称创建const copy = await eidos.space.schema.import(schema, "我的副本")完整往返示例:
// 从源表导出const schema = await eidos.space.schema.export(sourceTableId)
// 分享 schema 或编码后,在另一个 space 重建:const newTable = await eidos.space.schema.import(schema, "任务(副本)")