forked from github/quartz
28 lines
879 B
TypeScript
28 lines
879 B
TypeScript
const simpleIdentifierPattern = /^[A-Za-z_][A-Za-z0-9_]*$/
|
|
|
|
export function buildPropertyExpressionSource(property: string): string | null {
|
|
const trimmed = property.trim()
|
|
if (!trimmed) return null
|
|
if (trimmed.includes("(") || trimmed.includes("[") || trimmed.includes("]")) {
|
|
return trimmed
|
|
}
|
|
const parts = trimmed.split(".")
|
|
const root = parts[0]
|
|
const rest = parts.slice(1)
|
|
const buildAccess = (base: string, segments: string[]) => {
|
|
let source = base
|
|
for (const segment of segments) {
|
|
if (simpleIdentifierPattern.test(segment)) {
|
|
source = `${source}.${segment}`
|
|
} else {
|
|
source = `${source}[${JSON.stringify(segment)}]`
|
|
}
|
|
}
|
|
return source
|
|
}
|
|
if (root === "file" || root === "note" || root === "formula" || root === "this") {
|
|
return buildAccess(root, rest)
|
|
}
|
|
return buildAccess("note", parts)
|
|
}
|