JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7968
  • Score
    100M100P100Q132758F
  • License MIT

Fast and lightweight terminal color styling library with chalk-like API

Package Exports

  • yanse
  • yanse/esm/index.js
  • yanse/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (yanse) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

yanse


Yanse (颜色) - Fast terminal color styling

Fast and lightweight terminal color styling library with a chalk-like API. Yanse (颜色, yánsè) means "color" in Chinese.

Why? We got tired of chalk's ESM-only errors and needed control over our dependencies. This utility is too simple to justify depending on chalk and wrestling with module: true.

Features

  • Fast & Lightweight - Zero dependencies, optimized for performance
  • Chalk-like API - Drop-in replacement for chalk with familiar syntax
  • TypeScript Support - Fully typed with comprehensive type definitions
  • Nested Colors - Proper handling of nested color styles without bugs
  • Chained Styles - Chain multiple colors and modifiers
  • Toggle Support - Easily enable/disable colors
  • Themes & Aliases - Create custom color themes and aliases

Install

npm install yanse

Usage

Basic Colors

import yanse, { red, green, blue, yellow, cyan } from 'yanse';

console.log(red('Error message'));
console.log(green('Success message'));
console.log(blue('Info message'));
console.log(yellow('Warning message'));
console.log(cyan('Debug message'));

Chained Colors

import yanse from 'yanse';

console.log(yanse.bold.red('Bold red text'));
console.log(yanse.bold.yellow.italic('Bold yellow italic text'));
console.log(yanse.green.bold.underline('Bold green underlined text'));

Nested Colors

import { yellow, red, cyan } from 'yanse';

console.log(yellow(`foo ${red.bold('red')} bar ${cyan('cyan')} baz`));

Logger Example

Perfect for building loggers with colored output:

import yanse, { cyan, yellow, red, green, bold } from 'yanse';

type LogLevel = 'info' | 'warn' | 'error' | 'debug' | 'success';

const levelColors: Record<LogLevel, typeof cyan> = {
  info: cyan,
  warn: yellow,
  error: red,
  debug: yanse.gray,
  success: green
};

class Logger {
  constructor(private scope: string) {}

  log(level: LogLevel, message: string) {
    const tag = bold(`[${this.scope}]`);
    const color = levelColors[level];
    const prefix = color(`${level.toUpperCase()}:`);

    console.log(`${tag} ${prefix} ${message}`);
  }
}

const logger = new Logger('MyApp');
logger.log('info', 'Application started');
logger.log('success', 'Connection established');
logger.log('warn', 'Deprecated API used');
logger.log('error', 'Failed to connect');

Available Styles

Colors

  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • white
  • gray / grey

Background Colors

  • bgBlack
  • bgRed
  • bgGreen
  • bgYellow
  • bgBlue
  • bgMagenta
  • bgCyan
  • bgWhite

Bright Colors

  • blackBright, redBright, greenBright, yellowBright
  • blueBright, magentaBright, cyanBright, whiteBright

Bright Background Colors

  • bgBlackBright, bgRedBright, bgGreenBright, bgYellowBright
  • bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright

Style Modifiers

  • bold
  • dim
  • italic
  • underline
  • inverse
  • hidden
  • strikethrough
  • reset

Toggle Color Support

import yanse from 'yanse';

// Disable colors
yanse.enabled = false;
console.log(yanse.red('This will not be colored'));

// Re-enable colors
yanse.enabled = true;
console.log(yanse.red('This will be red'));

Strip ANSI Codes

import yanse from 'yanse';

const styled = yanse.blue.bold('Hello World');
console.log(yanse.unstyle(styled)); // 'Hello World'
console.log(yanse.stripColor(styled)); // 'Hello World' (alias)

Themes & Aliases

Create Aliases

import yanse from 'yanse';

yanse.alias('primary', yanse.blue);
yanse.alias('secondary', yanse.gray);

console.log(yanse.primary('Primary text'));
console.log(yanse.secondary('Secondary text'));

Create Themes

import yanse from 'yanse';

yanse.theme({
  danger: yanse.red,
  success: yanse.green,
  warning: yanse.yellow,
  info: yanse.cyan,
  primary: yanse.blue,
  muted: yanse.dim.gray
});

console.log(yanse.danger('Error occurred!'));
console.log(yanse.success('Operation successful!'));
console.log(yanse.warning('Be careful!'));

Create Custom Instances

import { create } from 'yanse';

const customYanse = create();
customYanse.enabled = false; // This instance has colors disabled

console.log(customYanse.red('Not colored'));

API

Properties

  • enabled: boolean - Enable/disable color output
  • visible: boolean - Make output visible/invisible
  • ansiRegex: RegExp - Regex for matching ANSI codes

Methods

  • hasColor(str: string): boolean - Check if string contains ANSI codes
  • hasAnsi(str: string): boolean - Alias for hasColor
  • unstyle(str: string): string - Remove ANSI codes from string
  • stripColor(str: string): string - Alias for unstyle
  • alias(name: string, color: YanseColor): void - Create color alias
  • theme(colors: Record<string, YanseColor>): void - Create color theme
  • create(): YanseColors - Create new yanse instance

Why Yanse?

  • Zero Dependencies - No external dependencies, minimal bundle size
  • Fast - Optimized for performance
  • Correct Nested Colors - Unlike some libraries, yanse correctly handles nested color styles
  • TypeScript First - Written in TypeScript with full type support
  • Familiar API - Drop-in replacement for chalk

Credits

Inspired by chalk and ansi-colors.