{"_id":"@bernierllc/content-transformer","_rev":"9-7bcb31f1278fc00f73d7792dceff06ac","name":"@bernierllc/content-transformer","dist-tags":{"latest":"1.3.0"},"versions":{"1.0.1":{"name":"@bernierllc/content-transformer","version":"1.0.1","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/content-transformer@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"312a7f65930941d05b0cf38eb79c44f8dc40f6ee","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.0.1.tgz","fileCount":13,"integrity":"sha512-HojN2WeKCe8KEtsI8a01Q1yFTbQuVCO/4zERO/Usb5C9SIdAEXm/EHlhT5JrWs3nQznd5GjJ3zsdxqSErDNZtg==","signatures":[{"sig":"MEUCIQDHbw5Pjnr65aFp2ILtF91GeTjHIgAppfURGYAYbQwd9AIgJP8B7mR4n6BwJkTP4M8t9TaERq5MdZv2s2zW7+K5m84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53573},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3d74c294f52dd0c0c50d3c40a9bad2dce2e63feb","scripts":{"lint":"eslint src tests --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_npmVersion":"11.4.2","description":"Content format transformation utilities for markdown, HTML, and text processing","directories":{},"_nodeVersion":"24.4.1","dependencies":{},"publishConfig":{"access":"restricted"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-transformer_1.0.1_1756771584430_0.09744941109973815","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/content-transformer","version":"1.0.3","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/content-transformer@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"57b5b974f1a680fadbb9788dd4de82dc29a88bcf","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.0.3.tgz","fileCount":14,"integrity":"sha512-TF0i785V3QCE136bTIE/lTUPNkTMTEbqHgFXrdF5kAI0+dtZ46Eq8Yt9HuSmEmZrNT0FmXldDs3Kn60HH+CfIw==","signatures":[{"sig":"MEUCIEce0FsgSQWXT7ZBdlzLBX1AGK5PJkpM07vMKzkeK8rnAiEAsLsTy/hrCEdd7aKpJZavoHJSK2FlxORXFl/kjhOE5dE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58635},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"683786f5b043d9a96c9f49ed1f04f9dccd79eed3","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d57248d3-e9c2-4848-b41b-a5148e536099"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Content format transformation utilities for markdown, HTML, and text processing","directories":{},"_nodeVersion":"20.19.6","publishConfig":{"access":"restricted","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-transformer_1.0.3_1767644236381_0.4722622250781445","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/content-transformer","version":"1.0.4","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/content-transformer@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"7dc5544638292f8f1d30baa6f984de9c39906539","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.0.4.tgz","fileCount":14,"integrity":"sha512-RQF0A/QgyMAwLjfgZj2nkGxl3iClkjntyVOnDdrMFyerBS+PXq7bikHwHi84W+7/EmVRfGnVLhuhTb10IABGfA==","signatures":[{"sig":"MEUCIAWtZ5+Ztk2GjLMZ4qprFd4jTo825ogGGv4I8aFsVykSAiEAhW7gAg5nihoaPuKXW37H4U8rjJXJ2AETOY/DL1fBEgU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58573},"main":"dist/index.js","_from":"file:bernierllc-content-transformer-1.0.4.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d57248d3-e9c2-4848-b41b-a5148e536099"}},"_resolved":"/tmp/1b3d1c85d30a00a3fda1e969b62a5fe3/bernierllc-content-transformer-1.0.4.tgz","_integrity":"sha512-RQF0A/QgyMAwLjfgZj2nkGxl3iClkjntyVOnDdrMFyerBS+PXq7bikHwHi84W+7/EmVRfGnVLhuhTb10IABGfA==","_npmVersion":"11.11.0","description":"Content format transformation utilities for markdown, HTML, and text processing","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-transformer_1.0.4_1773077982185_0.520747768393585","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@bernierllc/content-transformer","version":"1.0.5","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/content-transformer@1.0.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"d7c76ecb3c46cb990653c1ef10039dc0a164360d","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.0.5.tgz","fileCount":14,"integrity":"sha512-21kmOnkgbVARXc2BxJFC5ZknwgNaurSqhOWz/LUiAoXidzEoCppM5Fxri6jZ3ePngsvYmLrgAaIzAh2d6wGzsQ==","signatures":[{"sig":"MEQCIEacWhYFqkWrma8u9ePQmAA+z62DKln4WFGzb4EZPr3ZAiB/dpJc9A0+gAgDyzx6xaoyFS0amJGBnBfJ9lYOOMJ7Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58573},"main":"dist/index.js","_from":"file:bernierllc-content-transformer-1.0.5.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d57248d3-e9c2-4848-b41b-a5148e536099"}},"_resolved":"/tmp/f8c2f9207086844f463aab6f6e6c04f8/bernierllc-content-transformer-1.0.5.tgz","_integrity":"sha512-21kmOnkgbVARXc2BxJFC5ZknwgNaurSqhOWz/LUiAoXidzEoCppM5Fxri6jZ3ePngsvYmLrgAaIzAh2d6wGzsQ==","_npmVersion":"11.11.0","description":"Content format transformation utilities for markdown, HTML, and text processing","directories":{},"_nodeVersion":"20.20.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-transformer_1.0.5_1773081150391_0.3267583278635413","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/content-transformer","version":"1.2.0","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","_id":"@bernierllc/content-transformer@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"e7791d22678d322e2eccee5571fb0359207b8113","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.2.0.tgz","fileCount":18,"integrity":"sha512-MVFRzFzFJzAlDeYxQKeqcWUb0giC5pf5mm/BK8mJ1xvZdCG+IzkafCNFp1K5sWBfviTSltybbRYV0EvoGtOREw==","signatures":[{"sig":"MEQCIES2FDvEn5PgfJ+s1RFuQsot4XSuG196ZqYJ9lDC+/LbAiAD3TxXh5ldxtTUbF1N3rJyq3i1bea0OPneI7ah7t5oTQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61811},"main":"dist/index.js","_from":"file:bernierllc-content-transformer-1.2.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest","build":"tsc","clean":"rm -rf dist","test:watch":"jest --watch","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d57248d3-e9c2-4848-b41b-a5148e536099"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-transformer/bernierllc-content-transformer-1.2.0.tgz","_integrity":"sha512-MVFRzFzFJzAlDeYxQKeqcWUb0giC5pf5mm/BK8mJ1xvZdCG+IzkafCNFp1K5sWBfviTSltybbRYV0EvoGtOREw==","_npmVersion":"11.14.1","description":"Content format transformation utilities for markdown, HTML, and text processing","directories":{},"_nodeVersion":"20.20.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-transformer_1.2.0_1779240994703_0.9903985146850751","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/content-transformer","version":"1.3.0","description":"Content format transformation utilities for markdown, HTML, and text processing","main":"dist/index.js","types":"dist/index.d.ts","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"author":{"name":"Bernier LLC"},"license":"UNLICENSED","devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.5.0","ts-jest":"^29.1.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","clean":"rm -rf dist"},"_id":"@bernierllc/content-transformer@1.3.0","_integrity":"sha512-NQWtp/vAoPY5MgYK17Vsof2pI3W7LZP7WMwVZK7pMjF8VxkNMhDuBHSm6o40aFurYCHzEwK6tjHIFEtLELkzoQ==","_resolved":"/home/runner/work/tools/tools/packages/core/content-transformer/bernierllc-content-transformer-1.3.0.tgz","_from":"file:bernierllc-content-transformer-1.3.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"11.14.1","dist":{"integrity":"sha512-NQWtp/vAoPY5MgYK17Vsof2pI3W7LZP7WMwVZK7pMjF8VxkNMhDuBHSm6o40aFurYCHzEwK6tjHIFEtLELkzoQ==","shasum":"9cfc283defcaa39031691350148b8a825a2d77d0","tarball":"https://registry.npmjs.org/@bernierllc/content-transformer/-/content-transformer-1.3.0.tgz","fileCount":18,"unpackedSize":61811,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG/HI+gxho2crwGq9mggNofnr5gYajKjtNTAbCL4ktouAiEAlbFxDwK+vYctneluPeYt0Vpf/wgFg5U0u7Rs+6RMkIQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d57248d3-e9c2-4848-b41b-a5148e536099"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/content-transformer_1.3.0_1779249731074_0.9254414511525522"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-02T00:06:23.900Z","modified":"2026-05-20T04:02:11.353Z","1.0.1":"2025-09-02T00:06:24.654Z","1.0.3":"2026-01-05T20:17:16.524Z","1.0.4":"2026-03-09T17:39:42.348Z","1.0.5":"2026-03-09T18:32:30.530Z","1.2.0":"2026-05-20T01:36:34.837Z","1.3.0":"2026-05-20T04:02:11.222Z"},"author":{"name":"Bernier LLC"},"license":"UNLICENSED","keywords":["content","transformer","markdown","html","text","converter","bernierllc"],"description":"Content format transformation utilities for markdown, HTML, and text processing","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/content-transformer\n\nContent format transformation utilities for markdown, HTML, and text processing with sanitization and metadata extraction.\n\n## Installation\n\n```bash\nnpm install @bernierllc/content-transformer\n```\n\n## Features\n\n- **Multi-Format Support**: Transform between markdown, HTML, and plain text\n- **Format Detection**: Automatically detect content format\n- **HTML Sanitization**: Built-in XSS protection with configurable allowed tags/attributes\n- **Metadata Extraction**: Extract word count, character count, and other metadata\n- **Presets**: Pre-configured transformation presets for common use cases\n- **TypeScript Support**: Full type safety with strict mode\n\n## Quick Start\n\n### Basic Usage\n\n```typescript\nimport { ContentTransformer, contentUtils } from '@bernierllc/content-transformer';\n\n// Quick markdown to HTML\nconst html = await contentUtils.markdownToHtml('# Hello World');\n\n// Quick HTML to markdown\nconst markdown = await contentUtils.htmlToMarkdown('<h1>Hello World</h1>');\n\n// Extract plain text\nconst text = await contentUtils.toText('# Hello World', 'markdown');\n\n// Sanitize HTML\nconst safe = await contentUtils.sanitizeHtml('<script>alert(\"xss\")</script><p>Safe</p>');\n```\n\n### Advanced Usage\n\n```typescript\nimport { ContentTransformer, transformationPresets } from '@bernierllc/content-transformer';\n\nconst transformer = new ContentTransformer();\n\n// Transform with options\nconst result = await transformer.transform(markdown, {\n  sourceFormat: 'markdown',\n  targetFormat: 'html',\n  sanitize: true,\n  minify: false\n});\n\n// Use presets\nconst blogResult = await transformer.transform(\n  markdown,\n  transformationPresets.blogMarkdownToHtml()\n);\n\n// Detect format\nconst format = transformer.detectFormat(content);\n\n// Extract metadata\nconst metadata = transformer.extractMetadata(content, 'markdown');\n```\n\n## API Reference\n\n### ContentTransformer Class\n\n```typescript\nclass ContentTransformer {\n  constructor(config?: ContentTransformerConfig);\n  \n  async transform(content: string, options: TransformationOptions): Promise<TransformationResult>;\n  detectFormat(content: string): ContentFormat;\n  extractMetadata(content: string, format: ContentFormat): Record<string, unknown>;\n  getWordCount(content: string): number;\n}\n```\n\n### Utility Functions\n\n```typescript\n// Quick transformations\ncontentUtils.markdownToHtml(markdown: string): Promise<string>;\ncontentUtils.htmlToMarkdown(html: string): Promise<string>;\ncontentUtils.toText(content: string, sourceFormat?: 'markdown' | 'html'): Promise<string>;\ncontentUtils.sanitizeHtml(html: string): Promise<string>;\ncontentUtils.detectFormat(content: string): ContentFormat;\ncontentUtils.getMetadata(content: string, format?: ContentFormat): Record<string, unknown>;\n```\n\n### Presets\n\n```typescript\ntransformationPresets.blogMarkdownToHtml(): TransformationOptions;\ntransformationPresets.emailHtmlSanitize(): TransformationOptions;\ntransformationPresets.docsMarkdownToHtml(): TransformationOptions;\ntransformationPresets.commentTextToHtml(): TransformationOptions;\ntransformationPresets.anyToText(sourceFormat?: 'markdown' | 'html'): TransformationOptions;\n```\n\n### Common Configs\n\n```typescript\ncommonConfigs.strict(): ContentTransformerConfig;  // Strict sanitization\ncommonConfigs.blog(): ContentTransformerConfig;    // Blog content processing\ncommonConfigs.permissive(): ContentTransformerConfig; // Permissive for trusted content\n```\n\n## Integration Status\n\n### Logger Integration\n**Status**: Not applicable\n\n**Justification**: This is a pure utility package with no runtime state, side effects, or error conditions that require logging. The ContentTransformer class is stateless and deterministic - it simply transforms content between formats. All errors are thrown as exceptions that calling code can handle, and there are no background operations, network calls, or state changes that would benefit from structured logging.\n\n**Pattern**: Pure functional utility - no logger integration needed.\n\n### NeverHub Integration\n**Status**: Not applicable\n\n**Justification**: This is a core utility package that performs content format transformations. It does not participate in service discovery, event publishing, or service mesh operations. Content transformation is a stateless utility operation that doesn't require service registration or discovery.\n\n**Pattern**: Core utility - no service mesh integration needed.\n\n### Docs-Suite Integration\n**Status**: Ready\n\n**Format**: TypeDoc-compatible JSDoc comments are included throughout the source code. All public APIs are documented with examples and type information.\n\n## License\n\nCopyright (c) 2025 Bernier LLC. All rights reserved.\n\nThis file is licensed to the client under a limited-use license.\nThe client may use and modify this code *only within the scope of the project it was delivered for*.\nRedistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n\n","readmeFilename":"README.md"}