1 line
12 KiB
Plaintext
Raw Permalink Normal View History

2025-09-05 14:59:21 +08:00
{"version":3,"sources":["../src/index.ts","../src/emojify.ts","../src/findByName.ts","../src/data.ts","../src/utils.ts","../src/findByCode.ts","../src/find.ts","../src/get.ts","../src/has.ts","../src/random.ts","../src/replace.ts","../src/search.ts","../src/strip.ts","../src/unemojify.ts","../src/which.ts"],"sourcesContent":["export * from './emojify.js'\nexport * from './find.js'\nexport * from './get.js'\nexport * from './has.js'\nexport * from './random.js'\nexport * from './replace.js'\nexport * from './search.js'\nexport * from './strip.js'\nexport * from './unemojify.js'\nexport * from './which.js'\n","import is from '@sindresorhus/is'\n\nimport { findByName } from './findByName.js'\nimport { asFunction, normalizeName } from './utils.js'\n\nexport type EmojifyFormat = (\n name: string,\n part?: string,\n input?: string,\n) => string\n\nexport interface EmojifyOptions {\n /**\n * The string to fallback to if an emoji was not found.\n */\n fallback?: ((part: string) => string) | string\n\n /**\n * Adds a middleware layer to modify each matched emoji after parsing.\n */\n format?: EmojifyFormat\n}\n\n/**\n * Parse all markdown-encoded emojis in a string.\n */\nexport const emojify = (\n input: string,\n { fallback, format = name => name }: EmojifyOptions = {},\n) => {\n const fallbackFunction =\n fallback === undefined ? fallback : asFunction(fallback)\n\n is.assert.string(input)\n is.assert.any([is.default.undefined, is.default.function_], fallbackFunction)\n is.assert.function_(format)\n\n return input.replace(/:[\\w\\-+]+:/g, part => {\n const found = findByName(part)\n if (found) {\n return format(found.emoji, part, input)\n }\n\n if (fallbackFunction) {\n return format(fallbackFunction(normalizeName(part)))\n }\n\n return format(part)\n })\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiCodesByName } from './data.js'\nimport { normalizeName } from './utils.js'\n\nexport const findByName = (name: string) => {\n assert.string(name)\n\n const nameNormalized = normalizeName(name)\n const emoji = emojiCodesByName.get(nameNormalized)\n\n return emoji ? { emoji, key: nameNormalized } : undefined\n}\n","import emojilib from 'emojilib'\n\nimport { normalizeCode } from './utils.js'\n\nexport interface Emoji {\n emoji: string\n key: string\n}\n\nexport const emojiData = Object.entries(emojilib.lib).map(\n ([name, { char: emoji }]) => [name, emoji] as const,\n)\n\nexport const emojiCodesByName = new Map(emojiData)\n\nexport const emojiNamesByCode = new Map(\n emojiData.map(([name, emoji]) => [normalizeCode(emoji), name]),\n)\n","import charRegex from 'char-regex'\n\nexport const charRegexMatcher = charRegex()\n\nexport function asFunction<T extends PropertyKey, Args extends unknown[]>(\n input: ((...args: Args) => T) | T,\n): (...args: Args) => T {\n return typeof input === 'function' ? input : () => input\n}\n\n/**\n * Non spacing mark contained by some emoticons (65039 - '' - 0xFE0F).\n *\n * It's the 'Variant Form', which provides more information so that emoticons\n * can be rendered as more colorful graphics. FE0E is a unicode text version\n * whereas FE0F should be rendered as a graphical version.\n * The code gracefully degrades.\n */\nconst NON_SPACING_MARK = String.fromCharCode(65039)\n\nconst nonSpacingRegex = new RegExp(NON_SPACING_MARK, 'g')\n\n/**\n * Removes the non-spacing-mark from the emoji code.\n *\n * Never send a stripped version to clients, as it kills graphical emoticons.\n */\nexport function normalizeCode(code: string) {\n return code.replace(nonSpacingRegex, '')\n}\n\nexport function normalizeName(name: string) {\n return /:.+:/.test(name) ? name.slice(1, -1) : name\n}\n\nexport function randomItem<T>(array: T[]) {\n return array[Math.floor(Math.random() * array.length)]\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiNamesByCode } from './data.js'\nimport { normalizeCode } from './utils.js'\n\nexport const findByCode = (code: string) => {\n assert.string(code)\n\n const emojiNormalized = nor