UNPKG

ztextutils

Version:

A powerful text utility library for parsing, masking, and formatting text content. Parse URLs, hashtags, mentions, emails, markdown elements, and format phone numbers, dates, and more.

266 lines (262 loc) 6.86 kB
type ParseOptions = { urls?: boolean; hashtags?: boolean; mentions?: boolean; emails?: boolean; phones?: boolean; markdownLinks?: boolean; markdownHeadings?: boolean; markdownLists?: boolean; markdownEmphasis?: boolean; all?: boolean; }; type TextMatch = { type: "url" | "hashtag" | "mention" | "email" | "markdown-link" | "phone"; text: string; value: string; position: { start: number; end: number; }; url?: string; }; declare const patterns: { url: RegExp; hashtag: RegExp; mention: RegExp; email: RegExp; phone: RegExp; markdown: { links: RegExp; headings: RegExp; bulletList: RegExp; numberedList: RegExp; bold: RegExp; italic: RegExp; }; }; declare class TextParser { private options; constructor(options?: ParseOptions); /** * Parse a single string and return matches */ parse(text: string): { urls: string[]; hashtags: string[]; mentions: string[]; emails: string[]; phones: string[]; markdown: { links: Array<{ text: string; url: string; }>; headings: Array<{ level: number; text: string; }>; lists: { bullet: string[]; numbered: string[]; }; emphasis: { bold: string[]; italic: string[]; }; }; }; /** * Parse multiple strings and return matches for each */ parseMany(texts: string[]): { urls: string[]; hashtags: string[]; mentions: string[]; emails: string[]; phones: string[]; markdown: { links: Array<{ text: string; url: string; }>; headings: Array<{ level: number; text: string; }>; lists: { bullet: string[]; numbered: string[]; }; emphasis: { bold: string[]; italic: string[]; }; }; }[]; /** * Find all linkable elements in text with their positions */ findLinkableElements(text: string, baseUrls?: { hashtags?: string; mentions?: string; assets?: string; }): TextMatch[]; } declare const createParser: (options?: ParseOptions) => TextParser; declare const defaultParser: TextParser; type MaskToken = { pattern: RegExp; optional?: boolean; transform?: (char: string) => string; }; type MaskOptions = { mask: string | string[]; tokens?: Record<string, MaskToken>; placeholder?: string; autoClear?: boolean; stripMask?: boolean; allowEmpty?: boolean; }; declare class InputMask { private static readonly DEFAULT_TOKENS; private static readonly PRESET_MASKS; private options; private tokens; constructor(options?: MaskOptions); /** * Apply mask to input value */ mask(value: string, maskOpt?: string | MaskOptions): string; /** * Apply mask with specific options */ private applyMask; /** * Process value against a single mask pattern */ private processValue; /** * Remove mask characters from value */ stripMask(value: string): string; /** * Validate if value matches mask pattern completely */ isComplete(value: string): boolean; } declare const createMask: (options?: MaskOptions) => InputMask; declare const defaultMask: InputMask; declare class TextUtils { private parser; private inputMask; constructor(options?: { parser?: ParseOptions; mask?: MaskOptions; }); /** * Text Parsing Methods */ parse(text: string): { urls: string[]; hashtags: string[]; mentions: string[]; emails: string[]; phones: string[]; markdown: { links: Array<{ text: string; url: string; }>; headings: Array<{ level: number; text: string; }>; lists: { bullet: string[]; numbered: string[]; }; emphasis: { bold: string[]; italic: string[]; }; }; }; parseMany(texts: string[]): { urls: string[]; hashtags: string[]; mentions: string[]; emails: string[]; phones: string[]; markdown: { links: Array<{ text: string; url: string; }>; headings: Array<{ level: number; text: string; }>; lists: { bullet: string[]; numbered: string[]; }; emphasis: { bold: string[]; italic: string[]; }; }; }[]; findLinkableElements(text: string, baseUrls?: { hashtags?: string; mentions?: string; assets?: string; }): TextMatch[]; /** * Input Masking Methods */ mask(value: string, maskOpt: string | MaskOptions): string; stripMask(value: string): string; isComplete(value: string): boolean; /** * Convenience Methods */ formatPhoneNumber(phone: string): string; formatDate(date: string): string; formatCurrency(amount: string | number): string; /** * Extract specific types of matches from text */ extractUrls(text: string): string[]; extractMentions(text: string): string[]; extractHashtags(text: string): string[]; extractPhones(text: string): string[]; /** * Enhanced Combined Utilities */ processText(text: string, options: { parse?: { types?: ("urls" | "hashtags" | "mentions" | "phones" | "emails")[]; baseUrls?: { hashtags?: string; mentions?: string; assets?: string; }; }; mask?: { phones?: boolean; dates?: boolean; currency?: boolean; }; }): { matches: TextMatch[]; filtered: TextMatch[]; originalText: string; }; } declare const createTextUtils: (options?: { parser?: ParseOptions; mask?: MaskOptions; }) => TextUtils; declare const defaultUtils: TextUtils; export { InputMask, type MaskOptions, type MaskToken, type ParseOptions, type TextMatch, TextParser, TextUtils, createMask, createParser, createTextUtils, defaultMask, defaultParser, defaultUtils, patterns };