848211120c
Introduction of `tag` and `itags`
120 lines
2.6 KiB
TypeScript
120 lines
2.6 KiB
TypeScript
import { ObjectValue } from "$sb/types.ts";
|
|
import { indexObjects } from "./api.ts";
|
|
import { AttributeObject } from "./attributes.ts";
|
|
import { TagObject } from "./tags.ts";
|
|
|
|
export const builtinPseudoPage = ":builtin:";
|
|
|
|
// Types marked with a ! are read-only, they cannot be set by the user
|
|
export const builtins: Record<string, Record<string, string>> = {
|
|
page: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
displayName: "string",
|
|
aliases: "string[]",
|
|
created: "!date",
|
|
lastModified: "!date",
|
|
perm: "!rw|ro",
|
|
contentType: "!string",
|
|
size: "!number",
|
|
tags: "string[]",
|
|
},
|
|
task: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
done: "!boolean",
|
|
page: "!string",
|
|
state: "!string",
|
|
deadline: "string",
|
|
pos: "!number",
|
|
tags: "string[]",
|
|
},
|
|
item: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
page: "!string",
|
|
tags: "string[]",
|
|
},
|
|
taskstate: {
|
|
ref: "!string",
|
|
tags: "!string[]",
|
|
state: "!string",
|
|
count: "!number",
|
|
page: "!string",
|
|
},
|
|
tag: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
page: "!string",
|
|
context: "!string",
|
|
},
|
|
attribute: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
attributeType: "!string",
|
|
tagName: "!string",
|
|
page: "!string",
|
|
readOnly: "!boolean",
|
|
},
|
|
anchor: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
page: "!string",
|
|
pos: "!number",
|
|
},
|
|
link: {
|
|
ref: "!string",
|
|
name: "!string",
|
|
page: "!string",
|
|
pos: "!number",
|
|
alias: "!string",
|
|
asTemplate: "!boolean",
|
|
},
|
|
paragraph: {
|
|
text: "!string",
|
|
page: "!string",
|
|
pos: "!number",
|
|
},
|
|
template: {
|
|
ref: "!string",
|
|
page: "!string",
|
|
pageName: "string",
|
|
pos: "!number",
|
|
type: "string",
|
|
trigger: "string",
|
|
where: "string",
|
|
priority: "number",
|
|
},
|
|
};
|
|
|
|
export async function loadBuiltinsIntoIndex() {
|
|
console.log("Loading builtins attributes into index");
|
|
const allTags: ObjectValue<TagObject>[] = [];
|
|
for (const [tagName, attributes] of Object.entries(builtins)) {
|
|
allTags.push({
|
|
ref: tagName,
|
|
tag: "tag",
|
|
name: tagName,
|
|
page: builtinPseudoPage,
|
|
parent: "builtin",
|
|
});
|
|
await indexObjects<AttributeObject>(
|
|
builtinPseudoPage,
|
|
Object.entries(attributes).map(([name, attributeType]) => {
|
|
return {
|
|
ref: `${tagName}:${name}`,
|
|
tag: "attribute",
|
|
tagName,
|
|
name,
|
|
attributeType: attributeType.startsWith("!")
|
|
? attributeType.substring(1)
|
|
: attributeType,
|
|
readOnly: attributeType.startsWith("!"),
|
|
page: builtinPseudoPage,
|
|
};
|
|
}),
|
|
);
|
|
}
|
|
await indexObjects(builtinPseudoPage, allTags);
|
|
}
|