2022-04-21 11:57:45 +00:00
|
|
|
import {
|
|
|
|
flashNotification,
|
|
|
|
getCurrentPage,
|
|
|
|
getText,
|
|
|
|
reloadPage,
|
2022-04-25 08:33:38 +00:00
|
|
|
save,
|
2022-04-25 09:24:13 +00:00
|
|
|
} from "@silverbulletmd/plugos-silverbullet-syscall/editor";
|
2022-04-01 15:07:08 +00:00
|
|
|
|
2022-04-25 09:24:13 +00:00
|
|
|
import {
|
|
|
|
readPage,
|
|
|
|
writePage,
|
|
|
|
} from "@silverbulletmd/plugos-silverbullet-syscall/space";
|
|
|
|
import { invokeFunction } from "@silverbulletmd/plugos-silverbullet-syscall/system";
|
2022-04-28 09:55:38 +00:00
|
|
|
import { parseQuery, renderQuery } from "./engine";
|
2022-04-13 12:46:52 +00:00
|
|
|
import { replaceTemplateVars } from "../core/template";
|
2022-04-28 09:55:38 +00:00
|
|
|
import { jsonToMDTable, queryRegex, removeQueries } from "./util";
|
2022-04-25 08:33:38 +00:00
|
|
|
import { dispatch } from "@plugos/plugos-syscall/event";
|
2022-04-20 08:56:43 +00:00
|
|
|
import { replaceAsync } from "../lib/util";
|
2022-04-25 09:24:13 +00:00
|
|
|
import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown";
|
2022-03-29 15:02:28 +00:00
|
|
|
|
|
|
|
export async function updateMaterializedQueriesCommand() {
|
2022-04-01 15:07:08 +00:00
|
|
|
const currentPage = await getCurrentPage();
|
|
|
|
await save();
|
2022-04-20 08:56:43 +00:00
|
|
|
await flashNotification("Updating materialized queries...");
|
2022-04-05 15:02:17 +00:00
|
|
|
await invokeFunction(
|
|
|
|
"server",
|
|
|
|
"updateMaterializedQueriesOnPage",
|
|
|
|
currentPage
|
|
|
|
);
|
2022-04-01 15:07:08 +00:00
|
|
|
await reloadPage();
|
2022-03-29 15:02:28 +00:00
|
|
|
}
|
|
|
|
|
2022-04-20 08:56:43 +00:00
|
|
|
export async function whiteOutQueriesCommand() {
|
|
|
|
const text = await getText();
|
|
|
|
const parsed = await parseMarkdown(text);
|
|
|
|
console.log(removeQueries(parsed));
|
|
|
|
}
|
|
|
|
|
2022-03-29 15:02:28 +00:00
|
|
|
// Called from client, running on server
|
|
|
|
export async function updateMaterializedQueriesOnPage(pageName: string) {
|
2022-04-01 15:07:08 +00:00
|
|
|
let { text } = await readPage(pageName);
|
2022-04-08 15:46:09 +00:00
|
|
|
|
2022-04-12 11:33:07 +00:00
|
|
|
text = await replaceAsync(
|
|
|
|
text,
|
|
|
|
queryRegex,
|
|
|
|
async (fullMatch, startQuery, query, body, endQuery) => {
|
2022-04-19 14:54:47 +00:00
|
|
|
let parsedQuery = parseQuery(replaceTemplateVars(query, pageName));
|
2022-04-06 13:39:20 +00:00
|
|
|
|
2022-04-12 11:33:07 +00:00
|
|
|
console.log("Parsed query", parsedQuery);
|
2022-04-19 14:54:47 +00:00
|
|
|
// Let's dispatch an event and see what happens
|
|
|
|
let results = await dispatch(
|
|
|
|
`query:${parsedQuery.table}`,
|
|
|
|
{ query: parsedQuery, pageName: pageName },
|
2022-04-20 08:56:43 +00:00
|
|
|
10 * 1000
|
2022-04-19 14:54:47 +00:00
|
|
|
);
|
|
|
|
if (results.length === 0) {
|
|
|
|
return `${startQuery}\n${endQuery}`;
|
|
|
|
} else if (results.length === 1) {
|
2022-04-28 09:55:38 +00:00
|
|
|
if (parsedQuery.render) {
|
|
|
|
let rendered = await renderQuery(parsedQuery, results[0]);
|
|
|
|
return `${startQuery}\n${rendered.trim()}\n${endQuery}`;
|
|
|
|
} else {
|
|
|
|
return `${startQuery}\n${jsonToMDTable(results[0])}\n${endQuery}`;
|
|
|
|
}
|
2022-04-19 14:54:47 +00:00
|
|
|
} else {
|
|
|
|
console.error("Too many query results", results);
|
|
|
|
return fullMatch;
|
2022-04-12 11:33:07 +00:00
|
|
|
}
|
2022-03-29 15:02:28 +00:00
|
|
|
}
|
2022-04-12 11:33:07 +00:00
|
|
|
);
|
2022-03-29 15:02:28 +00:00
|
|
|
// console.log("New text", text);
|
2022-04-01 15:07:08 +00:00
|
|
|
await writePage(pageName, text);
|
2022-03-29 15:02:28 +00:00
|
|
|
}
|