feat: Unify spark table detection and content resolution
Export isSparkTableHeader from content-registry and use it in both CLI and frontend table parsing. Add resolveContentRef to resolve content references consistently. Write processed registry content back to the file index so browser mode renders identically to CLI mode.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { resolveContent } from "../../cli/content-registry";
|
||||
import { getRegistry } from "../journal/completions";
|
||||
import { getIndexedData } from "../../data-loader/file-index";
|
||||
import { resolvePath } from "./path";
|
||||
|
||||
/**
|
||||
* Resolve a content reference (a directive body) to raw content.
|
||||
*
|
||||
* Prefers the shared content-registry resolution, which understands:
|
||||
* - inline CSV bodies (returned as-is)
|
||||
* - inline doc content refs like `./csv_abc123` (scoped to the current doc)
|
||||
* - absolute paths and relative paths resolved against the current doc
|
||||
*
|
||||
* Falls back to path resolution + the file index when the registry isn't
|
||||
* populated yet (e.g. before completions load) or the ref isn't indexed.
|
||||
*
|
||||
* Returns `null` when nothing matches.
|
||||
*/
|
||||
export async function resolveContentRef(
|
||||
ref: string,
|
||||
docPath: string,
|
||||
): Promise<string | null> {
|
||||
const trimmed = ref.trim();
|
||||
if (!trimmed) return null;
|
||||
|
||||
const resolved = resolveContent(getRegistry(), docPath, trimmed);
|
||||
if (resolved !== null) return resolved;
|
||||
|
||||
// Fallback: resolve relative path and fetch through the file index.
|
||||
const path = resolvePath(docPath, trimmed);
|
||||
try {
|
||||
return await getIndexedData(path);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user