@involvex/emoji-cli 2.2.6 → 2.2.7

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.
@@ -177,7 +177,7 @@ var unemojify = (input) => {
177
177
  // package.json
178
178
  var package_default = {
179
179
  name: "@involvex/emoji-cli",
180
- version: "2.2.5",
180
+ version: "2.2.7",
181
181
  description: "Friendly emoji lookups and parsing utilities for Node.js. \u{1F496}",
182
182
  keywords: [
183
183
  "emoji",
@@ -226,6 +226,7 @@ var package_default = {
226
226
  "src/*"
227
227
  ],
228
228
  scripts: {
229
+ prebuild: "npm run format && npm run lint && npm run typecheck",
229
230
  build: "tsup",
230
231
  "build:cli": "bun build --target=node bin/emoji-cli-improved.ts --outdir=dist",
231
232
  dev: "bun run bin/emoji-cli-improved.ts",
@@ -241,7 +242,8 @@ var package_default = {
241
242
  start: "node lib/bin/emoji-cli-improved.js",
242
243
  test: "vitest",
243
244
  "test:cjs": "node ./src/e2e.cjs",
244
- tsc: "tsc"
245
+ tsc: "tsc",
246
+ typecheck: "tsc --noEmit"
245
247
  },
246
248
  "lint-staged": {
247
249
  "*": "prettier --ignore-unknown --write"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../bin/emoji-cli-improved.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/unemojify.ts","../../src/which.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cli from '../src/index'\nimport pkg from '../package.json'\n// Type definitions for better type safety\ninterface CLIConfig {\n name: string\n description: string\n version: string\n}\n\ninterface Command {\n name: string\n aliases: string[]\n description: string\n handler: (args?: string) => void | Promise<void>\n requiresArgs: boolean\n}\n\ninterface ParsedArgs {\n command: string\n args: string[]\n help: boolean\n}\n\n// Configuration\nconst CONFIG: CLIConfig = {\n name: 'emoji-cli',\n description: 'Friendly emoji lookups and parsing utilities for Node.js',\n version: pkg.version as string // TODO: Get version from package.json dynamically\n}\n\n// Available commands\nconst COMMANDS: Command[] = [\n {\n name: 'search',\n aliases: ['--search'],\n description: 'Search for emojis by name or pattern',\n handler: runSearch,\n requiresArgs: true,\n },\n {\n name: 'emojify',\n aliases: ['--emojify'],\n description: 'Convert text to emojis',\n handler: runEmojify,\n requiresArgs: true,\n },\n {\n name: 'unemojify',\n aliases: ['--unemojify'],\n description: 'Convert emojis back to text',\n handler: runUnemojify,\n requiresArgs: true,\n },\n {\n name: 'get',\n aliases: ['--get'],\n description: 'Get a specific emoji by name',\n handler: runGet,\n requiresArgs: true,\n },\n {\n name: 'has',\n aliases: ['--has'],\n description: 'Check if an emoji exists',\n handler: runHas,\n requiresArgs: true,\n },\n {\n name: 'find',\n aliases: ['--find', '-f'],\n description: 'Find emojis by name',\n handler: runFind,\n requiresArgs: true,\n },\n {\n name: 'random',\n aliases: ['--random', '--rnd', '-r'],\n description: 'Get a random emoji',\n handler: runRandom,\n requiresArgs: false,\n },\n]\n\n// Error handling\nclass CLIError extends Error {\n code: number\n\n constructor(message: string, code: number) {\n super(message)\n this.code = code\n this.name = 'CLIError'\n }\n}\n\nclass ValidationError extends CLIError {\n constructor(message: string) {\n super(message, 2)\n this.name = 'ValidationError'\n }\n}\n\n// Utility functions\nfunction createOutputFormatter() {\n return {\n success: (\n data:\n | never\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n | (\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n )[],\n ) => {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results found')\n return\n }\n\n data.forEach((item, index) => {\n if (typeof item === 'string') {\n console.log(`${item}`)\n } else if (item && typeof item === 'object') {\n const displayName = item.name || item.key || 'unknown'\n console.log(`${index + 1}. ${item.emoji} ${displayName}`)\n } else {\n console.log(`${index + 1}. ${item}`)\n }\n })\n } else if (data && typeof data === 'object') {\n const displayName = data.name || data.key || 'unknown'\n console.log(`${data.emoji} ${displayName}`)\n } else if (data !== undefined && data !== null) {\n console.log(data)\n } else {\n console.log('No result found')\n }\n },\n error: (message: string) => {\n console.error(`❌ Error: ${message}`)\n },\n warning: (message: string) => {\n console.warn(`⚠️ Warning: ${message}`)\n },\n info: (message: string) => {\n console.log(`ℹ️ ${message}`)\n },\n }\n}\n\nconst output = createOutputFormatter()\n\n// Argument parsing\nfunction parseArgs(args: string[]): ParsedArgs {\n if (args.length === 0) {\n return { command: '', args: [], help: true }\n }\n\n const [first, ...rest] = args\n\n // Check for help flags\n if (first === '--help' || first === '-h') {\n return { command: '', args: [], help: true }\n }\n\n return {\n command: first,\n args: rest,\n help: false,\n }\n}\n\n// Command resolution\nfunction resolveCommand(input: string): Command | null {\n if (!input) {\n return null\n }\n\n return (\n COMMANDS.find(cmd => cmd.name === input || cmd.aliases.includes(input)) ||\n null\n )\n}\n\n// Validation\nfunction validateArgs(command: Command, args: string[]): void {\n if (command.requiresArgs && args.length === 0) {\n throw new ValidationError(`Command \"${command.name}\" requires arguments`)\n }\n\n if (!command.requiresArgs && args.length > 0) {\n throw new ValidationError(\n `Command \"${command.name}\" does not accept arguments`,\n )\n }\n}\n\n// Command handlers\nasync function runSearch(query?: string): Promise<void> {\n if (!query) {\n throw new ValidationError('Search query is required')\n }\n\n try {\n const results = cli.search(query)\n output.success(results)\n } catch (error) {\n output.error(\n `Failed to search for \"${query}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runEmojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to emojify is required')\n }\n\n try {\n const result = cli.emojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to emojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runUnemojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to unemojify is required')\n }\n\n try {\n const result = cli.unemojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to unemojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runGet(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.get(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`Emoji \"${name}\" not found`)\n }\n } catch (error) {\n output.error(\n `Failed to get emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runHas(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.has(name)\n output.success(\n result ? `✅ Emoji \"${name}\" exists` : `❌ Emoji \"${name}\" not found`,\n )\n } catch (error) {\n output.error(\n `Failed to check emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runFind(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Search term is required')\n }\n\n try {\n const result = cli.find(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`No emojis found for \"${name}\"`)\n }\n } catch (error) {\n output.error(\n `Failed to find emojis for \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runRandom(): Promise<void> {\n try {\n const result = cli.random()\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to get random emoji: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\n// Help and usage information\nfunction showHelp(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n console.log(`${CONFIG.description} 💖`)\n console.log('\\nUsage:')\n console.log(` ${CONFIG.name} <command> [arguments]`)\n console.log('\\nCommands:')\n\n COMMANDS.forEach(cmd => {\n const aliasesText =\n cmd.aliases.length > 1 ? ` (${cmd.aliases.join(', ')})` : ''\n console.log(` ${cmd.name}${aliasesText} ${cmd.description}`)\n })\n\n console.log('\\nExamples:')\n console.log(` ${CONFIG.name} --search \"heart\"`)\n console.log(` ${CONFIG.name} --get \"heart\"`)\n console.log(` ${CONFIG.name} --emojify \"I love you\"`)\n console.log(` ${CONFIG.name} --random`)\n}\n\nfunction showVersion(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n}\n\n// Main execution\nasync function run(): Promise<void> {\n try {\n const args = process.argv.slice(2)\n const { command: commandInput, args: commandArgs, help } = parseArgs(args)\n\n // Handle global flags\n if (help || !commandInput) {\n showHelp()\n return\n }\n\n if (commandInput === '--version' || commandInput === '-v') {\n showVersion()\n return\n }\n\n // Resolve and execute command\n const command = resolveCommand(commandInput)\n if (!command) {\n throw new CLIError(\n `Unknown command: ${commandInput}. Use --help for available commands.`,\n 1,\n )\n }\n\n // Validate arguments\n validateArgs(command, commandArgs)\n\n // Execute command\n await command.handler(commandArgs[0])\n } catch (error) {\n if (error instanceof CLIError) {\n output.error(error.message)\n process.exit(error.code)\n } else if (error instanceof ValidationError) {\n output.error(error.message)\n output.info('Use --help for usage information')\n process.exit(error.code)\n } else {\n output.error(\n `Unexpected error: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n process.exit(1)\n }\n }\n}\n\n// Execute if this file is run directly\n// if (import.meta.url === `file://${process.argv[1]}`) {\n// run().catch(error => {\n// output.error(\n// `Failed to run CLI: ${\n// error instanceof Error ? error.message : 'Unknown error'\n// }`,\n// )\n// process.exit(1)\n// })\n// }\nrun()\nexport default run\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.string(input)\n is.any([is.undefined, is.function_], fallbackFunction)\n is.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 = normalizeCode(code)\n const key = emojiNamesByCode.get(emojiNormalized)\n\n return key ? { emoji: emojiNormalized, key } : undefined\n}\n","import { findByCode } from './findByCode.js'\nimport { findByName } from './findByName.js'\n\n/**\n * Get the name and character of an emoji.\n */\nexport const find = (codeOrName: string) => {\n return findByCode(codeOrName) ?? findByName(codeOrName)\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiCodesByName } from './data.js'\nimport { normalizeName } from './utils.js'\n\n/**\n * Get an emoji from an emoji name.\n */\nexport const get = (codeOrName: string) => {\n assert.string(codeOrName)\n\n return emojiCodesByName.get(normalizeName(codeOrName))\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiCodesByName, emojiNamesByCode } from './data.js'\nimport { normalizeCode, normalizeName } from './utils.js'\n\n/**\n * Check if this library supports a specific emoji.\n */\nexport const has = (codeOrName: string) => {\n assert.string(codeOrName)\n\n return (\n emojiCodesByName.has(normalizeName(codeOrName)) ||\n emojiNamesByCode.has(normalizeCode(codeOrName))\n )\n}\n","import { emojiData } from './data.js'\nimport { randomItem } from './utils.js'\n\n/**\n * Get a random emoji.\n */\nexport const random = () => {\n const [name, emoji] = randomItem(emojiData)\n return { emoji, name }\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { Emoji } from './data.js'\nimport { findByCode } from './findByCode.js'\nimport { asFunction, charRegexMatcher } from './utils.js'\n\nexport type ReplaceReplacement = (\n emoji: Emoji,\n index: number,\n string: string,\n) => string\n\n/**\n * Replace the emojis in a string.\n */\nexport const replace = (\n input: string,\n replacement: ReplaceReplacement | string,\n { preserveSpaces = false } = {},\n) => {\n const replace = asFunction(replacement)\n\n assert.string(input)\n assert.function_(replace)\n assert.boolean(preserveSpaces)\n\n const characters = input.match(charRegexMatcher)\n if (characters === null) {\n return input\n }\n\n return characters\n .map((character, index) => {\n const found = findByCode(character)\n if (!found) {\n return character\n }\n\n if (!preserveSpaces && characters[index + 1] === ' ') {\n characters[index + 1] = ''\n }\n\n return replace(found, index, input)\n })\n .join('')\n}\n","import is, { assert } from '@sindresorhus/is'\n\nimport { emojiData } from './data.js'\nimport { normalizeName } from './utils.js'\n\n/**\n * Search for emojis containing the provided name or pattern in their name.\n */\nexport const search = (keyword: RegExp | string) => {\n assert.any([is.string, is.regExp], keyword)\n\n if (is.string(keyword)) {\n keyword = normalizeName(keyword)\n }\n\n if (is.regExp(keyword)) {\n const normalizedPattern = normalizeName(keyword.toString())\n keyword = new RegExp(normalizedPattern)\n }\n\n return emojiData\n .filter(([name]) => name.match(keyword))\n .map(([name, emoji]) => ({ emoji, name }))\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { charRegexMatcher } from './utils.js'\nimport { which } from './which.js'\n\n/**\n * Convert all emojis in a string to their markdown-encoded counterparts.\n */\nexport const unemojify = (input: string) => {\n assert.string(input)\n\n const characters = input.match(charRegexMatcher)\n if (characters === null) {\n return input\n }\n\n return characters\n .map(character => which(character, { markdown: true }) ?? character)\n .join('')\n}\n","import { assert } from '@sindresorhus/is'\nimport skinTone from 'skin-tone'\n\nimport { findByCode } from './findByCode.js'\n\nexport interface WhichOptions {\n markdown?: boolean\n}\n\n/**\n * Get an emoji name from an emoji.\n */\nexport const which = (\n emoji: string,\n { markdown = false }: WhichOptions = {},\n) => {\n assert.string(emoji)\n assert.boolean(markdown)\n\n const result = findByCode(skinTone(emoji, 'none'))\n if (result === undefined) {\n return undefined\n }\n\n return markdown ? `:${result.key}:` : result.key\n}\n","{\n \"name\": \"@involvex/emoji-cli\",\n \"version\": \"2.2.5\",\n \"description\": \"Friendly emoji lookups and parsing utilities for Node.js. 💖\",\n \"keywords\": [\n \"emoji\",\n \"simple\",\n \"emoticons\",\n \"emoticon\",\n \"emojis\",\n \"smiley\",\n \"smileys\",\n \"smilies\",\n \"ideogram\",\n \"ideograms\"\n ],\n \"bugs\": {\n \"url\": \"https://github.com/omnidan/node-emoji/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/omnidan/node-emoji\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Involvex\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": {\n \"import\": \"./lib/index.d.ts\",\n \"require\": \"./lib/index.d.cts\"\n },\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"./lib/index.js\",\n \"bin\": {\n \"emoji-cli\": \"lib/bin/emoji-cli-improved.js\"\n },\n \"files\": [\n \"lib/\",\n \"package.json\",\n \"LICENSE.md\",\n \"README.md\",\n \"bin/emoji-cli.ts\",\n \"src/*\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:cli\": \"bun build --target=node bin/emoji-cli-improved.ts --outdir=dist\",\n \"dev\": \"bun run bin/emoji-cli-improved.ts\",\n \"format\": \"prettier . --write\",\n \"lint\": \"eslint . --ignore-pattern lib --ignore-pattern dist -c eslint.config.ts\",\n \"lint:knip\": \"knip\",\n \"lint:md\": \"markdownlint \\\"**/*.md\\\" \\\".github/**/*.md\\\" --rules sentences-per-line\",\n \"lint:package-json\": \"npmPkgJsonLint .\",\n \"lint:packages\": \"pnpm dedupe --check\",\n \"lint:spelling\": \"cspell \\\"**\\\" \\\".github/**/*\\\"\",\n \"prepare\": \"husky install\",\n \"should-semantic-release\": \"should-semantic-release --verbose\",\n \"start\": \"node lib/bin/emoji-cli-improved.js\",\n \"test\": \"vitest\",\n \"test:cjs\": \"node ./src/e2e.cjs\",\n \"tsc\": \"tsc\"\n },\n \"lint-staged\": {\n \"*\": \"prettier --ignore-unknown --write\"\n },\n \"dependencies\": {\n \"@sindresorhus/is\": \"^4.6.0\",\n \"char-regex\": \"^1.0.2\",\n \"emojilib\": \"^2.4.0\",\n \"jiti\": \"^2.6.1\",\n \"skin-tone\": \"^2.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.39.2\",\n \"@eslint/json\": \"^0.14.0\",\n \"@release-it/conventional-changelog\": \"^10.0.0\",\n \"@swc/core\": \"^1.3.58\",\n \"@types/eslint\": \"^8.44.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^0.34.6\",\n \"console-fail-test\": \"^0.5.0\",\n \"cspell\": \"^8.0.0\",\n \"eslint\": \"^9.39.2\",\n \"eslint-plugin-deprecation\": \"^3.0.0\",\n \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n \"eslint-plugin-jsdoc\": \"^50.0.0\",\n \"eslint-plugin-jsonc\": \"^2.10.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-n\": \"^17.0.0\",\n \"eslint-plugin-no-only-tests\": \"^3.1.0\",\n \"eslint-plugin-perfectionist\": \"^2.3.0\",\n \"eslint-plugin-regexp\": \"^2.1.1\",\n \"eslint-plugin-vitest\": \"^0.3.9\",\n \"eslint-plugin-yml\": \"^1.10.0\",\n \"globals\": \"^16.5.0\",\n \"husky\": \"^8.0.3\",\n \"jsonc-eslint-parser\": \"^2.4.0\",\n \"knip\": \"^4.0.0\",\n \"lint-staged\": \"^15.1.0\",\n \"markdownlint\": \"^0.37.0\",\n \"markdownlint-cli\": \"^0.44.0\",\n \"npm-package-json-lint\": \"^8.0.0\",\n \"npm-package-json-lint-config-default\": \"^7.0.0\",\n \"prettier\": \"^3.0.3\",\n \"prettier-plugin-curly\": \"^0.3.0\",\n \"prettier-plugin-packagejson\": \"^2.4.6\",\n \"release-it\": \"^18.0.0\",\n \"sentences-per-line\": \"^0.3.0\",\n \"should-semantic-release\": \"^0.2.1\",\n \"tsup\": \"^8.0.0\",\n \"typescript\": \"^5.2.2\",\n \"typescript-eslint\": \"^8.50.1\",\n \"vitest\": \"^0.34.6\",\n \"yaml-eslint-parser\": \"^1.2.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n"],"mappings":"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","names":["import_is","charRegex","emojilib","is","import_is","import_is","import_is","import_is","import_is","is","import_is","import_is","skinTone"]}
1
+ {"version":3,"sources":["../../bin/emoji-cli-improved.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/unemojify.ts","../../src/which.ts","../../package.json"],"sourcesContent":["#!/usr/bin/env node\n\nimport * as cli from '../src/index'\nimport pkg from '../package.json'\n// Type definitions for better type safety\ninterface CLIConfig {\n name: string\n description: string\n version: string\n}\n\ninterface Command {\n name: string\n aliases: string[]\n description: string\n handler: (args?: string) => void | Promise<void>\n requiresArgs: boolean\n}\n\ninterface ParsedArgs {\n command: string\n args: string[]\n help: boolean\n}\n\n// Configuration\nconst CONFIG: CLIConfig = {\n name: 'emoji-cli',\n description: 'Friendly emoji lookups and parsing utilities for Node.js',\n version: pkg.version as string, // TODO: Get version from package.json dynamically\n}\n\n// Available commands\nconst COMMANDS: Command[] = [\n {\n name: 'search',\n aliases: ['--search'],\n description: 'Search for emojis by name or pattern',\n handler: runSearch,\n requiresArgs: true,\n },\n {\n name: 'emojify',\n aliases: ['--emojify'],\n description: 'Convert text to emojis',\n handler: runEmojify,\n requiresArgs: true,\n },\n {\n name: 'unemojify',\n aliases: ['--unemojify'],\n description: 'Convert emojis back to text',\n handler: runUnemojify,\n requiresArgs: true,\n },\n {\n name: 'get',\n aliases: ['--get'],\n description: 'Get a specific emoji by name',\n handler: runGet,\n requiresArgs: true,\n },\n {\n name: 'has',\n aliases: ['--has'],\n description: 'Check if an emoji exists',\n handler: runHas,\n requiresArgs: true,\n },\n {\n name: 'find',\n aliases: ['--find', '-f'],\n description: 'Find emojis by name',\n handler: runFind,\n requiresArgs: true,\n },\n {\n name: 'random',\n aliases: ['--random', '--rnd', '-r'],\n description: 'Get a random emoji',\n handler: runRandom,\n requiresArgs: false,\n },\n]\n\n// Error handling\nclass CLIError extends Error {\n code: number\n\n constructor(message: string, code: number) {\n super(message)\n this.code = code\n this.name = 'CLIError'\n }\n}\n\nclass ValidationError extends CLIError {\n constructor(message: string) {\n super(message, 2)\n this.name = 'ValidationError'\n }\n}\n\n// Utility functions\nfunction createOutputFormatter() {\n return {\n success: (\n data:\n | never\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n | (\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n )[],\n ) => {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results found')\n return\n }\n\n data.forEach((item, index) => {\n if (typeof item === 'string') {\n console.log(`${item}`)\n } else if (item && typeof item === 'object') {\n const displayName = item.name || item.key || 'unknown'\n console.log(`${index + 1}. ${item.emoji} ${displayName}`)\n } else {\n console.log(`${index + 1}. ${item}`)\n }\n })\n } else if (data && typeof data === 'object') {\n const displayName = data.name || data.key || 'unknown'\n console.log(`${data.emoji} ${displayName}`)\n } else if (data !== undefined && data !== null) {\n console.log(data)\n } else {\n console.log('No result found')\n }\n },\n error: (message: string) => {\n console.error(`❌ Error: ${message}`)\n },\n warning: (message: string) => {\n console.warn(`⚠️ Warning: ${message}`)\n },\n info: (message: string) => {\n console.log(`ℹ️ ${message}`)\n },\n }\n}\n\nconst output = createOutputFormatter()\n\n// Argument parsing\nfunction parseArgs(args: string[]): ParsedArgs {\n if (args.length === 0) {\n return { command: '', args: [], help: true }\n }\n\n const [first, ...rest] = args\n\n // Check for help flags\n if (first === '--help' || first === '-h') {\n return { command: '', args: [], help: true }\n }\n\n return {\n command: first,\n args: rest,\n help: false,\n }\n}\n\n// Command resolution\nfunction resolveCommand(input: string): Command | null {\n if (!input) {\n return null\n }\n\n return (\n COMMANDS.find(cmd => cmd.name === input || cmd.aliases.includes(input)) ||\n null\n )\n}\n\n// Validation\nfunction validateArgs(command: Command, args: string[]): void {\n if (command.requiresArgs && args.length === 0) {\n throw new ValidationError(`Command \"${command.name}\" requires arguments`)\n }\n\n if (!command.requiresArgs && args.length > 0) {\n throw new ValidationError(\n `Command \"${command.name}\" does not accept arguments`,\n )\n }\n}\n\n// Command handlers\nasync function runSearch(query?: string): Promise<void> {\n if (!query) {\n throw new ValidationError('Search query is required')\n }\n\n try {\n const results = cli.search(query)\n output.success(results)\n } catch (error) {\n output.error(\n `Failed to search for \"${query}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runEmojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to emojify is required')\n }\n\n try {\n const result = cli.emojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to emojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runUnemojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to unemojify is required')\n }\n\n try {\n const result = cli.unemojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to unemojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runGet(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.get(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`Emoji \"${name}\" not found`)\n }\n } catch (error) {\n output.error(\n `Failed to get emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runHas(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.has(name)\n output.success(\n result ? `✅ Emoji \"${name}\" exists` : `❌ Emoji \"${name}\" not found`,\n )\n } catch (error) {\n output.error(\n `Failed to check emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runFind(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Search term is required')\n }\n\n try {\n const result = cli.find(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`No emojis found for \"${name}\"`)\n }\n } catch (error) {\n output.error(\n `Failed to find emojis for \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runRandom(): Promise<void> {\n try {\n const result = cli.random()\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to get random emoji: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\n// Help and usage information\nfunction showHelp(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n console.log(`${CONFIG.description} 💖`)\n console.log('\\nUsage:')\n console.log(` ${CONFIG.name} <command> [arguments]`)\n console.log('\\nCommands:')\n\n COMMANDS.forEach(cmd => {\n const aliasesText =\n cmd.aliases.length > 1 ? ` (${cmd.aliases.join(', ')})` : ''\n console.log(` ${cmd.name}${aliasesText} ${cmd.description}`)\n })\n\n console.log('\\nExamples:')\n console.log(` ${CONFIG.name} --search \"heart\"`)\n console.log(` ${CONFIG.name} --get \"heart\"`)\n console.log(` ${CONFIG.name} --emojify \"I love you\"`)\n console.log(` ${CONFIG.name} --random`)\n}\n\nfunction showVersion(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n}\n\n// Main execution\nasync function run(): Promise<void> {\n try {\n const args = process.argv.slice(2)\n const { command: commandInput, args: commandArgs, help } = parseArgs(args)\n\n // Handle global flags\n if (help || !commandInput) {\n showHelp()\n return\n }\n\n if (commandInput === '--version' || commandInput === '-v') {\n showVersion()\n return\n }\n\n // Resolve and execute command\n const command = resolveCommand(commandInput)\n if (!command) {\n throw new CLIError(\n `Unknown command: ${commandInput}. Use --help for available commands.`,\n 1,\n )\n }\n\n // Validate arguments\n validateArgs(command, commandArgs)\n\n // Execute command\n await command.handler(commandArgs[0])\n } catch (error) {\n if (error instanceof CLIError) {\n output.error(error.message)\n process.exit(error.code)\n } else if (error instanceof ValidationError) {\n output.error(error.message)\n output.info('Use --help for usage information')\n process.exit(error.code)\n } else {\n output.error(\n `Unexpected error: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n process.exit(1)\n }\n }\n}\n\n// Execute if this file is run directly\n// if (import.meta.url === `file://${process.argv[1]}`) {\n// run().catch(error => {\n// output.error(\n// `Failed to run CLI: ${\n// error instanceof Error ? error.message : 'Unknown error'\n// }`,\n// )\n// process.exit(1)\n// })\n// }\nrun()\nexport default run\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.string(input)\n is.any([is.undefined, is.function_], fallbackFunction)\n is.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 = normalizeCode(code)\n const key = emojiNamesByCode.get(emojiNormalized)\n\n return key ? { emoji: emojiNormalized, key } : undefined\n}\n","import { findByCode } from './findByCode.js'\nimport { findByName } from './findByName.js'\n\n/**\n * Get the name and character of an emoji.\n */\nexport const find = (codeOrName: string) => {\n return findByCode(codeOrName) ?? findByName(codeOrName)\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiCodesByName } from './data.js'\nimport { normalizeName } from './utils.js'\n\n/**\n * Get an emoji from an emoji name.\n */\nexport const get = (codeOrName: string) => {\n assert.string(codeOrName)\n\n return emojiCodesByName.get(normalizeName(codeOrName))\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { emojiCodesByName, emojiNamesByCode } from './data.js'\nimport { normalizeCode, normalizeName } from './utils.js'\n\n/**\n * Check if this library supports a specific emoji.\n */\nexport const has = (codeOrName: string) => {\n assert.string(codeOrName)\n\n return (\n emojiCodesByName.has(normalizeName(codeOrName)) ||\n emojiNamesByCode.has(normalizeCode(codeOrName))\n )\n}\n","import { emojiData } from './data.js'\nimport { randomItem } from './utils.js'\n\n/**\n * Get a random emoji.\n */\nexport const random = () => {\n const [name, emoji] = randomItem(emojiData)\n return { emoji, name }\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { Emoji } from './data.js'\nimport { findByCode } from './findByCode.js'\nimport { asFunction, charRegexMatcher } from './utils.js'\n\nexport type ReplaceReplacement = (\n emoji: Emoji,\n index: number,\n string: string,\n) => string\n\n/**\n * Replace the emojis in a string.\n */\nexport const replace = (\n input: string,\n replacement: ReplaceReplacement | string,\n { preserveSpaces = false } = {},\n) => {\n const replace = asFunction(replacement)\n\n assert.string(input)\n assert.function_(replace)\n assert.boolean(preserveSpaces)\n\n const characters = input.match(charRegexMatcher)\n if (characters === null) {\n return input\n }\n\n return characters\n .map((character, index) => {\n const found = findByCode(character)\n if (!found) {\n return character\n }\n\n if (!preserveSpaces && characters[index + 1] === ' ') {\n characters[index + 1] = ''\n }\n\n return replace(found, index, input)\n })\n .join('')\n}\n","import is, { assert } from '@sindresorhus/is'\n\nimport { emojiData } from './data.js'\nimport { normalizeName } from './utils.js'\n\n/**\n * Search for emojis containing the provided name or pattern in their name.\n */\nexport const search = (keyword: RegExp | string) => {\n assert.any([is.string, is.regExp], keyword)\n\n if (is.string(keyword)) {\n keyword = normalizeName(keyword)\n }\n\n if (is.regExp(keyword)) {\n const normalizedPattern = normalizeName(keyword.toString())\n keyword = new RegExp(normalizedPattern)\n }\n\n return emojiData\n .filter(([name]) => name.match(keyword))\n .map(([name, emoji]) => ({ emoji, name }))\n}\n","import { assert } from '@sindresorhus/is'\n\nimport { charRegexMatcher } from './utils.js'\nimport { which } from './which.js'\n\n/**\n * Convert all emojis in a string to their markdown-encoded counterparts.\n */\nexport const unemojify = (input: string) => {\n assert.string(input)\n\n const characters = input.match(charRegexMatcher)\n if (characters === null) {\n return input\n }\n\n return characters\n .map(character => which(character, { markdown: true }) ?? character)\n .join('')\n}\n","import { assert } from '@sindresorhus/is'\nimport skinTone from 'skin-tone'\n\nimport { findByCode } from './findByCode.js'\n\nexport interface WhichOptions {\n markdown?: boolean\n}\n\n/**\n * Get an emoji name from an emoji.\n */\nexport const which = (\n emoji: string,\n { markdown = false }: WhichOptions = {},\n) => {\n assert.string(emoji)\n assert.boolean(markdown)\n\n const result = findByCode(skinTone(emoji, 'none'))\n if (result === undefined) {\n return undefined\n }\n\n return markdown ? `:${result.key}:` : result.key\n}\n","{\n \"name\": \"@involvex/emoji-cli\",\n \"version\": \"2.2.7\",\n \"description\": \"Friendly emoji lookups and parsing utilities for Node.js. 💖\",\n \"keywords\": [\n \"emoji\",\n \"simple\",\n \"emoticons\",\n \"emoticon\",\n \"emojis\",\n \"smiley\",\n \"smileys\",\n \"smilies\",\n \"ideogram\",\n \"ideograms\"\n ],\n \"bugs\": {\n \"url\": \"https://github.com/omnidan/node-emoji/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/omnidan/node-emoji\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Involvex\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": {\n \"import\": \"./lib/index.d.ts\",\n \"require\": \"./lib/index.d.cts\"\n },\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"./lib/index.js\",\n \"bin\": {\n \"emoji-cli\": \"lib/bin/emoji-cli-improved.js\"\n },\n \"files\": [\n \"lib/\",\n \"package.json\",\n \"LICENSE.md\",\n \"README.md\",\n \"bin/emoji-cli.ts\",\n \"src/*\"\n ],\n \"scripts\": {\n \"prebuild\": \"npm run format && npm run lint && npm run typecheck\",\n \"build\": \"tsup\",\n \"build:cli\": \"bun build --target=node bin/emoji-cli-improved.ts --outdir=dist\",\n \"dev\": \"bun run bin/emoji-cli-improved.ts\",\n \"format\": \"prettier . --write\",\n \"lint\": \"eslint . --ignore-pattern lib --ignore-pattern dist -c eslint.config.ts\",\n \"lint:knip\": \"knip\",\n \"lint:md\": \"markdownlint \\\"**/*.md\\\" \\\".github/**/*.md\\\" --rules sentences-per-line\",\n \"lint:package-json\": \"npmPkgJsonLint .\",\n \"lint:packages\": \"pnpm dedupe --check\",\n \"lint:spelling\": \"cspell \\\"**\\\" \\\".github/**/*\\\"\",\n \"prepare\": \"husky install\",\n \"should-semantic-release\": \"should-semantic-release --verbose\",\n \"start\": \"node lib/bin/emoji-cli-improved.js\",\n \"test\": \"vitest\",\n \"test:cjs\": \"node ./src/e2e.cjs\",\n \"tsc\": \"tsc\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier --ignore-unknown --write\"\n },\n \"dependencies\": {\n \"@sindresorhus/is\": \"^4.6.0\",\n \"char-regex\": \"^1.0.2\",\n \"emojilib\": \"^2.4.0\",\n \"jiti\": \"^2.6.1\",\n \"skin-tone\": \"^2.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.39.2\",\n \"@eslint/json\": \"^0.14.0\",\n \"@release-it/conventional-changelog\": \"^10.0.0\",\n \"@swc/core\": \"^1.3.58\",\n \"@types/eslint\": \"^8.44.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^0.34.6\",\n \"console-fail-test\": \"^0.5.0\",\n \"cspell\": \"^8.0.0\",\n \"eslint\": \"^9.39.2\",\n \"eslint-plugin-deprecation\": \"^3.0.0\",\n \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n \"eslint-plugin-jsdoc\": \"^50.0.0\",\n \"eslint-plugin-jsonc\": \"^2.10.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-n\": \"^17.0.0\",\n \"eslint-plugin-no-only-tests\": \"^3.1.0\",\n \"eslint-plugin-perfectionist\": \"^2.3.0\",\n \"eslint-plugin-regexp\": \"^2.1.1\",\n \"eslint-plugin-vitest\": \"^0.3.9\",\n \"eslint-plugin-yml\": \"^1.10.0\",\n \"globals\": \"^16.5.0\",\n \"husky\": \"^8.0.3\",\n \"jsonc-eslint-parser\": \"^2.4.0\",\n \"knip\": \"^4.0.0\",\n \"lint-staged\": \"^15.1.0\",\n \"markdownlint\": \"^0.37.0\",\n \"markdownlint-cli\": \"^0.44.0\",\n \"npm-package-json-lint\": \"^8.0.0\",\n \"npm-package-json-lint-config-default\": \"^7.0.0\",\n \"prettier\": \"^3.0.3\",\n \"prettier-plugin-curly\": \"^0.3.0\",\n \"prettier-plugin-packagejson\": \"^2.4.6\",\n \"release-it\": \"^18.0.0\",\n \"sentences-per-line\": \"^0.3.0\",\n \"should-semantic-release\": \"^0.2.1\",\n \"tsup\": \"^8.0.0\",\n \"typescript\": \"^5.2.2\",\n \"typescript-eslint\": \"^8.50.1\",\n \"vitest\": \"^0.34.6\",\n \"yaml-eslint-parser\": \"^1.2.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n"],"mappings":"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","names":["import_is","charRegex","emojilib","is","import_is","import_is","import_is","import_is","import_is","is","import_is","import_is","skinTone"]}
@@ -12,7 +12,7 @@ import {
12
12
  // package.json
13
13
  var package_default = {
14
14
  name: "@involvex/emoji-cli",
15
- version: "2.2.5",
15
+ version: "2.2.7",
16
16
  description: "Friendly emoji lookups and parsing utilities for Node.js. \u{1F496}",
17
17
  keywords: [
18
18
  "emoji",
@@ -61,6 +61,7 @@ var package_default = {
61
61
  "src/*"
62
62
  ],
63
63
  scripts: {
64
+ prebuild: "npm run format && npm run lint && npm run typecheck",
64
65
  build: "tsup",
65
66
  "build:cli": "bun build --target=node bin/emoji-cli-improved.ts --outdir=dist",
66
67
  dev: "bun run bin/emoji-cli-improved.ts",
@@ -76,7 +77,8 @@ var package_default = {
76
77
  start: "node lib/bin/emoji-cli-improved.js",
77
78
  test: "vitest",
78
79
  "test:cjs": "node ./src/e2e.cjs",
79
- tsc: "tsc"
80
+ tsc: "tsc",
81
+ typecheck: "tsc --noEmit"
80
82
  },
81
83
  "lint-staged": {
82
84
  "*": "prettier --ignore-unknown --write"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json","../../bin/emoji-cli-improved.ts"],"sourcesContent":["{\n \"name\": \"@involvex/emoji-cli\",\n \"version\": \"2.2.5\",\n \"description\": \"Friendly emoji lookups and parsing utilities for Node.js. 💖\",\n \"keywords\": [\n \"emoji\",\n \"simple\",\n \"emoticons\",\n \"emoticon\",\n \"emojis\",\n \"smiley\",\n \"smileys\",\n \"smilies\",\n \"ideogram\",\n \"ideograms\"\n ],\n \"bugs\": {\n \"url\": \"https://github.com/omnidan/node-emoji/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/omnidan/node-emoji\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Involvex\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": {\n \"import\": \"./lib/index.d.ts\",\n \"require\": \"./lib/index.d.cts\"\n },\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"./lib/index.js\",\n \"bin\": {\n \"emoji-cli\": \"lib/bin/emoji-cli-improved.js\"\n },\n \"files\": [\n \"lib/\",\n \"package.json\",\n \"LICENSE.md\",\n \"README.md\",\n \"bin/emoji-cli.ts\",\n \"src/*\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:cli\": \"bun build --target=node bin/emoji-cli-improved.ts --outdir=dist\",\n \"dev\": \"bun run bin/emoji-cli-improved.ts\",\n \"format\": \"prettier . --write\",\n \"lint\": \"eslint . --ignore-pattern lib --ignore-pattern dist -c eslint.config.ts\",\n \"lint:knip\": \"knip\",\n \"lint:md\": \"markdownlint \\\"**/*.md\\\" \\\".github/**/*.md\\\" --rules sentences-per-line\",\n \"lint:package-json\": \"npmPkgJsonLint .\",\n \"lint:packages\": \"pnpm dedupe --check\",\n \"lint:spelling\": \"cspell \\\"**\\\" \\\".github/**/*\\\"\",\n \"prepare\": \"husky install\",\n \"should-semantic-release\": \"should-semantic-release --verbose\",\n \"start\": \"node lib/bin/emoji-cli-improved.js\",\n \"test\": \"vitest\",\n \"test:cjs\": \"node ./src/e2e.cjs\",\n \"tsc\": \"tsc\"\n },\n \"lint-staged\": {\n \"*\": \"prettier --ignore-unknown --write\"\n },\n \"dependencies\": {\n \"@sindresorhus/is\": \"^4.6.0\",\n \"char-regex\": \"^1.0.2\",\n \"emojilib\": \"^2.4.0\",\n \"jiti\": \"^2.6.1\",\n \"skin-tone\": \"^2.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.39.2\",\n \"@eslint/json\": \"^0.14.0\",\n \"@release-it/conventional-changelog\": \"^10.0.0\",\n \"@swc/core\": \"^1.3.58\",\n \"@types/eslint\": \"^8.44.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^0.34.6\",\n \"console-fail-test\": \"^0.5.0\",\n \"cspell\": \"^8.0.0\",\n \"eslint\": \"^9.39.2\",\n \"eslint-plugin-deprecation\": \"^3.0.0\",\n \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n \"eslint-plugin-jsdoc\": \"^50.0.0\",\n \"eslint-plugin-jsonc\": \"^2.10.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-n\": \"^17.0.0\",\n \"eslint-plugin-no-only-tests\": \"^3.1.0\",\n \"eslint-plugin-perfectionist\": \"^2.3.0\",\n \"eslint-plugin-regexp\": \"^2.1.1\",\n \"eslint-plugin-vitest\": \"^0.3.9\",\n \"eslint-plugin-yml\": \"^1.10.0\",\n \"globals\": \"^16.5.0\",\n \"husky\": \"^8.0.3\",\n \"jsonc-eslint-parser\": \"^2.4.0\",\n \"knip\": \"^4.0.0\",\n \"lint-staged\": \"^15.1.0\",\n \"markdownlint\": \"^0.37.0\",\n \"markdownlint-cli\": \"^0.44.0\",\n \"npm-package-json-lint\": \"^8.0.0\",\n \"npm-package-json-lint-config-default\": \"^7.0.0\",\n \"prettier\": \"^3.0.3\",\n \"prettier-plugin-curly\": \"^0.3.0\",\n \"prettier-plugin-packagejson\": \"^2.4.6\",\n \"release-it\": \"^18.0.0\",\n \"sentences-per-line\": \"^0.3.0\",\n \"should-semantic-release\": \"^0.2.1\",\n \"tsup\": \"^8.0.0\",\n \"typescript\": \"^5.2.2\",\n \"typescript-eslint\": \"^8.50.1\",\n \"vitest\": \"^0.34.6\",\n \"yaml-eslint-parser\": \"^1.2.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","#!/usr/bin/env node\n\nimport * as cli from '../src/index'\nimport pkg from '../package.json'\n// Type definitions for better type safety\ninterface CLIConfig {\n name: string\n description: string\n version: string\n}\n\ninterface Command {\n name: string\n aliases: string[]\n description: string\n handler: (args?: string) => void | Promise<void>\n requiresArgs: boolean\n}\n\ninterface ParsedArgs {\n command: string\n args: string[]\n help: boolean\n}\n\n// Configuration\nconst CONFIG: CLIConfig = {\n name: 'emoji-cli',\n description: 'Friendly emoji lookups and parsing utilities for Node.js',\n version: pkg.version as string // TODO: Get version from package.json dynamically\n}\n\n// Available commands\nconst COMMANDS: Command[] = [\n {\n name: 'search',\n aliases: ['--search'],\n description: 'Search for emojis by name or pattern',\n handler: runSearch,\n requiresArgs: true,\n },\n {\n name: 'emojify',\n aliases: ['--emojify'],\n description: 'Convert text to emojis',\n handler: runEmojify,\n requiresArgs: true,\n },\n {\n name: 'unemojify',\n aliases: ['--unemojify'],\n description: 'Convert emojis back to text',\n handler: runUnemojify,\n requiresArgs: true,\n },\n {\n name: 'get',\n aliases: ['--get'],\n description: 'Get a specific emoji by name',\n handler: runGet,\n requiresArgs: true,\n },\n {\n name: 'has',\n aliases: ['--has'],\n description: 'Check if an emoji exists',\n handler: runHas,\n requiresArgs: true,\n },\n {\n name: 'find',\n aliases: ['--find', '-f'],\n description: 'Find emojis by name',\n handler: runFind,\n requiresArgs: true,\n },\n {\n name: 'random',\n aliases: ['--random', '--rnd', '-r'],\n description: 'Get a random emoji',\n handler: runRandom,\n requiresArgs: false,\n },\n]\n\n// Error handling\nclass CLIError extends Error {\n code: number\n\n constructor(message: string, code: number) {\n super(message)\n this.code = code\n this.name = 'CLIError'\n }\n}\n\nclass ValidationError extends CLIError {\n constructor(message: string) {\n super(message, 2)\n this.name = 'ValidationError'\n }\n}\n\n// Utility functions\nfunction createOutputFormatter() {\n return {\n success: (\n data:\n | never\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n | (\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n )[],\n ) => {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results found')\n return\n }\n\n data.forEach((item, index) => {\n if (typeof item === 'string') {\n console.log(`${item}`)\n } else if (item && typeof item === 'object') {\n const displayName = item.name || item.key || 'unknown'\n console.log(`${index + 1}. ${item.emoji} ${displayName}`)\n } else {\n console.log(`${index + 1}. ${item}`)\n }\n })\n } else if (data && typeof data === 'object') {\n const displayName = data.name || data.key || 'unknown'\n console.log(`${data.emoji} ${displayName}`)\n } else if (data !== undefined && data !== null) {\n console.log(data)\n } else {\n console.log('No result found')\n }\n },\n error: (message: string) => {\n console.error(`❌ Error: ${message}`)\n },\n warning: (message: string) => {\n console.warn(`⚠️ Warning: ${message}`)\n },\n info: (message: string) => {\n console.log(`ℹ️ ${message}`)\n },\n }\n}\n\nconst output = createOutputFormatter()\n\n// Argument parsing\nfunction parseArgs(args: string[]): ParsedArgs {\n if (args.length === 0) {\n return { command: '', args: [], help: true }\n }\n\n const [first, ...rest] = args\n\n // Check for help flags\n if (first === '--help' || first === '-h') {\n return { command: '', args: [], help: true }\n }\n\n return {\n command: first,\n args: rest,\n help: false,\n }\n}\n\n// Command resolution\nfunction resolveCommand(input: string): Command | null {\n if (!input) {\n return null\n }\n\n return (\n COMMANDS.find(cmd => cmd.name === input || cmd.aliases.includes(input)) ||\n null\n )\n}\n\n// Validation\nfunction validateArgs(command: Command, args: string[]): void {\n if (command.requiresArgs && args.length === 0) {\n throw new ValidationError(`Command \"${command.name}\" requires arguments`)\n }\n\n if (!command.requiresArgs && args.length > 0) {\n throw new ValidationError(\n `Command \"${command.name}\" does not accept arguments`,\n )\n }\n}\n\n// Command handlers\nasync function runSearch(query?: string): Promise<void> {\n if (!query) {\n throw new ValidationError('Search query is required')\n }\n\n try {\n const results = cli.search(query)\n output.success(results)\n } catch (error) {\n output.error(\n `Failed to search for \"${query}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runEmojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to emojify is required')\n }\n\n try {\n const result = cli.emojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to emojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runUnemojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to unemojify is required')\n }\n\n try {\n const result = cli.unemojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to unemojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runGet(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.get(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`Emoji \"${name}\" not found`)\n }\n } catch (error) {\n output.error(\n `Failed to get emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runHas(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.has(name)\n output.success(\n result ? `✅ Emoji \"${name}\" exists` : `❌ Emoji \"${name}\" not found`,\n )\n } catch (error) {\n output.error(\n `Failed to check emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runFind(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Search term is required')\n }\n\n try {\n const result = cli.find(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`No emojis found for \"${name}\"`)\n }\n } catch (error) {\n output.error(\n `Failed to find emojis for \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runRandom(): Promise<void> {\n try {\n const result = cli.random()\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to get random emoji: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\n// Help and usage information\nfunction showHelp(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n console.log(`${CONFIG.description} 💖`)\n console.log('\\nUsage:')\n console.log(` ${CONFIG.name} <command> [arguments]`)\n console.log('\\nCommands:')\n\n COMMANDS.forEach(cmd => {\n const aliasesText =\n cmd.aliases.length > 1 ? ` (${cmd.aliases.join(', ')})` : ''\n console.log(` ${cmd.name}${aliasesText} ${cmd.description}`)\n })\n\n console.log('\\nExamples:')\n console.log(` ${CONFIG.name} --search \"heart\"`)\n console.log(` ${CONFIG.name} --get \"heart\"`)\n console.log(` ${CONFIG.name} --emojify \"I love you\"`)\n console.log(` ${CONFIG.name} --random`)\n}\n\nfunction showVersion(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n}\n\n// Main execution\nasync function run(): Promise<void> {\n try {\n const args = process.argv.slice(2)\n const { command: commandInput, args: commandArgs, help } = parseArgs(args)\n\n // Handle global flags\n if (help || !commandInput) {\n showHelp()\n return\n }\n\n if (commandInput === '--version' || commandInput === '-v') {\n showVersion()\n return\n }\n\n // Resolve and execute command\n const command = resolveCommand(commandInput)\n if (!command) {\n throw new CLIError(\n `Unknown command: ${commandInput}. Use --help for available commands.`,\n 1,\n )\n }\n\n // Validate arguments\n validateArgs(command, commandArgs)\n\n // Execute command\n await command.handler(commandArgs[0])\n } catch (error) {\n if (error instanceof CLIError) {\n output.error(error.message)\n process.exit(error.code)\n } else if (error instanceof ValidationError) {\n output.error(error.message)\n output.info('Use --help for usage information')\n process.exit(error.code)\n } else {\n output.error(\n `Unexpected error: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n process.exit(1)\n }\n }\n}\n\n// Execute if this file is run directly\n// if (import.meta.url === `file://${process.argv[1]}`) {\n// run().catch(error => {\n// output.error(\n// `Failed to run CLI: ${\n// error instanceof Error ? error.message : 'Unknown error'\n// }`,\n// )\n// process.exit(1)\n// })\n// }\nrun()\nexport default run\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../package.json","../../bin/emoji-cli-improved.ts"],"sourcesContent":["{\n \"name\": \"@involvex/emoji-cli\",\n \"version\": \"2.2.7\",\n \"description\": \"Friendly emoji lookups and parsing utilities for Node.js. 💖\",\n \"keywords\": [\n \"emoji\",\n \"simple\",\n \"emoticons\",\n \"emoticon\",\n \"emojis\",\n \"smiley\",\n \"smileys\",\n \"smilies\",\n \"ideogram\",\n \"ideograms\"\n ],\n \"bugs\": {\n \"url\": \"https://github.com/omnidan/node-emoji/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/omnidan/node-emoji\"\n },\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Involvex\"\n },\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"types\": {\n \"import\": \"./lib/index.d.ts\",\n \"require\": \"./lib/index.d.cts\"\n },\n \"import\": \"./lib/index.js\",\n \"require\": \"./lib/index.cjs\"\n }\n },\n \"main\": \"./lib/index.js\",\n \"bin\": {\n \"emoji-cli\": \"lib/bin/emoji-cli-improved.js\"\n },\n \"files\": [\n \"lib/\",\n \"package.json\",\n \"LICENSE.md\",\n \"README.md\",\n \"bin/emoji-cli.ts\",\n \"src/*\"\n ],\n \"scripts\": {\n \"prebuild\": \"npm run format && npm run lint && npm run typecheck\",\n \"build\": \"tsup\",\n \"build:cli\": \"bun build --target=node bin/emoji-cli-improved.ts --outdir=dist\",\n \"dev\": \"bun run bin/emoji-cli-improved.ts\",\n \"format\": \"prettier . --write\",\n \"lint\": \"eslint . --ignore-pattern lib --ignore-pattern dist -c eslint.config.ts\",\n \"lint:knip\": \"knip\",\n \"lint:md\": \"markdownlint \\\"**/*.md\\\" \\\".github/**/*.md\\\" --rules sentences-per-line\",\n \"lint:package-json\": \"npmPkgJsonLint .\",\n \"lint:packages\": \"pnpm dedupe --check\",\n \"lint:spelling\": \"cspell \\\"**\\\" \\\".github/**/*\\\"\",\n \"prepare\": \"husky install\",\n \"should-semantic-release\": \"should-semantic-release --verbose\",\n \"start\": \"node lib/bin/emoji-cli-improved.js\",\n \"test\": \"vitest\",\n \"test:cjs\": \"node ./src/e2e.cjs\",\n \"tsc\": \"tsc\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier --ignore-unknown --write\"\n },\n \"dependencies\": {\n \"@sindresorhus/is\": \"^4.6.0\",\n \"char-regex\": \"^1.0.2\",\n \"emojilib\": \"^2.4.0\",\n \"jiti\": \"^2.6.1\",\n \"skin-tone\": \"^2.0.0\"\n },\n \"devDependencies\": {\n \"@eslint/js\": \"^9.39.2\",\n \"@eslint/json\": \"^0.14.0\",\n \"@release-it/conventional-changelog\": \"^10.0.0\",\n \"@swc/core\": \"^1.3.58\",\n \"@types/eslint\": \"^8.44.7\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^0.34.6\",\n \"console-fail-test\": \"^0.5.0\",\n \"cspell\": \"^8.0.0\",\n \"eslint\": \"^9.39.2\",\n \"eslint-plugin-deprecation\": \"^3.0.0\",\n \"eslint-plugin-eslint-comments\": \"^3.2.0\",\n \"eslint-plugin-jsdoc\": \"^50.0.0\",\n \"eslint-plugin-jsonc\": \"^2.10.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-n\": \"^17.0.0\",\n \"eslint-plugin-no-only-tests\": \"^3.1.0\",\n \"eslint-plugin-perfectionist\": \"^2.3.0\",\n \"eslint-plugin-regexp\": \"^2.1.1\",\n \"eslint-plugin-vitest\": \"^0.3.9\",\n \"eslint-plugin-yml\": \"^1.10.0\",\n \"globals\": \"^16.5.0\",\n \"husky\": \"^8.0.3\",\n \"jsonc-eslint-parser\": \"^2.4.0\",\n \"knip\": \"^4.0.0\",\n \"lint-staged\": \"^15.1.0\",\n \"markdownlint\": \"^0.37.0\",\n \"markdownlint-cli\": \"^0.44.0\",\n \"npm-package-json-lint\": \"^8.0.0\",\n \"npm-package-json-lint-config-default\": \"^7.0.0\",\n \"prettier\": \"^3.0.3\",\n \"prettier-plugin-curly\": \"^0.3.0\",\n \"prettier-plugin-packagejson\": \"^2.4.6\",\n \"release-it\": \"^18.0.0\",\n \"sentences-per-line\": \"^0.3.0\",\n \"should-semantic-release\": \"^0.2.1\",\n \"tsup\": \"^8.0.0\",\n \"typescript\": \"^5.2.2\",\n \"typescript-eslint\": \"^8.50.1\",\n \"vitest\": \"^0.34.6\",\n \"yaml-eslint-parser\": \"^1.2.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n","#!/usr/bin/env node\n\nimport * as cli from '../src/index'\nimport pkg from '../package.json'\n// Type definitions for better type safety\ninterface CLIConfig {\n name: string\n description: string\n version: string\n}\n\ninterface Command {\n name: string\n aliases: string[]\n description: string\n handler: (args?: string) => void | Promise<void>\n requiresArgs: boolean\n}\n\ninterface ParsedArgs {\n command: string\n args: string[]\n help: boolean\n}\n\n// Configuration\nconst CONFIG: CLIConfig = {\n name: 'emoji-cli',\n description: 'Friendly emoji lookups and parsing utilities for Node.js',\n version: pkg.version as string, // TODO: Get version from package.json dynamically\n}\n\n// Available commands\nconst COMMANDS: Command[] = [\n {\n name: 'search',\n aliases: ['--search'],\n description: 'Search for emojis by name or pattern',\n handler: runSearch,\n requiresArgs: true,\n },\n {\n name: 'emojify',\n aliases: ['--emojify'],\n description: 'Convert text to emojis',\n handler: runEmojify,\n requiresArgs: true,\n },\n {\n name: 'unemojify',\n aliases: ['--unemojify'],\n description: 'Convert emojis back to text',\n handler: runUnemojify,\n requiresArgs: true,\n },\n {\n name: 'get',\n aliases: ['--get'],\n description: 'Get a specific emoji by name',\n handler: runGet,\n requiresArgs: true,\n },\n {\n name: 'has',\n aliases: ['--has'],\n description: 'Check if an emoji exists',\n handler: runHas,\n requiresArgs: true,\n },\n {\n name: 'find',\n aliases: ['--find', '-f'],\n description: 'Find emojis by name',\n handler: runFind,\n requiresArgs: true,\n },\n {\n name: 'random',\n aliases: ['--random', '--rnd', '-r'],\n description: 'Get a random emoji',\n handler: runRandom,\n requiresArgs: false,\n },\n]\n\n// Error handling\nclass CLIError extends Error {\n code: number\n\n constructor(message: string, code: number) {\n super(message)\n this.code = code\n this.name = 'CLIError'\n }\n}\n\nclass ValidationError extends CLIError {\n constructor(message: string) {\n super(message, 2)\n this.name = 'ValidationError'\n }\n}\n\n// Utility functions\nfunction createOutputFormatter() {\n return {\n success: (\n data:\n | never\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n | (\n | string\n | {\n emoji: string\n name?: string\n key?: string\n }\n )[],\n ) => {\n if (Array.isArray(data)) {\n if (data.length === 0) {\n console.log('No results found')\n return\n }\n\n data.forEach((item, index) => {\n if (typeof item === 'string') {\n console.log(`${item}`)\n } else if (item && typeof item === 'object') {\n const displayName = item.name || item.key || 'unknown'\n console.log(`${index + 1}. ${item.emoji} ${displayName}`)\n } else {\n console.log(`${index + 1}. ${item}`)\n }\n })\n } else if (data && typeof data === 'object') {\n const displayName = data.name || data.key || 'unknown'\n console.log(`${data.emoji} ${displayName}`)\n } else if (data !== undefined && data !== null) {\n console.log(data)\n } else {\n console.log('No result found')\n }\n },\n error: (message: string) => {\n console.error(`❌ Error: ${message}`)\n },\n warning: (message: string) => {\n console.warn(`⚠️ Warning: ${message}`)\n },\n info: (message: string) => {\n console.log(`ℹ️ ${message}`)\n },\n }\n}\n\nconst output = createOutputFormatter()\n\n// Argument parsing\nfunction parseArgs(args: string[]): ParsedArgs {\n if (args.length === 0) {\n return { command: '', args: [], help: true }\n }\n\n const [first, ...rest] = args\n\n // Check for help flags\n if (first === '--help' || first === '-h') {\n return { command: '', args: [], help: true }\n }\n\n return {\n command: first,\n args: rest,\n help: false,\n }\n}\n\n// Command resolution\nfunction resolveCommand(input: string): Command | null {\n if (!input) {\n return null\n }\n\n return (\n COMMANDS.find(cmd => cmd.name === input || cmd.aliases.includes(input)) ||\n null\n )\n}\n\n// Validation\nfunction validateArgs(command: Command, args: string[]): void {\n if (command.requiresArgs && args.length === 0) {\n throw new ValidationError(`Command \"${command.name}\" requires arguments`)\n }\n\n if (!command.requiresArgs && args.length > 0) {\n throw new ValidationError(\n `Command \"${command.name}\" does not accept arguments`,\n )\n }\n}\n\n// Command handlers\nasync function runSearch(query?: string): Promise<void> {\n if (!query) {\n throw new ValidationError('Search query is required')\n }\n\n try {\n const results = cli.search(query)\n output.success(results)\n } catch (error) {\n output.error(\n `Failed to search for \"${query}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runEmojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to emojify is required')\n }\n\n try {\n const result = cli.emojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to emojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runUnemojify(text?: string): Promise<void> {\n if (!text) {\n throw new ValidationError('Text to unemojify is required')\n }\n\n try {\n const result = cli.unemojify(text)\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to unemojify text: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runGet(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.get(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`Emoji \"${name}\" not found`)\n }\n } catch (error) {\n output.error(\n `Failed to get emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runHas(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Emoji name is required')\n }\n\n try {\n const result = cli.has(name)\n output.success(\n result ? `✅ Emoji \"${name}\" exists` : `❌ Emoji \"${name}\" not found`,\n )\n } catch (error) {\n output.error(\n `Failed to check emoji \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runFind(name?: string): Promise<void> {\n if (!name) {\n throw new ValidationError('Search term is required')\n }\n\n try {\n const result = cli.find(name)\n if (result) {\n output.success(result)\n } else {\n output.warning(`No emojis found for \"${name}\"`)\n }\n } catch (error) {\n output.error(\n `Failed to find emojis for \"${name}\": ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\nasync function runRandom(): Promise<void> {\n try {\n const result = cli.random()\n output.success(result)\n } catch (error) {\n output.error(\n `Failed to get random emoji: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n }\n}\n\n// Help and usage information\nfunction showHelp(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n console.log(`${CONFIG.description} 💖`)\n console.log('\\nUsage:')\n console.log(` ${CONFIG.name} <command> [arguments]`)\n console.log('\\nCommands:')\n\n COMMANDS.forEach(cmd => {\n const aliasesText =\n cmd.aliases.length > 1 ? ` (${cmd.aliases.join(', ')})` : ''\n console.log(` ${cmd.name}${aliasesText} ${cmd.description}`)\n })\n\n console.log('\\nExamples:')\n console.log(` ${CONFIG.name} --search \"heart\"`)\n console.log(` ${CONFIG.name} --get \"heart\"`)\n console.log(` ${CONFIG.name} --emojify \"I love you\"`)\n console.log(` ${CONFIG.name} --random`)\n}\n\nfunction showVersion(): void {\n console.log(`${CONFIG.name} v${CONFIG.version}`)\n}\n\n// Main execution\nasync function run(): Promise<void> {\n try {\n const args = process.argv.slice(2)\n const { command: commandInput, args: commandArgs, help } = parseArgs(args)\n\n // Handle global flags\n if (help || !commandInput) {\n showHelp()\n return\n }\n\n if (commandInput === '--version' || commandInput === '-v') {\n showVersion()\n return\n }\n\n // Resolve and execute command\n const command = resolveCommand(commandInput)\n if (!command) {\n throw new CLIError(\n `Unknown command: ${commandInput}. Use --help for available commands.`,\n 1,\n )\n }\n\n // Validate arguments\n validateArgs(command, commandArgs)\n\n // Execute command\n await command.handler(commandArgs[0])\n } catch (error) {\n if (error instanceof CLIError) {\n output.error(error.message)\n process.exit(error.code)\n } else if (error instanceof ValidationError) {\n output.error(error.message)\n output.info('Use --help for usage information')\n process.exit(error.code)\n } else {\n output.error(\n `Unexpected error: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n )\n process.exit(1)\n }\n }\n}\n\n// Execute if this file is run directly\n// if (import.meta.url === `file://${process.argv[1]}`) {\n// run().catch(error => {\n// output.error(\n// `Failed to run CLI: ${\n// error instanceof Error ? error.message : 'Unknown error'\n// }`,\n// )\n// process.exit(1)\n// })\n// }\nrun()\nexport default run\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@involvex/emoji-cli",
3
- "version": "2.2.6",
3
+ "version": "2.2.7",
4
4
  "description": "Friendly emoji lookups and parsing utilities for Node.js. 💖",
5
5
  "keywords": [
6
6
  "emoji",
@@ -49,6 +49,7 @@
49
49
  "src/*"
50
50
  ],
51
51
  "scripts": {
52
+ "prebuild": "npm run format && npm run lint && npm run typecheck",
52
53
  "build": "tsup",
53
54
  "build:cli": "bun build --target=node bin/emoji-cli-improved.ts --outdir=dist",
54
55
  "dev": "bun run bin/emoji-cli-improved.ts",
@@ -64,7 +65,8 @@
64
65
  "start": "node lib/bin/emoji-cli-improved.js",
65
66
  "test": "vitest",
66
67
  "test:cjs": "node ./src/e2e.cjs",
67
- "tsc": "tsc"
68
+ "tsc": "tsc",
69
+ "typecheck": "tsc --noEmit"
68
70
  },
69
71
  "lint-staged": {
70
72
  "*": "prettier --ignore-unknown --write"