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.Static(),
Plugin.NotFoundPage(), 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 { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources" import { JSResource } from "../../../util/resources"
import { Root } from "mdast" import { Root } from "mdast"
@ -12,7 +12,7 @@ const defaultOptions: Options = {
enabled: true, enabled: true,
} }
export const CustomDefault: QuartzParserPlugin<Partial<Options>> = (userOpts) => { export const CustomDefault: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "CustomDefault", 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 { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources" import { JSResource } from "../../../util/resources"
import { SKIP } from "unist-util-visit" 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) 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 } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "ObsidianArrow", name: "ObsidianArrow",

View File

@ -1,4 +1,4 @@
import { QuartzParserPlugin } from "../../types" import { QuartzParser } from "../../types"
import { JSResource } from "../../../util/resources" import { JSResource } from "../../../util/resources"
import { Root, BlockContent, DefinitionContent, Paragraph, Html } from "mdast" import { Root, BlockContent, DefinitionContent, Paragraph, Html } from "mdast"
import { visit } from "unist-util-visit" import { visit } from "unist-util-visit"
@ -63,7 +63,7 @@ const mdastToHtml = (ast: PhrasingContent | Paragraph) => {
return toHtml(hast, { allowDangerousHtml: true }) return toHtml(hast, { allowDangerousHtml: true })
} }
export const ObsidianCallouts: QuartzParserPlugin<Partial<Options>> = (userOpts) => { export const ObsidianCallouts: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "ObsidianCallouts", 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" import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
// @ts-ignore // @ts-ignore
import checkboxScript from "../../../components/scripts/checkbox.inline.ts" import checkboxScript from "../../../components/scripts/checkbox.inline.ts"
@ -16,7 +16,7 @@ const defaultOptions: Options = {
enabled: true, enabled: true,
} }
export const ObsidianCheckboxes: QuartzParserPlugin<Partial<Options>> = (userOpts) => { export const ObsidianCheckboxes: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "ObsidianCheckboxes", 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 { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources" import { JSResource } from "../../../util/resources"
import { Root } from "mdast" import { Root } from "mdast"
@ -14,7 +14,7 @@ const defaultOptions: Options = {
const commentRegex = new RegExp(/%%[\s\S]*?%%/g) 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 } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "ObsidianComments", 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 { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { JSResource } from "../../../util/resources" import { JSResource } from "../../../util/resources"
import { Root } from "mdast" import { Root } from "mdast"
@ -14,7 +14,7 @@ const defaultOptions: Options = {
const highlightRegex = new RegExp(/==([^=]+)==/g) const highlightRegex = new RegExp(/==([^=]+)==/g)
export const ObsidianHighlights: QuartzParserPlugin<Partial<Options>> = (userOpts) => { export const ObsidianHighlights: QuartzParser<Partial<Options>> = (userOpts) => {
const opts: Options = { ...defaultOptions, ...userOpts } const opts: Options = { ...defaultOptions, ...userOpts }
return { return {
name: "ObsidianHighlights", name: "ObsidianHighlights",

View File

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

View File

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