@dxtmisha/media

中文文档
1.1.2发布于 2026/11/08MITTypeScriptES Module零依赖近 30 天下载 2012

Media resources, vector icon libraries, and geographical datasets for DXT UI — file classification, social networks, country flags, and ISO 3166-1 country metadata. Framework-agnostic, tree-shakeable, zero dependencies.

原始使用文档
文档目录8 节
  1. Why this library?
  2. What does it do?
  3. Installation
  4. Quick Start
  5. Subpath Exports
  6. Principles
  7. Documentation
  8. License

@dxtmisha/media

npm version License: MIT Node.js Version

@dxtmisha/media is a foundational media resources, vector icon libraries, and geographical dataset library for modern web development. It's framework-agnostic, tree-shakeable, zero-dependency, and can be used in any TypeScript project — whether Vue, React, Nuxt, or plain browser code.

Why this library?

Every web application eventually faces the same recurring requirements: handling file uploads and displaying file-type icons, validating and formatting social media profiles and user handles, and rendering localized country flags or phone number input masks. Typically, projects solve these with fragmented SVG snippets, ad-hoc regular expressions, bloated icon fonts, and copy-pasted country datasets that quickly become obsolete and needlessly inflate production bundles.

@dxtmisha/media brings all these solutions together in one place — thoughtful, tested, and ready to use. Heavy SVG assets are completely decoupled from core metadata registries, allowing you to import only what you need and keep client-side bundles minimal.

What does it do?

For file handling and classification — MediaFile unifies heterogeneous inputs (native browser File or Blob objects, Data URLs, Blob URLs, remote URLs, filesystem paths, MIME types, or extension codes) into a standardized interface. It resolves filenames, extensionless base names, normalized extensions, canonical MIME types, categories across 16 media classifications (image, video, document, archive, table, etc.), and 22 built-in boolean checkers (isImage(), isDocument(), isArchive(), etc.).

For file catalog and custom icons — MediaFiles provides centralized lookup by code, extension, or MIME type with lazy in-memory Map indexing for instant O(1) retrieval, while MediaFileIcon provides a prototype-isolated in-memory registry to override or inject custom SVG icons dynamically with fluent method chaining.

For social media networks and handles — comprehensive metadata for 35+ global and regional networks (GitHub, Telegram, Instagram, X/Twitter, WeChat, Reddit, Zalo, etc.). MediaSocialNickname formats platform-specific handles (@dxtmisha, u/dxtmisha), MediaSocialUrl constructs canonical profile links with duplicate prefix protection, and MediaSocialValue extracts clean usernames while stripping query parameters, ports, and dangerous protocols.

For country flags and geographical data — 250+ vector SVG country flags in PascalCase (UsSvg, VnSvg, FrSvg, etc.) and a structured ISO 3166-1 country dataset (geo.json) covering international phone codes, input masks, primary timezones, default languages, first day of the week, and non-metric unit overrides.

For isomorphic security and string utilities — safe protocol verification (isDangerousProtocol) protecting against XSS attacks (javascript:, data:, vbscript:), URL prefix replacement (replacePrefix), and case-preserving URL normalization (toLower).

Installation

npm install @dxtmisha/media

Quick Start

import { MediaFile, MediaFiles, MediaSocial, InputSocialType, geo } from '@dxtmisha/media'
import { registerFileIcons } from '@dxtmisha/media/files'
import { registerSocialIcons } from '@dxtmisha/media/socials'
import { UsSvg, VnSvg } from '@dxtmisha/media/flags'

// Register standard SVG file & social icons
registerFileIcons()
registerSocialIcons()

// 1. File inspection & classification
const file = new MediaFile('https://example.com/assets/annual-report.2026.pdf?v=2#page=1')
file.name         // 'annual-report.2026.pdf'
file.baseName     // 'annual-report.2026'
file.extension    // 'pdf'
file.mime         // 'application/pdf'
file.isDocument() // true
file.isImage()    // false
file.icon         // '<svg ...'

// 2. Static catalog lookups
const pdfItem = MediaFiles.getByMime('application/pdf')
MediaFiles.isLink('https://example.com/doc.pdf') // true

// 3. Social media URLs and handles
MediaSocial.getUrl(InputSocialType.github, 'dxtmisha')                       // 'https://github.com/dxtmisha'
MediaSocial.getValue(InputSocialType.github, 'https://github.com/dxtmisha') // 'dxtmisha'
MediaSocial.getNickname(InputSocialType.telegram, 'dxtmisha')                // '@dxtmisha'
MediaSocial.getNickname(InputSocialType.reddit, 'dxtmisha')                  // 'u/dxtmisha'

// 4. Country flags & geographical data
const us = geo.find(item => item.country === 'US')
us?.phoneCode // '1'
us?.phoneMask // '(...) ...-....'
UsSvg         // '<svg ...'
VnSvg         // '<svg ...'

Subpath Exports

To minimize application bundle sizes, heavy SVG assets are isolated in dedicated subpath entry points:

Import PathContents
@dxtmisha/mediaCore classes (MediaFile, MediaFiles, MediaFileIcon, MediaSocial, MediaSocialNickname, MediaSocialUrl, MediaSocialValue), metadata registries (fileList, socialList, geo), utility functions, and TypeScript types without bundled SVG strings.
@dxtmisha/media/files85 vector SVG file icons (fileIcons) and registerFileIcons() initialization helper.
@dxtmisha/media/socials35 vector SVG social media icons (socialIcons) and registerSocialIcons() initialization helper.
@dxtmisha/media/flags250+ vector SVG country flags in PascalCase (UsSvg, VnSvg, FrSvg, etc.).

Principles

  • Zero external dependencies — standalone SVG vector assets, typed classes, and JSON datasets with zero third-party dependencies.
  • Tree-shaking optimized — core metadata contains zero SVG strings; vector assets are imported on-demand via dedicated subpaths.
  • TypeScript-first — strict typing, explicit interfaces, and autocomplete out of the box with zero any.
  • Clean API — predictable method chaining, single-responsibility classes, and intuitive naming.
  • Isomorphic & SSR-safe — safe for Node.js, Nitro, Nuxt, Next.js, and client-side runtimes without DOM leaks or window dependencies.
  • Test coverage — every class, utility, and edge case ships with comprehensive unit tests (570+ tests).

Documentation

Full API reference, examples, and guides:

📖 https://dxtmisha.github.io/dxt-ui/?path=/docs/dxtmisha-en-media-about-the-library--docs

License

MIT

版本与发布记录

@dxtmisha/media 共发布 20 个版本,首次发布于 2025/09/27;过去 12 个月发布了 16 个版本。

版本发布日期距今
1.1.2latest2026/11/086 天前
1.1.12026/11/077 天前
1.1.02026/11/068 天前
1.0.02026/11/0311 天前
0.8.12026/10/051 个月前
0.7.42026/09/072 个月前

关于 @dxtmisha/media 的常见问题

@dxtmisha/media 是什么?

Media resources, vector icon libraries, and geographical datasets for DXT UI — file classification, social networks, country flags, and ISO 3166-1 country metadata. Framework-agnostic, tree-shakeable, zero dependencies.

如何安装 @dxtmisha/media?

在项目目录运行 npm install @dxtmisha/media,或使用 pnpm add / yarn add / bun add。

@dxtmisha/media 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dxtmisha/media 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dxtmisha/media 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dxtmisha/media 可以商用吗?

@dxtmisha/media 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dxtmisha/media 的下载量有多少?

根据 npm 官方下载统计,@dxtmisha/media 在 2026/10/13 – 2026/11/11 这 30 天内被下载 2,012 次,日均约 67 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dxtmisha/media 还在维护吗?

最新版本 1.1.2 发布于 2026/11/08(6 天前);至今共发布 20 个版本,其中过去 12 个月发布了 16 个;首次发布于 2025/09/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。