Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I9eac30c7d4c1c89178f4930b215e523d6a6a6964
2.5 KiB
2.5 KiB
Markdown Metadata Extractor Plugin
This example plugin demonstrates how to create a metadata extractor plugin for Pinakes.
Overview
The Markdown Metadata Extractor enhances Pinakes' built-in markdown support by:
- Parsing YAML and TOML frontmatter
- Extracting metadata from frontmatter fields
- Converting frontmatter tags to Pinakes media tags
- Extracting custom fields from frontmatter
Features
- Frontmatter Parsing: Supports both YAML (
---) and TOML (+++) frontmatter formats - Tag Extraction: Automatically extracts tags from frontmatter and applies them to media items
- Custom Fields: Preserves all frontmatter fields as custom metadata
- Configuration: Configurable via
plugin.tomlconfig section
Frontmatter Example
---
title: "My Document"
author: "John Doe"
date: "2024-01-15"
tags: ["documentation", "example", "markdown"]
category: "tutorials"
draft: false
---
# My Document
Content goes here...
Implementation
The plugin implements the MetadataExtractor trait from pinakes-plugin-api:
#[async_trait]
impl MetadataExtractor for MarkdownMetadataPlugin {
async fn extract_metadata(&self, path: &PathBuf) -> PluginResult<ExtractedMetadata> {
// 1. Read the file
// 2. Parse frontmatter
// 3. Extract metadata fields
// 4. Return ExtractedMetadata
}
fn supported_types(&self) -> Vec<String> {
vec!["markdown".to_string()]
}
}
Building
The plugin is compiled to WebAssembly:
cargo build --target wasm32-wasi --release
wasm-strip target/wasm32-wasi/release/markdown_metadata.wasm
cp target/wasm32-wasi/release/markdown_metadata.wasm .
Installation
# Copy plugin directory to Pinakes plugins directory
cp -r examples/plugins/markdown-metadata ~/.config/pinakes/plugins/
# Or via API
curl -X POST http://localhost:3000/api/v1/plugins/install \
-H "Content-Type: application/json" \
-d '{"source": "/path/to/markdown-metadata"}'
Configuration
The plugin can be configured through the config section in plugin.toml:
extract_tags: Extract tags from frontmatter (default: true)parse_yaml: Parse YAML frontmatter (default: true)parse_toml: Parse TOML frontmatter (default: true)max_file_size: Maximum file size to process in bytes (default: 10MB)
Security
This plugin has minimal capabilities:
- Filesystem: No write access, read access only to files being processed
- Network: Disabled
- Environment: No access
Testing
cargo test
License
MIT