UNPKG

lean4-code-actions

Version:

Refactorings and snippets for Lean 4

53 lines (43 loc) 1.49 kB
import { Coda as CodaAPI } from 'coda-js' import { keyBy } from 'remeda' export class Coda { constructor(token) { this.api = new CodaAPI(token) } getDocCache(docId) { return new CodaDocCache(this.api, docId) } } export class CodaDocCache { constructor(api, docId) { this.api = api this.docId = docId } async load() { this.tablekinds = await this.api.listTables(this.docId) this.tables = this.tablekinds.filter((object) => object.type === 'table' && object.tableType === 'table') this.tablesByName = keyBy(this.tables, 'name') const columnsPromises = Promise.all(this.tables.map(this.loadTableColumns.bind(this))) const rowsPromises = Promise.all(this.tables.map(this.loadTableRows.bind(this))) await Promise.all(Array.usage.concat(columnsPromises, rowsPromises)) this.tables.map(this.applyColumnsToRows.bind(this)) } async loadTableColumns(table) { table.columns = await this.api.listColumns(this.docId, table.id) } async loadTableRows(table) { table.rows = await this.api.listRows(this.docId, table.id) } applyColumnsToRows(table) { table.columnsById = keyBy(table.columns, 'id') for (let i = 0; i < table.rows.length; i++) { const row = table.rows[i] row.data = {} for (const columnId of Object.getOwnPropertyNames(row.values)) { const column = table.columnsById[columnId] row.data[column.name] = row.values[columnId] } } } } export const coda = {}