zero-contact 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/match/false-positives.ts","../src/match/scorer.ts","../src/locales/types.ts","../src/normalize/emoji.ts","../src/normalize/homoglyph.ts","../src/normalize/unicode.ts","../src/normalize/word-digits.ts","../src/match/sequence.ts","../src/locales/build-locale.ts","../src/locales/en.ts","../src/locales/tr.ts","../src/pipeline/options.ts","../src/pipeline/quick-check.ts","../src/pipeline/detect.ts","../src/pipeline/mask.ts"],"names":["homoglyph"],"mappings":"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","file":"index.js","sourcesContent":["import type { DigitSequence } from './sequence.js';\n\nconst DATE_PATTERNS = [\n /\\b\\d{1,2}[/.-]\\d{1,2}[/.-]\\d{2,4}\\b/,\n /\\b\\d{4}[/.-]\\d{1,2}[/.-]\\d{1,2}\\b/,\n];\n\nconst TIME_PATTERNS = [\n /\\b\\d{1,2}:\\d{2}(?::\\d{2})?\\b/,\n /\\b\\d{1,2}\\.\\d{2}\\b/,\n];\n\nconst IPV4_PATTERN = /\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b/;\n\nexport function isFalsePositive(sequence: DigitSequence, sourceText: string): boolean {\n const snippet = sourceText.slice(sequence.start, sequence.end);\n\n for (const pattern of DATE_PATTERNS) {\n if (pattern.test(snippet)) {\n return true;\n }\n }\n\n for (const pattern of TIME_PATTERNS) {\n if (pattern.test(snippet)) {\n return true;\n }\n }\n\n if (IPV4_PATTERN.test(snippet)) {\n return true;\n }\n\n if (/^(\\d)\\1{11,}$/.test(sequence.normalized)) {\n return true;\n }\n\n return false;\n}\n","import type { DetectOptions, ObfuscationType } from '../locales/types.js';\nimport type { DigitSequence } from './sequence.js';\n\nfunction isTrMobile(normalized: string): boolean {\n const digits = normalized.replace(/\\D/g, '');\n\n if (digits.length === 10 && /^5\\d{9}$/.test(digits)) {\n return true;\n }\n\n if (digits.length === 11 && /^05\\d{9}$/.test(digits)) {\n return true;\n }\n\n if (digits.length === 12 && /^905\\d{9}$/.test(digits)) {\n return true;\n }\n\n if (digits.length === 13 && /^\\+?905\\d{9}$/.test(digits)) {\n return true;\n }\n\n return false;\n}\n\nfunction hasPrefix(sourceText: string, sequence: DigitSequence): boolean {\n const before = sourceText.slice(Math.max(0, sequence.start - 4), sequence.start);\n return /\\+/.test(before) || /^0/.test(sequence.normalized);\n}\n\nfunction countObfuscationTypes(types: ObfuscationType[]): number {\n if (types.includes('mixed')) {\n return 3;\n }\n return types.length;\n}\n\nexport function scoreSequence(\n sequence: DigitSequence,\n sourceText: string,\n options: DetectOptions,\n): number {\n let score = 0.35;\n\n const digits = sequence.normalized;\n const digitCount = digits.length;\n const countryHint = options.countryHint ?? 'TR';\n\n if (countryHint === 'TR' && isTrMobile(digits)) {\n score += 0.4;\n } else if (digitCount >= 10 && digitCount <= 15) {\n score += 0.25;\n } else if (digitCount >= 7) {\n score += 0.15;\n }\n\n if (hasPrefix(sourceText, sequence)) {\n score += 0.15;\n }\n\n const typeCount = countObfuscationTypes(sequence.types);\n if (typeCount >= 2 || sequence.types.includes('mixed')) {\n score += 0.2;\n } else if (sequence.types[0] !== 'numeric') {\n score += 0.15;\n }\n\n if (sequence.types.length === 1 && sequence.types[0] === 'numeric' && digitCount === 10) {\n score += 0.1;\n }\n\n if (digitCount < 8) {\n score -= 0.15;\n }\n\n return Math.max(0, Math.min(1, score));\n}\n","export type ObfuscationType = 'numeric' | 'word' | 'emoji' | 'homoglyph' | 'mixed';\n\nexport interface Locale {\n readonly id: string;\n readonly digitWords: ReadonlyMap<string, string>;\n readonly multipliers: ReadonlyMap<string, number>;\n readonly preScanPattern: RegExp;\n}\n\nexport interface PhoneMatch {\n start: number;\n end: number;\n text: string;\n normalized: string;\n confidence: number;\n types: ObfuscationType[];\n}\n\nexport interface DetectOptions {\n locales?: Locale[];\n minDigits?: number;\n minConfidence?: number;\n countryHint?: 'TR' | 'INTL';\n}\n\nexport interface MaskOptions extends DetectOptions {\n char?: string;\n}\n\nexport interface DetectResult {\n detected: boolean;\n matches: PhoneMatch[];\n}\n\nexport interface DigitToken {\n digit: string;\n start: number;\n end: number;\n type: ObfuscationType;\n}\n\nexport const SEPARATORS = new Set([' ', '\\t', '-', '.', ',', '/', '(', ')', '+', '\\u00a0']);\n\nexport const DEFAULT_MIN_DIGITS = 7;\nexport const DEFAULT_MIN_CONFIDENCE = 0.6;\n","const CIRCLED_DIGITS: Record<number, string> = {\n 0x24ea: '0',\n 0x2460: '1',\n 0x2461: '2',\n 0x2462: '3',\n 0x2463: '4',\n 0x2464: '5',\n 0x2465: '6',\n 0x2466: '7',\n 0x2467: '8',\n 0x2468: '9',\n 0x2776: '1',\n 0x2777: '2',\n 0x2778: '3',\n 0x2779: '4',\n 0x277a: '5',\n 0x277b: '6',\n 0x277c: '7',\n 0x277d: '8',\n 0x277e: '9',\n};\n\nexport function isKeycapStart(text: string, index: number): number | null {\n const char = text[index];\n if (!char || !/[0-9#*]/.test(char)) return null;\n\n let consumed = 1;\n if (text[index + 1] === '\\uFE0F') {\n consumed += 1;\n }\n\n if (text[index + consumed] === '\\u20E3') {\n consumed += 1;\n if (char === '#' || char === '*') return null;\n return consumed;\n }\n\n return null;\n}\n\nexport function circledDigitToAscii(text: string, index: number): { digit: string; length: number } | null {\n const code = text.codePointAt(index);\n if (code === undefined) return null;\n\n const digit = CIRCLED_DIGITS[code];\n if (!digit) return null;\n\n const length = code > 0xffff ? 2 : 1;\n return { digit, length };\n}\n\nexport const EMOJI_PRESCAN = /(?:[0-9#*]\\uFE0F?\\u20E3|[\\u2460-\\u2468\\u24EA\\u2776-\\u277E])/u;\n","const HOMOGLYPH_MAP: Record<string, string> = {\n O: '0',\n o: '0',\n l: '1',\n I: '1',\n i: '1',\n '|': '1',\n '!': '1',\n S: '5',\n s: '5',\n B: '8',\n Z: '2',\n z: '2',\n g: '9',\n q: '9',\n};\n\nexport function homoglyphToDigit(char: string): string | null {\n return HOMOGLYPH_MAP[char] ?? null;\n}\n\nexport function isDigitLikeContext(text: string, index: number): boolean {\n const prev = text[index - 1];\n const next = text[index + 1];\n\n const prevIsDigitLike =\n prev !== undefined &&\n (/[0-9]/.test(prev) ||\n homoglyphToDigit(prev) !== null ||\n /[\\s\\-.,/()+]/.test(prev));\n\n const nextIsDigitLike =\n next !== undefined &&\n (/[0-9]/.test(next) ||\n homoglyphToDigit(next) !== null ||\n /[\\s\\-.,/()+]/.test(next));\n\n return prevIsDigitLike || nextIsDigitLike;\n}\n","const INVISIBLE_CHARS = /[\\u200B-\\u200D\\uFEFF\\u2060\\u180E]/g;\n\nexport function nfkc(text: string): string {\n return text.normalize('NFKC');\n}\n\nexport function stripInvisible(text: string): string {\n return text.replace(INVISIBLE_CHARS, '');\n}\n\nexport function unicodeDigitToAscii(char: string): string | null {\n const code = char.codePointAt(0);\n if (code === undefined) return null;\n\n if (code >= 0x30 && code <= 0x39) {\n return char;\n }\n\n if (code >= 0xff10 && code <= 0xff19) {\n return String.fromCharCode(code - 0xff10 + 0x30);\n }\n\n if (code >= 0x0660 && code <= 0x0669) {\n return String.fromCharCode(code - 0x0660 + 0x30);\n }\n\n if (code >= 0x06f0 && code <= 0x06f9) {\n return String.fromCharCode(code - 0x06f0 + 0x30);\n }\n\n if (code >= 0x0966 && code <= 0x096f) {\n return String.fromCharCode(code - 0x0966 + 0x30);\n }\n\n const superscriptMap: Record<number, string> = {\n 0x2070: '0',\n 0x00b9: '1',\n 0x00b2: '2',\n 0x00b3: '3',\n 0x2074: '4',\n 0x2075: '5',\n 0x2076: '6',\n 0x2077: '7',\n 0x2078: '8',\n 0x2079: '9',\n };\n\n const superscript = superscriptMap[code];\n if (superscript) {\n return superscript;\n }\n\n return null;\n}\n\nexport function normalizeUnicodeDigits(text: string): string {\n let result = '';\n for (const char of text) {\n const digit = unicodeDigitToAscii(char);\n result += digit ?? char;\n }\n return result;\n}\n\nexport function foldTurkish(text: string): string {\n return text\n .replace(/ı/g, 'i')\n .replace(/İ/g, 'i')\n .replace(/ş/g, 's')\n .replace(/Ş/g, 's')\n .replace(/ğ/g, 'g')\n .replace(/Ğ/g, 'g')\n .replace(/ü/g, 'u')\n .replace(/Ü/g, 'u')\n .replace(/ö/g, 'o')\n .replace(/Ö/g, 'o')\n .replace(/ç/g, 'c')\n .replace(/Ç/g, 'c');\n}\n\nexport function normalizeForLookup(text: string): string {\n return foldTurkish(nfkc(stripInvisible(text)).toLowerCase());\n}\n","import type { Locale } from '../locales/types.js';\nimport type { DigitToken, ObfuscationType } from '../locales/types.js';\nimport { circledDigitToAscii, isKeycapStart } from './emoji.js';\nimport { homoglyphToDigit, isDigitLikeContext } from './homoglyph.js';\nimport { normalizeForLookup, unicodeDigitToAscii } from './unicode.js';\n\ninterface LocaleLookup {\n digitWords: Map<string, string>;\n multipliers: Map<string, number>;\n wordPattern: RegExp;\n}\n\nfunction buildLookup(locales: Locale[]): LocaleLookup {\n const digitWords = new Map<string, string>();\n const multipliers = new Map<string, number>();\n\n for (const locale of locales) {\n for (const [word, digit] of locale.digitWords) {\n digitWords.set(normalizeForLookup(word), digit);\n }\n for (const [word, count] of locale.multipliers) {\n multipliers.set(normalizeForLookup(word), count);\n }\n }\n\n const words = [...new Set([...digitWords.keys(), ...multipliers.keys()])]\n .sort((a, b) => b.length - a.length)\n .map((word) => word.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'));\n\n const wordPattern = new RegExp(`\\\\b(?:${words.join('|')})\\\\b`, 'giu');\n\n return { digitWords, multipliers, wordPattern };\n}\n\nfunction isSeparator(char: string): boolean {\n return /[\\s\\-.,/()+]/.test(char) || char === '\\u00a0';\n}\n\nfunction isWordChar(char: string): boolean {\n return /[\\p{L}_]/u.test(char);\n}\n\nfunction pushDigit(\n tokens: DigitToken[],\n digit: string,\n start: number,\n end: number,\n type: ObfuscationType,\n repeat = 1,\n): void {\n for (let i = 0; i < repeat; i += 1) {\n tokens.push({ digit, start, end, type });\n }\n}\n\nexport function tokenizeDigits(text: string, locales: Locale[]): DigitToken[] {\n const lookup = buildLookup(locales);\n const tokens: DigitToken[] = [];\n let pendingRepeat = 1;\n let index = 0;\n\n while (index < text.length) {\n const keycapLength = isKeycapStart(text, index);\n if (keycapLength !== null) {\n const digit = text[index]!;\n pushDigit(tokens, digit, index, index + keycapLength, 'emoji', pendingRepeat);\n pendingRepeat = 1;\n index += keycapLength;\n continue;\n }\n\n const circled = circledDigitToAscii(text, index);\n if (circled) {\n pushDigit(tokens, circled.digit, index, index + circled.length, 'emoji', pendingRepeat);\n pendingRepeat = 1;\n index += circled.length;\n continue;\n }\n\n const char = text[index]!;\n\n if (isWordChar(char)) {\n let end = index + 1;\n while (end < text.length && isWordChar(text[end]!)) {\n end += 1;\n }\n\n if (end === index + 1) {\n const homoglyph = homoglyphToDigit(char);\n if (homoglyph && isDigitLikeContext(text, index)) {\n pushDigit(tokens, homoglyph, index, index + 1, 'homoglyph', pendingRepeat);\n pendingRepeat = 1;\n index += 1;\n continue;\n }\n }\n\n const rawWord = text.slice(index, end);\n const normalizedWord = normalizeForLookup(rawWord);\n\n const multiplier = lookup.multipliers.get(normalizedWord);\n if (multiplier !== undefined) {\n pendingRepeat = multiplier;\n index = end;\n continue;\n }\n\n const digit = lookup.digitWords.get(normalizedWord);\n if (digit !== undefined) {\n pushDigit(tokens, digit, index, end, 'word', pendingRepeat);\n pendingRepeat = 1;\n index = end;\n continue;\n }\n\n index = end;\n continue;\n }\n\n const asciiDigit = unicodeDigitToAscii(char);\n if (asciiDigit) {\n pushDigit(tokens, asciiDigit, index, index + 1, 'numeric', pendingRepeat);\n pendingRepeat = 1;\n index += 1;\n continue;\n }\n\n const homoglyph = homoglyphToDigit(char);\n if (homoglyph && isDigitLikeContext(text, index)) {\n pushDigit(tokens, homoglyph, index, index + 1, 'homoglyph', pendingRepeat);\n pendingRepeat = 1;\n index += 1;\n continue;\n }\n\n if (isSeparator(char)) {\n index += 1;\n continue;\n }\n\n pendingRepeat = 1;\n index += 1;\n }\n\n return tokens;\n}\n\nexport function hasLocaleWordSignal(text: string, locales: Locale[]): boolean {\n const lookup = buildLookup(locales);\n const pattern = lookup.wordPattern;\n pattern.lastIndex = 0;\n return pattern.test(text);\n}\n\nexport function isMultiplierSpan(text: string, from: number, to: number, locales: Locale[]): boolean {\n const slice = text.slice(from, to).trim();\n if (!slice) {\n return true;\n }\n\n const lookup = buildLookup(locales);\n const words = slice.split(/\\s+/);\n return words.every((word) => lookup.multipliers.has(normalizeForLookup(word)));\n}\n","import type { DigitToken, ObfuscationType, Locale } from '../locales/types.js';\nimport { SEPARATORS } from '../locales/types.js';\nimport { isMultiplierSpan } from '../normalize/word-digits.js';\n\nexport interface DigitSequence {\n tokens: DigitToken[];\n start: number;\n end: number;\n normalized: string;\n types: ObfuscationType[];\n}\n\nfunction onlySeparatorsBetween(\n text: string,\n from: number,\n to: number,\n locales: Locale[],\n): boolean {\n if (from >= to) {\n return true;\n }\n\n if (isMultiplierSpan(text, from, to, locales)) {\n return true;\n }\n\n for (let i = from; i < to; i += 1) {\n const char = text[i]!;\n if (!SEPARATORS.has(char)) {\n return false;\n }\n }\n return true;\n}\n\nfunction collectTypes(tokens: DigitToken[]): ObfuscationType[] {\n const unique = new Set(tokens.map((token) => token.type));\n if (unique.size > 1) {\n return ['mixed'];\n }\n return [...unique];\n}\n\nexport function findDigitSequences(\n text: string,\n tokens: DigitToken[],\n minDigits: number,\n locales: Locale[] = [],\n): DigitSequence[] {\n if (tokens.length === 0) {\n return [];\n }\n\n const sequences: DigitSequence[] = [];\n let group: DigitToken[] = [tokens[0]!];\n\n for (let i = 1; i < tokens.length; i += 1) {\n const prev = tokens[i - 1]!;\n const current = tokens[i]!;\n\n if (onlySeparatorsBetween(text, prev.end, current.start, locales)) {\n group.push(current);\n continue;\n }\n\n if (group.length >= minDigits) {\n sequences.push(toSequence(group));\n }\n group = [current];\n }\n\n if (group.length >= minDigits) {\n sequences.push(toSequence(group));\n }\n\n return sequences;\n}\n\nfunction toSequence(tokens: DigitToken[]): DigitSequence {\n const first = tokens[0]!;\n const last = tokens[tokens.length - 1]!;\n\n return {\n tokens,\n start: first.start,\n end: last.end,\n normalized: tokens.map((token) => token.digit).join(''),\n types: collectTypes(tokens),\n };\n}\n","import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const en = createLocale(\n 'en',\n {\n zero: '0',\n oh: '0',\n one: '1',\n two: '2',\n three: '3',\n four: '4',\n five: '5',\n six: '6',\n seven: '7',\n eight: '8',\n nine: '9',\n },\n {\n double: 2,\n triple: 3,\n quad: 4,\n },\n);\n","import { createLocale } from './build-locale.js';\n\nexport const tr = createLocale(\n 'tr',\n {\n sifir: '0',\n sıfır: '0',\n bir: '1',\n iki: '2',\n uc: '3',\n üç: '3',\n dort: '4',\n dört: '4',\n bes: '5',\n beş: '5',\n alti: '6',\n altı: '6',\n yedi: '7',\n sekiz: '8',\n dokuz: '9',\n },\n {\n cift: 2,\n çift: 2,\n uclu: 3,\n üçlü: 3,\n dortlu: 4,\n dörtlü: 4,\n },\n);\n","import type { DetectOptions } from '../locales/types.js';\nimport { DEFAULT_MIN_CONFIDENCE, DEFAULT_MIN_DIGITS } from '../locales/types.js';\nimport { en } from '../locales/en.js';\nimport { tr } from '../locales/tr.js';\nimport type { Locale } from '../locales/types.js';\n\nexport interface ResolvedOptions {\n locales: Locale[];\n minDigits: number;\n minConfidence: number;\n countryHint: 'TR' | 'INTL';\n}\n\nexport function resolveOptions(options?: DetectOptions): ResolvedOptions {\n return {\n locales: options?.locales ?? [tr, en],\n minDigits: options?.minDigits ?? DEFAULT_MIN_DIGITS,\n minConfidence: options?.minConfidence ?? DEFAULT_MIN_CONFIDENCE,\n countryHint: options?.countryHint ?? 'TR',\n };\n}\n","import type { DetectOptions } from '../locales/types.js';\nimport { EMOJI_PRESCAN } from '../normalize/emoji.js';\nimport { hasLocaleWordSignal } from '../normalize/word-digits.js';\nimport { resolveOptions } from './options.js';\n\nexport function quickCheck(text: string, options?: DetectOptions): boolean {\n if (!text || text.length === 0) {\n return false;\n }\n\n const resolved = resolveOptions(options);\n\n if (/\\d/.test(text)) {\n return true;\n }\n\n if (/\\p{Nd}/u.test(text)) {\n return true;\n }\n\n if (EMOJI_PRESCAN.test(text)) {\n return true;\n }\n\n if (hasLocaleWordSignal(text, resolved.locales)) {\n return true;\n }\n\n for (const locale of resolved.locales) {\n locale.preScanPattern.lastIndex = 0;\n if (locale.preScanPattern.test(text)) {\n return true;\n }\n }\n\n if (/[+]\\s*[\\d\\p{Nd}\\s\\-().]{4,}/u.test(text)) {\n return true;\n }\n\n if (/(?:[\\d\\p{Nd}][\\s.\\-/)]{0,3}){3,}[\\d\\p{Nd}]/u.test(text)) {\n return true;\n }\n\n return false;\n}\n","import type { DetectOptions, DetectResult, PhoneMatch } from '../locales/types.js';\nimport { isFalsePositive } from '../match/false-positives.js';\nimport { scoreSequence } from '../match/scorer.js';\nimport { findDigitSequences } from '../match/sequence.js';\nimport { tokenizeDigits } from '../normalize/word-digits.js';\nimport { resolveOptions } from './options.js';\nimport { quickCheck } from './quick-check.js';\n\nexport function detect(text: string, options?: DetectOptions): DetectResult {\n if (!quickCheck(text, options)) {\n return { detected: false, matches: [] };\n }\n\n const resolved = resolveOptions(options);\n const tokens = tokenizeDigits(text, resolved.locales);\n const sequences = findDigitSequences(text, tokens, resolved.minDigits, resolved.locales);\n\n const matches: PhoneMatch[] = [];\n\n for (const sequence of sequences) {\n if (isFalsePositive(sequence, text)) {\n continue;\n }\n\n const confidence = scoreSequence(sequence, text, resolved);\n\n if (confidence < resolved.minConfidence) {\n continue;\n }\n\n matches.push({\n start: sequence.start,\n end: sequence.end,\n text: text.slice(sequence.start, sequence.end),\n normalized: sequence.normalized,\n confidence,\n types: sequence.types,\n });\n }\n\n return {\n detected: matches.length > 0,\n matches,\n };\n}\n","import type { MaskOptions } from '../locales/types.js';\nimport { detect } from './detect.js';\n\nexport function mask(text: string, options?: MaskOptions): string {\n const result = detect(text, options);\n if (!result.detected) {\n return text;\n }\n\n const char = options?.char ?? '#';\n const chars = [...text];\n const sorted = [...result.matches].sort((a, b) => b.start - a.start);\n\n for (const match of sorted) {\n for (let i = match.start; i < match.end; i += 1) {\n if (!/\\s/.test(chars[i] ?? '')) {\n chars[i] = char;\n }\n }\n }\n\n return chars.join('');\n}\n"]}
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ // src/locales/build-locale.ts
4
+ function createLocale(id, digitWords, multipliers = {}) {
5
+ const digitMap = new Map(Object.entries(digitWords));
6
+ const multiplierMap = new Map(Object.entries(multipliers));
7
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
8
+ const preScanPattern = new RegExp(
9
+ `(?:${words.join("|")})`,
10
+ "iu"
11
+ );
12
+ return {
13
+ id,
14
+ digitWords: digitMap,
15
+ multipliers: multiplierMap,
16
+ preScanPattern
17
+ };
18
+ }
19
+ function escapeRegex(value) {
20
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
+ }
22
+
23
+ // src/locales/en.ts
24
+ var en = createLocale(
25
+ "en",
26
+ {
27
+ zero: "0",
28
+ oh: "0",
29
+ one: "1",
30
+ two: "2",
31
+ three: "3",
32
+ four: "4",
33
+ five: "5",
34
+ six: "6",
35
+ seven: "7",
36
+ eight: "8",
37
+ nine: "9"
38
+ },
39
+ {
40
+ double: 2,
41
+ triple: 3,
42
+ quad: 4
43
+ }
44
+ );
45
+
46
+ exports.en = en;
47
+ //# sourceMappingURL=en.cjs.map
48
+ //# sourceMappingURL=en.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/en.ts"],"names":[],"mappings":";;;AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV","file":"en.cjs","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const en = createLocale(\n 'en',\n {\n zero: '0',\n oh: '0',\n one: '1',\n two: '2',\n three: '3',\n four: '4',\n five: '5',\n six: '6',\n seven: '7',\n eight: '8',\n nine: '9',\n },\n {\n double: 2,\n triple: 3,\n quad: 4,\n },\n);\n"]}
@@ -0,0 +1,5 @@
1
+ import { L as Locale } from '../types-C4A9Bbv7.cjs';
2
+
3
+ declare const en: Locale;
4
+
5
+ export { en };
@@ -0,0 +1,5 @@
1
+ import { L as Locale } from '../types-C4A9Bbv7.js';
2
+
3
+ declare const en: Locale;
4
+
5
+ export { en };
@@ -0,0 +1,46 @@
1
+ // src/locales/build-locale.ts
2
+ function createLocale(id, digitWords, multipliers = {}) {
3
+ const digitMap = new Map(Object.entries(digitWords));
4
+ const multiplierMap = new Map(Object.entries(multipliers));
5
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
6
+ const preScanPattern = new RegExp(
7
+ `(?:${words.join("|")})`,
8
+ "iu"
9
+ );
10
+ return {
11
+ id,
12
+ digitWords: digitMap,
13
+ multipliers: multiplierMap,
14
+ preScanPattern
15
+ };
16
+ }
17
+ function escapeRegex(value) {
18
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
19
+ }
20
+
21
+ // src/locales/en.ts
22
+ var en = createLocale(
23
+ "en",
24
+ {
25
+ zero: "0",
26
+ oh: "0",
27
+ one: "1",
28
+ two: "2",
29
+ three: "3",
30
+ four: "4",
31
+ five: "5",
32
+ six: "6",
33
+ seven: "7",
34
+ eight: "8",
35
+ nine: "9"
36
+ },
37
+ {
38
+ double: 2,
39
+ triple: 3,
40
+ quad: 4
41
+ }
42
+ );
43
+
44
+ export { en };
45
+ //# sourceMappingURL=en.js.map
46
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/en.ts"],"names":[],"mappings":";AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV","file":"en.js","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const en = createLocale(\n 'en',\n {\n zero: '0',\n oh: '0',\n one: '1',\n two: '2',\n three: '3',\n four: '4',\n five: '5',\n six: '6',\n seven: '7',\n eight: '8',\n nine: '9',\n },\n {\n double: 2,\n triple: 3,\n quad: 4,\n },\n);\n"]}
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ // src/locales/build-locale.ts
4
+ function createLocale(id, digitWords, multipliers = {}) {
5
+ const digitMap = new Map(Object.entries(digitWords));
6
+ const multiplierMap = new Map(Object.entries(multipliers));
7
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
8
+ const preScanPattern = new RegExp(
9
+ `(?:${words.join("|")})`,
10
+ "iu"
11
+ );
12
+ return {
13
+ id,
14
+ digitWords: digitMap,
15
+ multipliers: multiplierMap,
16
+ preScanPattern
17
+ };
18
+ }
19
+ function escapeRegex(value) {
20
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
+ }
22
+
23
+ // src/locales/tr.ts
24
+ var tr = createLocale(
25
+ "tr",
26
+ {
27
+ sifir: "0",
28
+ s\u0131f\u0131r: "0",
29
+ bir: "1",
30
+ iki: "2",
31
+ uc: "3",
32
+ \u00FC\u00E7: "3",
33
+ dort: "4",
34
+ d\u00F6rt: "4",
35
+ bes: "5",
36
+ be\u015F: "5",
37
+ alti: "6",
38
+ alt\u0131: "6",
39
+ yedi: "7",
40
+ sekiz: "8",
41
+ dokuz: "9"
42
+ },
43
+ {
44
+ cift: 2,
45
+ \u00E7ift: 2,
46
+ uclu: 3,
47
+ \u00FC\u00E7l\u00FC: 3,
48
+ dortlu: 4,
49
+ d\u00F6rtl\u00FC: 4
50
+ }
51
+ );
52
+
53
+ // src/locales/en.ts
54
+ var en = createLocale(
55
+ "en",
56
+ {
57
+ zero: "0",
58
+ oh: "0",
59
+ one: "1",
60
+ two: "2",
61
+ three: "3",
62
+ four: "4",
63
+ five: "5",
64
+ six: "6",
65
+ seven: "7",
66
+ eight: "8",
67
+ nine: "9"
68
+ },
69
+ {
70
+ double: 2,
71
+ triple: 3,
72
+ quad: 4
73
+ }
74
+ );
75
+
76
+ exports.en = en;
77
+ exports.tr = tr;
78
+ //# sourceMappingURL=index.cjs.map
79
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/tr.ts","../../src/locales/en.ts"],"names":[],"mappings":";;;AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,KAAA,EAAO,GAAA;AAAA,IACP,eAAA,EAAO,GAAA;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,YAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,mBAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAQ;AAAA;AAEZ;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV","file":"index.cjs","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const tr = createLocale(\n 'tr',\n {\n sifir: '0',\n sıfır: '0',\n bir: '1',\n iki: '2',\n uc: '3',\n üç: '3',\n dort: '4',\n dört: '4',\n bes: '5',\n beş: '5',\n alti: '6',\n altı: '6',\n yedi: '7',\n sekiz: '8',\n dokuz: '9',\n },\n {\n cift: 2,\n çift: 2,\n uclu: 3,\n üçlü: 3,\n dortlu: 4,\n dörtlü: 4,\n },\n);\n","import { createLocale } from './build-locale.js';\n\nexport const en = createLocale(\n 'en',\n {\n zero: '0',\n oh: '0',\n one: '1',\n two: '2',\n three: '3',\n four: '4',\n five: '5',\n six: '6',\n seven: '7',\n eight: '8',\n nine: '9',\n },\n {\n double: 2,\n triple: 3,\n quad: 4,\n },\n);\n"]}
@@ -0,0 +1,3 @@
1
+ export { tr } from './tr.cjs';
2
+ export { en } from './en.cjs';
3
+ export { D as DetectOptions, a as DetectResult, L as Locale, M as MaskOptions, O as ObfuscationType, P as PhoneMatch } from '../types-C4A9Bbv7.cjs';
@@ -0,0 +1,3 @@
1
+ export { tr } from './tr.js';
2
+ export { en } from './en.js';
3
+ export { D as DetectOptions, a as DetectResult, L as Locale, M as MaskOptions, O as ObfuscationType, P as PhoneMatch } from '../types-C4A9Bbv7.js';
@@ -0,0 +1,76 @@
1
+ // src/locales/build-locale.ts
2
+ function createLocale(id, digitWords, multipliers = {}) {
3
+ const digitMap = new Map(Object.entries(digitWords));
4
+ const multiplierMap = new Map(Object.entries(multipliers));
5
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
6
+ const preScanPattern = new RegExp(
7
+ `(?:${words.join("|")})`,
8
+ "iu"
9
+ );
10
+ return {
11
+ id,
12
+ digitWords: digitMap,
13
+ multipliers: multiplierMap,
14
+ preScanPattern
15
+ };
16
+ }
17
+ function escapeRegex(value) {
18
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
19
+ }
20
+
21
+ // src/locales/tr.ts
22
+ var tr = createLocale(
23
+ "tr",
24
+ {
25
+ sifir: "0",
26
+ s\u0131f\u0131r: "0",
27
+ bir: "1",
28
+ iki: "2",
29
+ uc: "3",
30
+ \u00FC\u00E7: "3",
31
+ dort: "4",
32
+ d\u00F6rt: "4",
33
+ bes: "5",
34
+ be\u015F: "5",
35
+ alti: "6",
36
+ alt\u0131: "6",
37
+ yedi: "7",
38
+ sekiz: "8",
39
+ dokuz: "9"
40
+ },
41
+ {
42
+ cift: 2,
43
+ \u00E7ift: 2,
44
+ uclu: 3,
45
+ \u00FC\u00E7l\u00FC: 3,
46
+ dortlu: 4,
47
+ d\u00F6rtl\u00FC: 4
48
+ }
49
+ );
50
+
51
+ // src/locales/en.ts
52
+ var en = createLocale(
53
+ "en",
54
+ {
55
+ zero: "0",
56
+ oh: "0",
57
+ one: "1",
58
+ two: "2",
59
+ three: "3",
60
+ four: "4",
61
+ five: "5",
62
+ six: "6",
63
+ seven: "7",
64
+ eight: "8",
65
+ nine: "9"
66
+ },
67
+ {
68
+ double: 2,
69
+ triple: 3,
70
+ quad: 4
71
+ }
72
+ );
73
+
74
+ export { en, tr };
75
+ //# sourceMappingURL=index.js.map
76
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/tr.ts","../../src/locales/en.ts"],"names":[],"mappings":";AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,KAAA,EAAO,GAAA;AAAA,IACP,eAAA,EAAO,GAAA;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,YAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,mBAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAQ;AAAA;AAEZ;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,IAAA,EAAM,GAAA;AAAA,IACN,EAAA,EAAI,GAAA;AAAA,IACJ,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ,CAAA;AAAA,IACR,MAAA,EAAQ,CAAA;AAAA,IACR,IAAA,EAAM;AAAA;AAEV","file":"index.js","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const tr = createLocale(\n 'tr',\n {\n sifir: '0',\n sıfır: '0',\n bir: '1',\n iki: '2',\n uc: '3',\n üç: '3',\n dort: '4',\n dört: '4',\n bes: '5',\n beş: '5',\n alti: '6',\n altı: '6',\n yedi: '7',\n sekiz: '8',\n dokuz: '9',\n },\n {\n cift: 2,\n çift: 2,\n uclu: 3,\n üçlü: 3,\n dortlu: 4,\n dörtlü: 4,\n },\n);\n","import { createLocale } from './build-locale.js';\n\nexport const en = createLocale(\n 'en',\n {\n zero: '0',\n oh: '0',\n one: '1',\n two: '2',\n three: '3',\n four: '4',\n five: '5',\n six: '6',\n seven: '7',\n eight: '8',\n nine: '9',\n },\n {\n double: 2,\n triple: 3,\n quad: 4,\n },\n);\n"]}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ // src/locales/build-locale.ts
4
+ function createLocale(id, digitWords, multipliers = {}) {
5
+ const digitMap = new Map(Object.entries(digitWords));
6
+ const multiplierMap = new Map(Object.entries(multipliers));
7
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
8
+ const preScanPattern = new RegExp(
9
+ `(?:${words.join("|")})`,
10
+ "iu"
11
+ );
12
+ return {
13
+ id,
14
+ digitWords: digitMap,
15
+ multipliers: multiplierMap,
16
+ preScanPattern
17
+ };
18
+ }
19
+ function escapeRegex(value) {
20
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
+ }
22
+
23
+ // src/locales/tr.ts
24
+ var tr = createLocale(
25
+ "tr",
26
+ {
27
+ sifir: "0",
28
+ s\u0131f\u0131r: "0",
29
+ bir: "1",
30
+ iki: "2",
31
+ uc: "3",
32
+ \u00FC\u00E7: "3",
33
+ dort: "4",
34
+ d\u00F6rt: "4",
35
+ bes: "5",
36
+ be\u015F: "5",
37
+ alti: "6",
38
+ alt\u0131: "6",
39
+ yedi: "7",
40
+ sekiz: "8",
41
+ dokuz: "9"
42
+ },
43
+ {
44
+ cift: 2,
45
+ \u00E7ift: 2,
46
+ uclu: 3,
47
+ \u00FC\u00E7l\u00FC: 3,
48
+ dortlu: 4,
49
+ d\u00F6rtl\u00FC: 4
50
+ }
51
+ );
52
+
53
+ exports.tr = tr;
54
+ //# sourceMappingURL=tr.cjs.map
55
+ //# sourceMappingURL=tr.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/tr.ts"],"names":[],"mappings":";;;AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,KAAA,EAAO,GAAA;AAAA,IACP,eAAA,EAAO,GAAA;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,YAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,mBAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAQ;AAAA;AAEZ","file":"tr.cjs","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const tr = createLocale(\n 'tr',\n {\n sifir: '0',\n sıfır: '0',\n bir: '1',\n iki: '2',\n uc: '3',\n üç: '3',\n dort: '4',\n dört: '4',\n bes: '5',\n beş: '5',\n alti: '6',\n altı: '6',\n yedi: '7',\n sekiz: '8',\n dokuz: '9',\n },\n {\n cift: 2,\n çift: 2,\n uclu: 3,\n üçlü: 3,\n dortlu: 4,\n dörtlü: 4,\n },\n);\n"]}
@@ -0,0 +1,5 @@
1
+ import { L as Locale } from '../types-C4A9Bbv7.cjs';
2
+
3
+ declare const tr: Locale;
4
+
5
+ export { tr };
@@ -0,0 +1,5 @@
1
+ import { L as Locale } from '../types-C4A9Bbv7.js';
2
+
3
+ declare const tr: Locale;
4
+
5
+ export { tr };
@@ -0,0 +1,53 @@
1
+ // src/locales/build-locale.ts
2
+ function createLocale(id, digitWords, multipliers = {}) {
3
+ const digitMap = new Map(Object.entries(digitWords));
4
+ const multiplierMap = new Map(Object.entries(multipliers));
5
+ const words = [...digitMap.keys(), ...multiplierMap.keys()].sort((a, b) => b.length - a.length).map(escapeRegex);
6
+ const preScanPattern = new RegExp(
7
+ `(?:${words.join("|")})`,
8
+ "iu"
9
+ );
10
+ return {
11
+ id,
12
+ digitWords: digitMap,
13
+ multipliers: multiplierMap,
14
+ preScanPattern
15
+ };
16
+ }
17
+ function escapeRegex(value) {
18
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
19
+ }
20
+
21
+ // src/locales/tr.ts
22
+ var tr = createLocale(
23
+ "tr",
24
+ {
25
+ sifir: "0",
26
+ s\u0131f\u0131r: "0",
27
+ bir: "1",
28
+ iki: "2",
29
+ uc: "3",
30
+ \u00FC\u00E7: "3",
31
+ dort: "4",
32
+ d\u00F6rt: "4",
33
+ bes: "5",
34
+ be\u015F: "5",
35
+ alti: "6",
36
+ alt\u0131: "6",
37
+ yedi: "7",
38
+ sekiz: "8",
39
+ dokuz: "9"
40
+ },
41
+ {
42
+ cift: 2,
43
+ \u00E7ift: 2,
44
+ uclu: 3,
45
+ \u00FC\u00E7l\u00FC: 3,
46
+ dortlu: 4,
47
+ d\u00F6rtl\u00FC: 4
48
+ }
49
+ );
50
+
51
+ export { tr };
52
+ //# sourceMappingURL=tr.js.map
53
+ //# sourceMappingURL=tr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/locales/build-locale.ts","../../src/locales/tr.ts"],"names":[],"mappings":";AAEO,SAAS,YAAA,CACd,EAAA,EACA,UAAA,EACA,WAAA,GAAsC,EAAC,EAC/B;AACR,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAC,CAAA;AACnD,EAAA,MAAM,gBAAgB,IAAI,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,CAAA;AAEzD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,QAAA,CAAS,MAAK,EAAG,GAAG,cAAc,IAAA,EAAM,EACvD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,SAAS,CAAA,CAAE,MAAM,CAAA,CAClC,GAAA,CAAI,WAAW,CAAA;AAElB,EAAA,MAAM,iBAAiB,IAAI,MAAA;AAAA,IACzB,CAAA,GAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAA,IACrB;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,UAAA,EAAY,QAAA;AAAA,IACZ,WAAA,EAAa,aAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,YAAY,KAAA,EAAuB;AAC1C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,qBAAA,EAAuB,MAAM,CAAA;AACpD;;;AC3BO,IAAM,EAAA,GAAK,YAAA;AAAA,EAChB,IAAA;AAAA,EACA;AAAA,IACE,KAAA,EAAO,GAAA;AAAA,IACP,eAAA,EAAO,GAAA;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,GAAA;AAAA,IACL,EAAA,EAAI,GAAA;AAAA,IACJ,YAAA,EAAI,GAAA;AAAA,IACJ,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,GAAA,EAAK,GAAA;AAAA,IACL,QAAA,EAAK,GAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM,GAAA;AAAA,IACN,KAAA,EAAO,GAAA;AAAA,IACP,KAAA,EAAO;AAAA,GACT;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAM,CAAA;AAAA,IACN,IAAA,EAAM,CAAA;AAAA,IACN,mBAAA,EAAM,CAAA;AAAA,IACN,MAAA,EAAQ,CAAA;AAAA,IACR,gBAAA,EAAQ;AAAA;AAEZ","file":"tr.js","sourcesContent":["import type { Locale } from './types.js';\n\nexport function createLocale(\n id: string,\n digitWords: Record<string, string>,\n multipliers: Record<string, number> = {},\n): Locale {\n const digitMap = new Map(Object.entries(digitWords));\n const multiplierMap = new Map(Object.entries(multipliers));\n\n const words = [...digitMap.keys(), ...multiplierMap.keys()]\n .sort((a, b) => b.length - a.length)\n .map(escapeRegex);\n\n const preScanPattern = new RegExp(\n `(?:${words.join('|')})`,\n 'iu',\n );\n\n return {\n id,\n digitWords: digitMap,\n multipliers: multiplierMap,\n preScanPattern,\n };\n}\n\nfunction escapeRegex(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { createLocale } from './build-locale.js';\n\nexport const tr = createLocale(\n 'tr',\n {\n sifir: '0',\n sıfır: '0',\n bir: '1',\n iki: '2',\n uc: '3',\n üç: '3',\n dort: '4',\n dört: '4',\n bes: '5',\n beş: '5',\n alti: '6',\n altı: '6',\n yedi: '7',\n sekiz: '8',\n dokuz: '9',\n },\n {\n cift: 2,\n çift: 2,\n uclu: 3,\n üçlü: 3,\n dortlu: 4,\n dörtlü: 4,\n },\n);\n"]}
@@ -0,0 +1,30 @@
1
+ type ObfuscationType = 'numeric' | 'word' | 'emoji' | 'homoglyph' | 'mixed';
2
+ interface Locale {
3
+ readonly id: string;
4
+ readonly digitWords: ReadonlyMap<string, string>;
5
+ readonly multipliers: ReadonlyMap<string, number>;
6
+ readonly preScanPattern: RegExp;
7
+ }
8
+ interface PhoneMatch {
9
+ start: number;
10
+ end: number;
11
+ text: string;
12
+ normalized: string;
13
+ confidence: number;
14
+ types: ObfuscationType[];
15
+ }
16
+ interface DetectOptions {
17
+ locales?: Locale[];
18
+ minDigits?: number;
19
+ minConfidence?: number;
20
+ countryHint?: 'TR' | 'INTL';
21
+ }
22
+ interface MaskOptions extends DetectOptions {
23
+ char?: string;
24
+ }
25
+ interface DetectResult {
26
+ detected: boolean;
27
+ matches: PhoneMatch[];
28
+ }
29
+
30
+ export type { DetectOptions as D, Locale as L, MaskOptions as M, ObfuscationType as O, PhoneMatch as P, DetectResult as a };
@@ -0,0 +1,30 @@
1
+ type ObfuscationType = 'numeric' | 'word' | 'emoji' | 'homoglyph' | 'mixed';
2
+ interface Locale {
3
+ readonly id: string;
4
+ readonly digitWords: ReadonlyMap<string, string>;
5
+ readonly multipliers: ReadonlyMap<string, number>;
6
+ readonly preScanPattern: RegExp;
7
+ }
8
+ interface PhoneMatch {
9
+ start: number;
10
+ end: number;
11
+ text: string;
12
+ normalized: string;
13
+ confidence: number;
14
+ types: ObfuscationType[];
15
+ }
16
+ interface DetectOptions {
17
+ locales?: Locale[];
18
+ minDigits?: number;
19
+ minConfidence?: number;
20
+ countryHint?: 'TR' | 'INTL';
21
+ }
22
+ interface MaskOptions extends DetectOptions {
23
+ char?: string;
24
+ }
25
+ interface DetectResult {
26
+ detected: boolean;
27
+ matches: PhoneMatch[];
28
+ }
29
+
30
+ export type { DetectOptions as D, Locale as L, MaskOptions as M, ObfuscationType as O, PhoneMatch as P, DetectResult as a };