mirror of https://github.com/requarks/wiki
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
4.8 KiB
203 lines
4.8 KiB
import type { FastifyInstance } from 'fastify'
|
|
|
|
export async function registerSchemas(app: FastifyInstance): Promise<void> {
|
|
/**
|
|
* TREE ITEM - One entry of a folder listing, whichever of the three kinds it is
|
|
*/
|
|
app.addSchema({
|
|
$id: 'TreeItem',
|
|
type: 'object',
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
},
|
|
type: {
|
|
type: 'string',
|
|
enum: ['folder', 'page', 'asset']
|
|
},
|
|
depth: {
|
|
type: 'integer',
|
|
description: 'How many folders deep the entry sits, 0 being the site root.'
|
|
},
|
|
folderPath: {
|
|
type: 'string',
|
|
description: 'Slash-separated, without a leading or trailing slash. Empty at the site root.'
|
|
},
|
|
fileName: {
|
|
type: 'string'
|
|
},
|
|
title: {
|
|
type: 'string'
|
|
},
|
|
tags: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string'
|
|
}
|
|
},
|
|
createdAt: {
|
|
type: 'string',
|
|
format: 'date-time'
|
|
},
|
|
updatedAt: {
|
|
type: 'string',
|
|
format: 'date-time'
|
|
},
|
|
childrenCount: {
|
|
type: 'integer',
|
|
description: 'Folders only — how many entries the folder holds.'
|
|
},
|
|
isAncestor: {
|
|
type: 'boolean',
|
|
description:
|
|
'Folders only — true when the folder sits above the one being listed, i.e. it came from `includeAncestors` or `includeRootFolders` rather than from the listing itself.'
|
|
},
|
|
fileSize: {
|
|
type: 'integer',
|
|
description: 'Assets only — in bytes.'
|
|
},
|
|
fileExt: {
|
|
type: 'string',
|
|
description: 'Assets only — lowercase, without the dot.'
|
|
},
|
|
mimeType: {
|
|
type: 'string',
|
|
description: 'Assets only.'
|
|
},
|
|
editor: {
|
|
type: 'string',
|
|
description: 'Pages only.'
|
|
},
|
|
description: {
|
|
type: 'string',
|
|
description: 'Pages only.'
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* BROWSE ITEM - One entry of a reader's folder listing, which may be a page and a folder at once
|
|
*/
|
|
app.addSchema({
|
|
$id: 'BrowseItem',
|
|
type: 'object',
|
|
properties: {
|
|
path: {
|
|
type: 'string',
|
|
description:
|
|
"Slash-separated path of the entry: the page's own URL, and the folder to list on the way down."
|
|
},
|
|
fileName: {
|
|
type: 'string'
|
|
},
|
|
title: {
|
|
type: 'string',
|
|
description: "The page's title when there is a page here, otherwise the folder's."
|
|
},
|
|
icon: {
|
|
type: ['string', 'null'],
|
|
description:
|
|
"The page's icon, as an Iconify reference. Null for a folder with no page at its path."
|
|
},
|
|
isPage: {
|
|
type: 'boolean',
|
|
description: 'Whether there is a page at this path to open.'
|
|
},
|
|
isFolder: {
|
|
type: 'boolean',
|
|
description: 'Whether there is a folder at this path to descend into.'
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* LISTED PAGE - One page of a reader-facing listing, as an index block draws it
|
|
*/
|
|
app.addSchema({
|
|
$id: 'ListedPage',
|
|
type: 'object',
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
},
|
|
path: {
|
|
type: 'string',
|
|
description: 'Slash-separated path of the page, i.e. its URL within the site.'
|
|
},
|
|
title: {
|
|
type: 'string'
|
|
},
|
|
description: {
|
|
type: 'string'
|
|
},
|
|
icon: {
|
|
type: 'string',
|
|
description: "The page's icon, as an Iconify reference. Empty when it has none."
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* FOLDER INPUT - The writable fields of a folder, used for both create and rename
|
|
*/
|
|
app.addSchema({
|
|
$id: 'FolderInput',
|
|
type: 'object',
|
|
properties: {
|
|
pathName: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
maxLength: 255,
|
|
pattern: '^[a-z0-9-]+$',
|
|
description: "The folder's own path segment, as it appears in a URL."
|
|
},
|
|
title: {
|
|
type: 'string',
|
|
minLength: 1,
|
|
maxLength: 255,
|
|
description: 'What the folder is called when it is shown to a reader.'
|
|
}
|
|
}
|
|
})
|
|
|
|
/**
|
|
* FOLDER - A folder, as returned after creating or renaming one
|
|
*/
|
|
app.addSchema({
|
|
$id: 'Folder',
|
|
type: 'object',
|
|
properties: {
|
|
id: {
|
|
type: 'string',
|
|
format: 'uuid'
|
|
},
|
|
folderPath: {
|
|
type: 'string',
|
|
description: 'Slash-separated path of the folder holding this one. Empty at the site root.'
|
|
},
|
|
fileName: {
|
|
type: 'string'
|
|
},
|
|
title: {
|
|
type: 'string'
|
|
},
|
|
locale: {
|
|
type: 'string'
|
|
},
|
|
childrenCount: {
|
|
type: 'integer'
|
|
},
|
|
createdAt: {
|
|
type: 'string',
|
|
format: 'date-time'
|
|
},
|
|
updatedAt: {
|
|
type: 'string',
|
|
format: 'date-time'
|
|
}
|
|
}
|
|
})
|
|
}
|