{"_id":"@bernierllc/markdown-renderer","_rev":"2-c74d41fc5045e61f01292c46b5da4d77","name":"@bernierllc/markdown-renderer","dist-tags":{"latest":"0.2.2"},"versions":{"0.1.0":{"name":"@bernierllc/markdown-renderer","version":"0.1.0","keywords":["markdown","renderer","mdx","gfm","remark","rehype","frontmatter"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/markdown-renderer@0.1.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"homepage":"https://github.com/bernierllc/tools#readme","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"dist":{"shasum":"f437d81d9f1a832e39d9478e3f9a6c0171ac8972","tarball":"https://registry.npmjs.org/@bernierllc/markdown-renderer/-/markdown-renderer-0.1.0.tgz","fileCount":14,"integrity":"sha512-9v5uNMX1htANZOEMzA0IYCg19KitxPOC2HKJ8LRgzVn8TQqKuCPCOoKQTPdEJIf18qUGHJr4kwi2B90+cyMGRg==","signatures":[{"sig":"MEQCICwZRBF1Ra24dbGLhPlTK7HITgtBo+2Nf6FmiGJWi+Q5AiBgYpYldHi0Yh4WsfeiZPtrpWYt5yeL25Oexvlbcvs7Xg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32306},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"472d78f7c9e2b45f7e64d3a33fcfc86c2be41419","scripts":{"lint":"eslint src/**/*.ts","test":"jest","build":"tsc","clean":"rm -rf dist","prebuild":"npm run clean","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"repository":{"url":"git+https://github.com/bernierllc/tools.git","type":"git","directory":"packages/markdown-renderer"},"_npmVersion":"11.4.2","description":"Unified markdown renderer with optional flavor detection for MDX, GFM, and standard markdown","directories":{},"_nodeVersion":"24.4.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/react":"^18.0.0"},"peerDependencies":{"react":">=16.0.0"},"_npmOperationalInternal":{"tmp":"tmp/markdown-renderer_0.1.0_1753681243945_0.5279442332572037","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@bernierllc/markdown-renderer","version":"0.2.2","private":false,"description":"Unified markdown renderer with optional flavor detection for MDX, GFM, and standard markdown","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src/**/*.ts","clean":"rm -rf dist","prebuild":"npm run clean"},"keywords":["markdown","renderer","mdx","gfm","remark","rehype","frontmatter"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/markdown-renderer"},"dependencies":{"@bernierllc/markdown-detector":"^0.2.0"},"peerDependencies":{"react":">=16.0.0"},"devDependencies":{"@types/jest":"^29.0.0","@types/node":"^20.0.0","@types/react":"^18.0.0","eslint":"^8.0.0","jest":"^29.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0"},"engines":{"node":">=16.0.0"},"_id":"@bernierllc/markdown-renderer@0.2.2","gitHead":"998d61f462fa11d9708258c74c65adc493a6c7b6","bugs":{"url":"https://github.com/bernierllc/tools/issues"},"homepage":"https://github.com/bernierllc/tools#readme","_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"integrity":"sha512-VmcpCkBbYF5oRnLhrMRqjTkpcc3QfdPJ7BBtCKXTp07aISFXC6YHZwmEa5PwTDTDHZegftFoZg5CTg2T2S1siQ==","shasum":"1898da38cada8ae7831e7c178469ccdac6448206","tarball":"https://registry.npmjs.org/@bernierllc/markdown-renderer/-/markdown-renderer-0.2.2.tgz","fileCount":15,"unpackedSize":31193,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHY/b5ss/oU+O3Kf3wTisIjCIGB59VfNXjlI9R6+ua4BAiAmDA70Oe/lS0AYqQamgk3geZ+mZY1Rdi5X20yK7S+BlA=="}]},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/markdown-renderer_0.2.2_1753732766231_0.23318605132498238"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-28T05:40:43.405Z","modified":"2025-07-28T19:59:26.637Z","0.1.0":"2025-07-28T05:40:44.124Z","0.2.2":"2025-07-28T19:59:26.414Z"},"bugs":{"url":"https://github.com/bernierllc/tools/issues"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","homepage":"https://github.com/bernierllc/tools#readme","keywords":["markdown","renderer","mdx","gfm","remark","rehype","frontmatter"],"repository":{"type":"git","url":"git+https://github.com/bernierllc/tools.git","directory":"packages/markdown-renderer"},"description":"Unified markdown renderer with optional flavor detection for MDX, GFM, and standard markdown","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/markdown-renderer\n\nA unified markdown renderer with automatic flavor detection for MDX, GitHub Flavored Markdown (GFM), and standard markdown with frontmatter support.\n\n## Features\n\n- **🔄 Automatic Detection**: Automatically detects markdown flavor based on content analysis\n- **📝 Multi-Flavor Support**: Handles MDX, GFM, standard markdown, and frontmatter\n- **🎯 High Confidence**: Provides confidence scores and suggestions for detection\n- **⚡ Performance**: Optimized for large content with efficient regex patterns\n- **🛡️ Edge Case Handling**: Robust detection with comprehensive test coverage\n- **🔧 Configurable**: Flexible configuration for custom rendering needs\n\n## Installation\n\n```bash\nnpm install @bernierllc/markdown-renderer\n```\n\n## Quick Start\n\n### Basic Usage\n\n```typescript\nimport { renderMarkdown, detectMarkdownFlavor } from '@bernierllc/markdown-renderer';\n\n// Automatic detection and rendering\nconst result = await renderMarkdown(`\n# My Document\n\nThis is **bold** and *italic* text.\n\n<MyComponent prop=\"value\" />\n`);\n\nconsole.log(result.metadata.flavor); // 'mdx'\nconsole.log(result.metadata.confidence); // 0.95\n```\n\n### Flavor Detection Only\n\n```typescript\nimport { detectMarkdownFlavor } from '@bernierllc/markdown-renderer';\n\nconst detection = detectMarkdownFlavor(content);\nconsole.log(detection.flavor); // 'mdx' | 'gfm' | 'standard' | 'markdown-with-frontmatter'\nconsole.log(detection.confidence); // 0.0 - 1.0\nconsole.log(detection.suggestions); // Array of helpful suggestions\n```\n\n## Supported Markdown Flavors\n\n### 1. MDX (Markdown + JSX)\nDetected when content contains JSX syntax:\n\n```mdx\nimport Component from './Component';\n\n# My MDX Document\n\n<Component prop=\"value\" />\n\n{/* JSX comments */}\n\n<>\n  <p>Fragment content</p>\n</>\n```\n\n### 2. GitHub Flavored Markdown (GFM)\nDetected when content contains GFM features:\n\n```markdown\n# GFM Document\n\n| Table | Header |\n|-------|--------|\n| Cell  | Data   |\n\n~~Strikethrough text~~\n\n- [x] Completed task\n- [ ] Pending task\n\n<https://example.com>\n\n:smile: :heart:\n\n@username #123\n```\n\n### 3. Markdown with Frontmatter\nDetected when content starts with YAML frontmatter:\n\n```markdown\n---\ntitle: My Document\nauthor: John Doe\ndate: 2025-01-01\ntags: [markdown, documentation]\n---\n\n# Content starts here\n\nThis is regular markdown content.\n```\n\n### 4. Standard Markdown\nDefault fallback for basic markdown:\n\n```markdown\n# Standard Markdown\n\nThis is **bold** and *italic* text.\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)\n```\n\n## API Reference\n\n### `renderMarkdown(content, config?)`\n\nRenders markdown content with automatic flavor detection.\n\n**Parameters:**\n- `content` (string): The markdown content to render\n- `config` (RendererConfig, optional): Configuration options\n\n**Returns:** Promise<RenderResult>\n\n### `detectMarkdownFlavor(content)`\n\nDetects the markdown flavor without rendering.\n\n**Parameters:**\n- `content` (string): The markdown content to analyze\n\n**Returns:** DetectionResult\n\n### `MarkdownRenderer` Class\n\nMain renderer class for advanced usage.\n\n```typescript\nimport { MarkdownRenderer } from '@bernierllc/markdown-renderer';\n\nconst renderer = new MarkdownRenderer({\n  flavor: 'auto', // or specific flavor\n  frontmatter: true,\n  syntaxHighlighting: true,\n  outputFormat: 'html'\n});\n\nconst result = await renderer.render(content);\n```\n\n## Configuration Options\n\n### RendererConfig\n\n```typescript\ninterface RendererConfig {\n  flavor?: 'auto' | 'standard' | 'gfm' | 'mdx' | 'markdown-with-frontmatter';\n  frontmatter?: boolean;\n  syntaxHighlighting?: boolean;\n  plugins?: {\n    remark?: any[];\n    rehype?: any[];\n  };\n  components?: Record<string, React.ComponentType>;\n  outputFormat?: 'html' | 'jsx' | 'ast';\n  options?: {\n    gfm?: {\n      breaks?: boolean;\n      tables?: boolean;\n    };\n    mdx?: {\n      jsxImportSource?: string;\n      development?: boolean;\n    };\n  };\n}\n```\n\n## Detection Features\n\nThe detector analyzes content for various features:\n\n### MDX Detection\n- JSX tags (`<Component />`)\n- JSX expressions (`{variable}`)\n- JSX comments (`{/* comment */}`)\n- JSX fragments (`<>...</>`)\n- Import/export statements\n- React hooks (`useState`, etc.)\n\n### GFM Detection\n- Tables with proper formatting\n- Strikethrough (`~~text~~`)\n- Task lists (`- [x] task`)\n- Autolinks (`<https://example.com>`)\n- Emoji (`:smile:`)\n- Mentions (`@username`)\n- Issue/PR references (`#123`)\n\n### Frontmatter Detection\n- YAML frontmatter at document start\n- Proper `---` delimiters\n- Valid key-value pairs\n- Support for arrays and nested objects\n\n### Standard Markdown\n- Headers (`# ## ###`)\n- Emphasis (`**bold**`, `*italic*`)\n- Lists (`- * + 1.`)\n- Links and images\n- Code blocks and inline code\n\n## Edge Cases Handled\n\nThe detector is designed to handle various edge cases:\n\n- **Content in code blocks**: JSX in code blocks doesn't trigger MDX detection\n- **Invalid frontmatter**: Malformed YAML doesn't trigger frontmatter detection\n- **HTML vs JSX**: Distinguishes between HTML tags and JSX components\n- **Large content**: Efficient processing for documents with thousands of lines\n- **Unicode support**: Handles international characters and emoji\n- **Special characters**: Properly escapes regex special characters\n- **Conflicting features**: Provides confidence scoring for ambiguous content\n\n## Performance\n\nThe detector is optimized for performance:\n\n- **Regex optimization**: Efficient patterns that avoid catastrophic backtracking\n- **Early termination**: Stops analysis when confident detection is made\n- **Memory efficient**: Processes content line-by-line for large documents\n- **Caching**: Detection results can be cached for repeated analysis\n\n## Testing\n\nThe package includes comprehensive test coverage:\n\n```bash\nnpm test\nnpm run test:coverage\n```\n\nTest coverage includes:\n- **Unit tests**: Individual detection methods\n- **Integration tests**: Full detection pipeline\n- **Edge case tests**: Boundary conditions and error cases\n- **Performance tests**: Large content and complex patterns\n- **Regression tests**: Known problematic content\n\n## Examples\n\n### Example 1: Blog Post with Frontmatter\n\n```typescript\nconst blogPost = `---\ntitle: Getting Started with Markdown\nauthor: Jane Doe\ndate: 2025-01-15\ntags: [markdown, tutorial, beginner]\n---\n\n# Getting Started\n\nThis is a **great** tutorial about markdown.\n\n## Features\n\n- Easy to learn\n- Widely supported\n- Powerful syntax\n\n[Read more](https://example.com)\n`;\n\nconst result = await renderMarkdown(blogPost);\nconsole.log(result.metadata.flavor); // 'markdown-with-frontmatter'\nconsole.log(result.frontmatter?.title); // 'Getting Started with Markdown'\n```\n\n### Example 2: React Component Documentation\n\n```typescript\nconst componentDoc = `\nimport Button from './Button';\n\n# Button Component\n\nA reusable button component with multiple variants.\n\n<Button variant=\"primary\">\n  Click me\n</Button>\n\n## Props\n\n| Prop | Type | Required | Description |\n|------|------|----------|-------------|\n| variant | string | No | Button style variant |\n| children | ReactNode | Yes | Button content |\n\nexport default Button;\n`;\n\nconst result = await renderMarkdown(componentDoc);\nconsole.log(result.metadata.flavor); // 'mdx'\nconsole.log(result.metadata.confidence); // 0.95\n```\n\n### Example 3: GitHub README\n\n```typescript\nconst readme = `\n# My Awesome Project\n\nA fantastic project that does amazing things.\n\n## Features\n\n- [x] Feature 1\n- [x] Feature 2  \n- [ ] Feature 3 (coming soon)\n\n## Installation\n\n\\`\\`\\`bash\nnpm install my-awesome-project\n\\`\\`\\`\n\n## Contributing\n\nPlease read [CONTRIBUTING.md](CONTRIBUTING.md) for details.\n\n@username please review #123\n`;\n\nconst result = await renderMarkdown(readme);\nconsole.log(result.metadata.flavor); // 'gfm'\nconsole.log(result.metadata.confidence); // 0.85\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests for new functionality\n4. Ensure all tests pass\n5. Submit a pull request\n\n## License\n\nThis package is licensed under the Bernier LLC license. See LICENSE file for details. ","readmeFilename":"README.md"}