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 yanseUsage
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
blackredgreenyellowbluemagentacyanwhitegray/grey
Background Colors
bgBlackbgRedbgGreenbgYellowbgBluebgMagentabgCyanbgWhite
Bright Colors
blackBright,redBright,greenBright,yellowBrightblueBright,magentaBright,cyanBright,whiteBright
Bright Background Colors
bgBlackBright,bgRedBright,bgGreenBright,bgYellowBrightbgBlueBright,bgMagentaBright,bgCyanBright,bgWhiteBright
Style Modifiers
bolddimitalicunderlineinversehiddenstrikethroughreset
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 outputvisible: boolean- Make output visible/invisibleansiRegex: RegExp- Regex for matching ANSI codes
Methods
hasColor(str: string): boolean- Check if string contains ANSI codeshasAnsi(str: string): boolean- Alias for hasColorunstyle(str: string): string- Remove ANSI codes from stringstripColor(str: string): string- Alias for unstylealias(name: string, color: YanseColor): void- Create color aliastheme(colors: Record<string, YanseColor>): void- Create color themecreate(): 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
OSS Credit
Inspired by chalk and ansi-colors.
Development
Setup
- Clone the repository:
git clone https://github.com/constructive-io/dev-utils.git- Install dependencies:
cd dev-utils
pnpm install
pnpm build- Test the package of interest:
cd packages/<packagename>
pnpm test:watchCredits
Built for developers, with developers.
👉 https://launchql.com | https://hyperweb.io
Disclaimer
AS DESCRIBED IN THE LICENSES, THE SOFTWARE IS PROVIDED "AS IS", AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND.
No developer or entity involved in creating this software will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of the code, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value.