npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

social-web-formatter

v0.4.0

Published

A TypeScript library for converting custom HTML-like tags into platform-specific formatting for social networks (Discord, Telegram, VK).

Readme

SocialWebFormatter

A TypeScript library for converting custom HTML-like tags into platform-specific formatting for social networks (Discord, Telegram, VK).

Features

  • Platform Support: Convert tags to Discord, Telegram, and VK formatting
  • Custom Tags: Use simple HTML-like tags for formatting
  • Platform-Specific Content: Use <only> tags to show content only on specific platforms
  • TypeScript First: Full TypeScript support with proper type definitions
  • Extensible: Easy to add new processors for other platforms

Installation

npm install social-web-formatter

Supported Tags

| Tag | Description | Example | |-----|-------------|---------| | <b> | Bold text | <b>bold text</b> | | <i> | Italic text | <i>italic text</i> | | <quote> | Quoted text | <quote>quoted text</quote> | | <spoiler> | Spoiler/hidden text | <spoiler>spoiler text</spoiler> | | <link> | Hyperlink | <link https://example.com>link text</link> | | <code> | Code block | <code>code block</code> | | <ms> | Monospace text | <ms>monospace text</ms> | | <only> | Platform-specific content | <only discord>only on discord</only> |

Quick Start

import { process, DiscordProcessor, TelegramProcessor, VKProcessor } from 'social-web-formatter';

const input = `
<b>bold text</b>
<i>italic text</i>
<only discord>only for discord</only>
<only tg>only for telegram</only>
`;

// Convert for Discord
const discordOutput = process(input, new DiscordProcessor());
console.log(discordOutput);
// Output: **bold text** _italic text_ only for discord

// Convert for Telegram
const telegramOutput = process(input, new TelegramProcessor());
console.log(telegramOutput);
// Output: **bold text** __italic text__ only for telegram

// Convert for VK
const vkOutput = process(input, new VKProcessor());
console.log(vkOutput);
// Output: bold text italic text only for telegram

API

Main Function

process(text: string, processor: TagProcessor): string

Processes the input text using the specified processor.

  • text: Input text with custom tags
  • processor: Platform processor (DiscordProcessor, TelegramProcessor, VKProcessor)
  • Returns: Formatted text for the target platform

Processors

  • DiscordProcessor: Formats text for Discord
  • TelegramProcessor: Formats text for Telegram
  • VKProcessor: Formats text for VK (removes formatting)

Creating Custom Processors

Implement the TagProcessor interface:

import { TagProcessor } from 'social-web-formatter';

class MyCustomProcessor implements TagProcessor {
  WHITELIST_TAG = "myplatform";

  start(text: string): string {
    // Pre-process text if needed
    return text;
  }

  process(tag: ProcessTagInput): string {
    // Convert tags to platform-specific formatting
    switch (tag.tag) {
      case 'b': return `**${tag.content}**`;
      // ... handle other tags
      default: return tag.content;
    }
  }

  finalize(text: string): string {
    // Post-process text if needed
    return text;
  }
}

Examples

Complex Formatting

const complexInput = `
<only discord tg>
<quote>
<i>This will appear in</i> <b>Discord and Telegram</b>
</quote>
</only>
<only vk>
This will only appear in VK
</only>
`;

const discordResult = process(complexInput, new DiscordProcessor());
// Result: > _This will appear in_ **Discord and Telegram**

Links with Parameters

const linkInput = `<link https://github.com/Makar-Ts/SocialWebFormatter>GitHub Repository</link>`;

const discordLink = process(linkInput, new DiscordProcessor());
// Result: [GitHub Repository](https://github.com/Makar-Ts/SocialWebFormatter)

const telegramLink = process(linkInput, new TelegramProcessor());
// Result: (GitHub Repository)[https://github.com/Makar-Ts/SocialWebFormatter]

Development

Building

npm run build

License

MIT License - see LICENSE file for details.

Author

Makar Ts - GitHub