Separated Parsers and Plugins

This commit is contained in:
Emile Bangma 2024-09-19 14:14:56 +00:00
parent e7965b1467
commit dfd6abe6a6
10 changed files with 23 additions and 21 deletions

View File

@ -87,7 +87,6 @@ const config: QuartzConfig = {
Plugin.Static(),
Plugin.NotFoundPage(),
],
parsers: [],
},
}

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources"
import { Root } from "mdast"
@ -12,7 +12,7 @@ const defaultOptions: Options = {
enabled: true,
}
export const CustomDefault: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const CustomDefault: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "CustomDefault",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources"
import { SKIP } from "unist-util-visit"
@ -26,7 +26,7 @@ const arrowMapping: Record<string, string> = {
const arrowRegex = new RegExp(/(-{1,2}>|={1,2}>|<-{1,2}|<={1,2})/g)
export const ObsidianArrow: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianArrow: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianArrow",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { JSResource } from "../../../util/resources"
import { Root, BlockContent, DefinitionContent, Paragraph, Html } from "mdast"
import { visit } from "unist-util-visit"
@ -63,7 +63,7 @@ const mdastToHtml = (ast: PhrasingContent | Paragraph) => {
return toHtml(hast, { allowDangerousHtml: true })
}
export const ObsidianCallouts: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianCallouts: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianCallouts",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
// @ts-ignore
import checkboxScript from "../../../components/scripts/checkbox.inline.ts"
@ -16,7 +16,7 @@ const defaultOptions: Options = {
enabled: true,
}
export const ObsidianCheckboxes: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianCheckboxes: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianCheckboxes",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources"
import { Root } from "mdast"
@ -14,7 +14,7 @@ const defaultOptions: Options = {
const commentRegex = new RegExp(/%%[\s\S]*?%%/g)
export const ObsidianComments: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianComments: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianComments",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources"
import { Root } from "mdast"
@ -14,7 +14,7 @@ const defaultOptions: Options = {
const highlightRegex = new RegExp(/==([^=]+)==/g)
export const ObsidianHighlights: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianHighlights: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianHighlights",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { JSResource } from "../../../util/resources"
import { visit } from "unist-util-visit"
import { Root, Code } from "mdast"
@ -12,7 +12,7 @@ const defaultOptions: Options = {
enabled: true,
}
export const ObsidianMermaid: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianMermaid: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianMermaid",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types"
import { QuartzParser } from "../../types"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { FilePath, splitAnchor, slugifyFilePath } from "../../../util/path"
import { JSResource } from "../../../util/resources"
@ -36,7 +36,7 @@ const wikilinkImageEmbedRegex = new RegExp(
/^(?<alt>(?!^\d*x?\d*$).*?)?(\|?\s*?(?<width>\d+)(x(?<height>\d+))?)?$/,
)
export const ObsidianWikilinks: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
export const ObsidianWikilinks: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts }
return {
name: "ObsidianWikilinks",

View File

@ -10,7 +10,10 @@ export interface PluginTypes {
transformers: QuartzTransformerPluginInstance[]
filters: QuartzFilterPluginInstance[]
emitters: QuartzEmitterPluginInstance[]
parsers: QuartzParserPluginInstance[]
}
export interface ParserTypes {
parsers: QuartzParserInstance[]
}
type OptionType = object | undefined
@ -47,10 +50,10 @@ export type QuartzEmitterPluginInstance = {
): Promise<DepGraph<FilePath>>
}
export type QuartzParserPlugin<Options extends OptionType = undefined> = (
export type QuartzParser<Options extends OptionType = undefined> = (
opts?: Options,
) => QuartzParserPluginInstance
export type QuartzParserPluginInstance = {
) => QuartzParserInstance
export type QuartzParserInstance = {
name: string
textTransform: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
markdownPlugins: (ctx: BuildCtx) => Pluggable