98 lines
2.4 KiB
TypeScript
98 lines
2.4 KiB
TypeScript
|
/**
|
|||
|
* Simplify options by normalizing them to an array of matters.
|
|||
|
*
|
|||
|
* @param {Options | null | undefined} [options='yaml']
|
|||
|
* Configuration (default: `'yaml'`).
|
|||
|
* @returns {Array<Matter>}
|
|||
|
* List of matters.
|
|||
|
*/
|
|||
|
export function toMatters(options?: Options | null | undefined): Array<Matter>
|
|||
|
/**
|
|||
|
* Known name of a frontmatter style.
|
|||
|
*/
|
|||
|
export type Preset = 'toml' | 'yaml'
|
|||
|
/**
|
|||
|
* Sequence.
|
|||
|
*
|
|||
|
* Depending on how this structure is used, it reflects a marker or a fence.
|
|||
|
*/
|
|||
|
export type Info = {
|
|||
|
/**
|
|||
|
* Closing.
|
|||
|
*/
|
|||
|
close: string
|
|||
|
/**
|
|||
|
* Opening.
|
|||
|
*/
|
|||
|
open: string
|
|||
|
}
|
|||
|
/**
|
|||
|
* Fields describing a kind of matter.
|
|||
|
*/
|
|||
|
export type MatterProps = {
|
|||
|
/**
|
|||
|
* Node type to tokenize as.
|
|||
|
*/
|
|||
|
type: string
|
|||
|
/**
|
|||
|
* Whether matter can be found anywhere in the document, normally, only matter
|
|||
|
* at the start of the document is recognized.
|
|||
|
*
|
|||
|
* > 👉 **Note**: using this is a terrible idea.
|
|||
|
* > It’s called frontmatter, not matter-in-the-middle or so.
|
|||
|
* > This makes your markdown less portable.
|
|||
|
*/
|
|||
|
anywhere?: boolean | null | undefined
|
|||
|
}
|
|||
|
/**
|
|||
|
* Marker configuration.
|
|||
|
*/
|
|||
|
export type MarkerProps = {
|
|||
|
/**
|
|||
|
* Character repeated 3 times, used as complete fences.
|
|||
|
*
|
|||
|
* For example the character `'-'` will result in `'---'` being used as the
|
|||
|
* fence
|
|||
|
* Pass `open` and `close` to specify different characters for opening and
|
|||
|
* closing fences.
|
|||
|
*/
|
|||
|
marker: Info | string
|
|||
|
/**
|
|||
|
* If `marker` is set, `fence` must not be set.
|
|||
|
*/
|
|||
|
fence?: never
|
|||
|
}
|
|||
|
/**
|
|||
|
* Fence configuration.
|
|||
|
*/
|
|||
|
export type FenceProps = {
|
|||
|
/**
|
|||
|
* Complete fences.
|
|||
|
*
|
|||
|
* This can be used when fences contain different characters or lengths
|
|||
|
* other than 3.
|
|||
|
* Pass `open` and `close` to interface to specify different characters for opening and
|
|||
|
* closing fences.
|
|||
|
*/
|
|||
|
fence: Info | string
|
|||
|
/**
|
|||
|
* If `fence` is set, `marker` must not be set.
|
|||
|
*/
|
|||
|
marker?: never
|
|||
|
}
|
|||
|
/**
|
|||
|
* Fields describing a kind of matter.
|
|||
|
*
|
|||
|
* > 👉 **Note**: using `anywhere` is a terrible idea.
|
|||
|
* > It’s called frontmatter, not matter-in-the-middle or so.
|
|||
|
* > This makes your markdown less portable.
|
|||
|
*
|
|||
|
* > 👉 **Note**: `marker` and `fence` are mutually exclusive.
|
|||
|
* > If `marker` is set, `fence` must not be set, and vice versa.
|
|||
|
*/
|
|||
|
export type Matter = (MatterProps & FenceProps) | (MatterProps & MarkerProps)
|
|||
|
/**
|
|||
|
* Configuration.
|
|||
|
*/
|
|||
|
export type Options = Matter | Preset | Array<Matter | Preset>
|