2023-10-03 12:16:33 +00:00
|
|
|
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:";
|
|
|
|
|
2023-12-21 17:37:50 +00:00
|
|
|
// Types marked with a ! are read-only, they cannot be set by the user
|
2023-10-03 12:16:33 +00:00
|
|
|
export const builtins: Record<string, Record<string, string>> = {
|
|
|
|
page: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
displayName: "string",
|
|
|
|
aliases: "array",
|
|
|
|
created: "!date",
|
|
|
|
lastModified: "!date",
|
|
|
|
perm: "!rw|ro",
|
|
|
|
contentType: "!string",
|
|
|
|
size: "!number",
|
2023-10-03 12:16:33 +00:00
|
|
|
tags: "array",
|
|
|
|
},
|
|
|
|
task: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
done: "!boolean",
|
|
|
|
page: "!string",
|
|
|
|
state: "!string",
|
2023-10-03 12:16:33 +00:00
|
|
|
deadline: "string",
|
2023-12-21 17:37:50 +00:00
|
|
|
pos: "!number",
|
2023-10-03 12:16:33 +00:00
|
|
|
tags: "array",
|
|
|
|
},
|
2023-10-13 15:10:57 +00:00
|
|
|
taskstate: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
tags: "!array",
|
|
|
|
state: "!string",
|
|
|
|
count: "!number",
|
|
|
|
page: "!string",
|
2023-10-13 15:10:57 +00:00
|
|
|
},
|
2023-10-03 12:16:33 +00:00
|
|
|
tag: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
page: "!string",
|
|
|
|
context: "!string",
|
2023-10-03 12:16:33 +00:00
|
|
|
},
|
|
|
|
attribute: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
attributeType: "!string",
|
|
|
|
type: "!string",
|
|
|
|
page: "!string",
|
2023-10-03 12:16:33 +00:00
|
|
|
},
|
|
|
|
anchor: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
page: "!string",
|
|
|
|
pos: "!number",
|
2023-10-03 12:16:33 +00:00
|
|
|
},
|
|
|
|
link: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
name: "!string",
|
|
|
|
page: "!string",
|
|
|
|
pos: "!number",
|
|
|
|
alias: "!string",
|
|
|
|
inDirective: "!boolean",
|
|
|
|
asTemplate: "!boolean",
|
2023-10-03 12:16:33 +00:00
|
|
|
},
|
2023-10-12 18:30:47 +00:00
|
|
|
paragraph: {
|
2023-12-21 17:37:50 +00:00
|
|
|
text: "!string",
|
|
|
|
page: "!string",
|
|
|
|
pos: "!number",
|
2023-10-12 18:30:47 +00:00
|
|
|
},
|
2023-11-11 13:28:46 +00:00
|
|
|
template: {
|
2023-12-21 17:37:50 +00:00
|
|
|
ref: "!string",
|
|
|
|
page: "!string",
|
|
|
|
pageName: "string",
|
|
|
|
pos: "!number",
|
|
|
|
type: "string",
|
2023-11-11 13:28:46 +00:00
|
|
|
trigger: "string",
|
|
|
|
},
|
2023-10-03 12:16:33 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export async function loadBuiltinsIntoIndex() {
|
|
|
|
console.log("Loading builtins attributes into index");
|
|
|
|
const allTags: ObjectValue<TagObject>[] = [];
|
|
|
|
for (const [tag, attributes] of Object.entries(builtins)) {
|
|
|
|
allTags.push({
|
|
|
|
ref: tag,
|
|
|
|
tags: ["tag"],
|
|
|
|
name: tag,
|
|
|
|
page: builtinPseudoPage,
|
|
|
|
parent: "builtin",
|
|
|
|
});
|
|
|
|
await indexObjects<AttributeObject>(
|
|
|
|
builtinPseudoPage,
|
|
|
|
Object.entries(attributes).map(([name, attributeType]) => {
|
|
|
|
return {
|
|
|
|
ref: `${tag}:${name}`,
|
|
|
|
tags: ["attribute"],
|
|
|
|
tag,
|
|
|
|
name,
|
2023-12-21 17:37:50 +00:00
|
|
|
attributeType: attributeType.startsWith("!")
|
|
|
|
? attributeType.substring(1)
|
|
|
|
: attributeType,
|
|
|
|
readOnly: attributeType.startsWith("!"),
|
2023-10-03 12:16:33 +00:00
|
|
|
page: builtinPseudoPage,
|
|
|
|
};
|
|
|
|
}),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
await indexObjects(builtinPseudoPage, allTags);
|
|
|
|
}
|