Notes/src/services/attribute_formatter.ts
2025-01-09 18:36:24 +02:00

47 lines
1.0 KiB
TypeScript

"use strict";
import type { AttributeRow } from "../becca/entities/rows.js";
function formatAttrForSearch(attr: AttributeRow, searchWithValue: boolean) {
let searchStr = "";
if (attr.type === "label") {
searchStr += "#";
} else if (attr.type === "relation") {
searchStr += "~";
} else {
throw new Error(`Unrecognized attribute type ${JSON.stringify(attr)}`);
}
searchStr += attr.name;
if (searchWithValue && attr.value) {
if (attr.type === "relation") {
searchStr += ".noteId";
}
searchStr += "=";
searchStr += formatValue(attr.value);
}
return searchStr;
}
function formatValue(val: string) {
if (!/[^\w]/.test(val)) {
return val;
} else if (!val.includes('"')) {
return `"${val}"`;
} else if (!val.includes("'")) {
return `'${val}'`;
} else if (!val.includes("`")) {
return `\`${val}\``;
} else {
return `"${val.replace(/"/g, '\\"')}"`;
}
}
export default {
formatAttrForSearch
};