Skip to content

Latest commit

 

History

History

README.md

@wdprlib/parser

Parser for Wikidot markup.

Installation

bun add @wdprlib/parser

Usage

import { parse, resolveIncludes, extractDataRequirements, resolveModules } from '@wdprlib/parser'
import type { SyntaxTree, PageRef } from '@wdprlib/parser'

// Basic parsing
const tree: SyntaxTree = parse('**Hello** world')

// Full pipeline with includes and modules
const source = '[[include component:box]]\n[[module ListPages]]\n%%title%%\n[[/module]]'

// 1. Resolve includes
const expanded = resolveIncludes(source, (ref: PageRef) => {
  return getPageSource(ref.page) // your function to fetch page source
})

// 2. Parse
const ast = parse(expanded)

// 3. Extract data requirements for modules
const { requirements, compiledListPagesTemplates } = extractDataRequirements(ast)

// 4. Resolve modules with external data
const resolved = await resolveModules(ast, {
  fetchListPages: async (query) => {
    // Fetch pages matching query from your database
    return { pages: [...], totalCount: 100, site: { name: 'mysite' } }
  },
  getPageTags: () => ['tag1', 'tag2'],
}, {
  parse,
  compiledListPagesTemplates,
  requirements,
})

Features

  • Wikidot markup parsing (bold, italic, links, images, tables, etc.)
  • Include resolution ([[include page]])
  • Module support (ListPages, ListUsers, IfTags, etc.)
  • Data extraction for server-side rendering

Related Packages

License

AGPL-3.0 - See LICENSE