Fixes #1234
parent
654151437c
commit
5eb2405823
|
@ -119,7 +119,7 @@ export async function expandCodeWidgets(
|
|||
result = result.markdown;
|
||||
}
|
||||
|
||||
const markdown = renderExpressionResult(result);
|
||||
const markdown = await renderExpressionResult(result);
|
||||
return await parseMarkdown(markdown);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import type { PageMeta } from "../../plug-api/types.ts";
|
||||
import { space, system, template } from "@silverbulletmd/silverbullet/syscalls";
|
||||
import { cleanTemplate } from "./plug_api.ts";
|
||||
import { LuaTable } from "$common/space_lua/runtime.ts";
|
||||
import { LuaTable, luaToString } from "$common/space_lua/runtime.ts";
|
||||
|
||||
export function defaultJsonTransformer(v: any): string {
|
||||
export async function defaultJsonTransformer(v: any): Promise<string> {
|
||||
if (v === undefined) {
|
||||
return "";
|
||||
}
|
||||
|
@ -11,33 +11,18 @@ export function defaultJsonTransformer(v: any): string {
|
|||
return v.replaceAll("\n", " ").replaceAll("|", "\\|");
|
||||
}
|
||||
if (Array.isArray(v)) {
|
||||
return v.map(defaultJsonTransformer).join(", ");
|
||||
return (await Promise.all(v.map(defaultJsonTransformer))).join(", ");
|
||||
} else if (v && typeof v === "object") {
|
||||
return Object.entries(v).map(([k, v]: [string, any]) =>
|
||||
`${k}: ${defaultJsonTransformer(v)}`
|
||||
).join(", ");
|
||||
return luaToString(v);
|
||||
}
|
||||
return "" + v;
|
||||
}
|
||||
|
||||
export function jsonObjectToMDTable(
|
||||
obj: Record<string, any>,
|
||||
valueTransformer: (v: any) => string = defaultJsonTransformer,
|
||||
): string {
|
||||
const lines = [];
|
||||
lines.push("| Key | Value |");
|
||||
lines.push("| --- | --- |");
|
||||
for (const [k, v] of Object.entries(obj)) {
|
||||
lines.push(`| ${k} | ${valueTransformer(v)} |`);
|
||||
}
|
||||
return lines.join("\n");
|
||||
}
|
||||
|
||||
// Nicely format an array of JSON objects as a Markdown table
|
||||
export function jsonToMDTable(
|
||||
export async function jsonToMDTable(
|
||||
jsonArray: any[],
|
||||
valueTransformer: (v: any) => string = defaultJsonTransformer,
|
||||
): string {
|
||||
valueTransformer: (v: any) => Promise<string> = defaultJsonTransformer,
|
||||
): Promise<string> {
|
||||
const headers = new Set<string>();
|
||||
for (const entry of jsonArray) {
|
||||
for (const k of Object.keys(entry)) {
|
||||
|
@ -66,7 +51,7 @@ export function jsonToMDTable(
|
|||
for (const val of jsonArray) {
|
||||
const el = [];
|
||||
for (const prop of headerList) {
|
||||
const s = valueTransformer(val[prop]);
|
||||
const s = await valueTransformer(val[prop]);
|
||||
el.push(s);
|
||||
}
|
||||
lines.push("|" + el.join("|") + "|");
|
||||
|
@ -93,7 +78,7 @@ export async function renderQueryTemplate(
|
|||
});
|
||||
}
|
||||
|
||||
export function renderExpressionResult(result: any): string {
|
||||
export function renderExpressionResult(result: any): Promise<string> {
|
||||
if (result instanceof LuaTable) {
|
||||
result = result.toJS();
|
||||
}
|
||||
|
@ -109,15 +94,15 @@ export function renderExpressionResult(result: any): string {
|
|||
JSON.stringify(result)
|
||||
}`,
|
||||
);
|
||||
return JSON.stringify(result);
|
||||
return Promise.resolve(JSON.stringify(result));
|
||||
}
|
||||
} else if (typeof result === "object" && result.constructor === Object) {
|
||||
// if result is a plain object, render as a markdown table
|
||||
return jsonToMDTable([result]);
|
||||
} else if (Array.isArray(result)) {
|
||||
// Not-object array, let's render it as a markdown list
|
||||
return result.map((item) => `- ${item}`).join("\n");
|
||||
return Promise.resolve(result.map((item) => `- ${item}`).join("\n"));
|
||||
} else {
|
||||
return "" + result;
|
||||
return Promise.resolve("" + result);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ export class LuaWidget extends WidgetType {
|
|||
// If there is a markdown key, use it, otherwise render the objects as a markdown table
|
||||
let mdContent = widgetContent.markdown;
|
||||
if (!mdContent) {
|
||||
mdContent = renderExpressionResult(widgetContent);
|
||||
mdContent = await renderExpressionResult(widgetContent);
|
||||
}
|
||||
let mdTree = parse(
|
||||
extendedMarkdownLanguage,
|
||||
|
|
Loading…
Reference in New Issue