1.0.0 • Published 12 days ago

@crabas0npm/voluptas-ad-vel v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
12 days ago

@crabas0npm/voluptas-ad-vel

npm

A JavaScript ANSI color/style management. ANSI parsing. ANSI to CSS. Small, clean, no dependencies.

npm install @crabas0npm/voluptas-ad-vel

What For

Why Another One?

Other tools lack consistency, failing to solve a simple hierarchy problem:

require ('colors') // a popular color utility

console.log (('foo'.cyan + 'bar').red)

pic

WTF?! The bar word above should be rendered in red, but it's not! That sucks. It's because ANSI codes are linear, not hierarchical (as with XML/HTML). A special kind of magic is needed to make this work. Ansicolor does that magic for you:

require ('@crabas0npm/voluptas-ad-vel').nice // .nice for unsafe String extensions

console.log (('foo'.cyan + 'bar').red)

pic

Nice!

Crash Course

Importing (as methods):

import { green, inverse, bgLightCyan, underline, dim } from '@crabas0npm/voluptas-ad-vel'
const { green, inverse, bgLightCyan, underline, dim } = require ('@crabas0npm/voluptas-ad-vel')

Usage:

console.log ('foo' + green (inverse (bgLightCyan ('bar')) + 'baz') + 'qux')
console.log (underline.bright.green ('foo' + dim.red.bgLightCyan ('bar'))) // method chaining

Importing (as object):

import { @crabas0npm/voluptas-ad-vel, ParsedSpan } from '@crabas0npm/voluptas-ad-vel' // along with type definitions
import @crabas0npm/voluptas-ad-vel from '@crabas0npm/voluptas-ad-vel'

Nice Mode (not recommended)

const ansi = require ('@crabas0npm/voluptas-ad-vel').nice

The ('@crabas0npm/voluptas-ad-vel').nice export defines styling APIs on the String prototype directly. It uses an ad-hoc DSL (sort of) for infix-style string coloring. The nice is convenient, but not safe, avoid using it in public modules, as it alters global objects, and that might cause potential hard-to-debug compatibility issues.

console.log ('foo'.red.bright + 'bar'.bgYellow.underline.dim)

Supported Styles

'foreground colors'
    .red.green.yellow.blue.magenta.cyan.white.darkGray.black
'light foreground colors'
    .lightRed.lightGreen.lightYellow.lightBlue.lightMagenta.lightCyan.lightGray
'background colors'
    .bgRed.bgGreen.bgYellow.bgBlue.bgMagenta.bgCyan.bgWhite.bgDarkGray.bgBlack
'light background colors'
    .bgLightRed.bgLightGreen.bgLightYellow.bgLightBlue.bgLightMagenta.bgLightCyan.bgLightGray
'styles'
    .bright.dim.italic.underline.inverse // your platform should support italic

You also can obtain all those style names (for reflection purposes):

const { names } = require ('@crabas0npm/voluptas-ad-vel')

names // ['red', 'green', ...

Removing ANSI Styles From Strings

const { strip } = require ('@crabas0npm/voluptas-ad-vel')

strip ('\u001b[0m\u001b[4m\u001b[42m\u001b[31mfoo\u001b[39m\u001b[49m\u001b[24mfoo\u001b[0m')) // 'foofoo'

Checking If Strings Contain ANSI Codes

const { isEscaped, green } = require ('@crabas0npm/voluptas-ad-vel')

isEscaped ('text')         // false
isEscaped (green ('text')) // true

Converting to CSS/HTML

Inspection of ANSI styles in arbitrary strings is essential when implementing platform-agnostic logging — that piece of code is available under command line interface and in a browser as well. Here's an example of how you would parse a colored string into an array-like structure. That structure can be traversed later to build HTML/JSON/XML or any other markup/syntax.

const { parse } = require ('@crabas0npm/voluptas-ad-vel')

const parsed = parse ('foo'.bgLightRed.bright.italic + 'bar'.red.dim)

The ansi.parse () method will return a pseudo-array of styled spans, you can iterate over it with a for ... of loop and convert it to an array with the spread operator (...). Also, there's the .spans property for obtaining the already-spread array directly:

assert.deepEqual (parsed.spans /* or [...parsed] */,

    [ { css: 'font-weight: bold;font-style: italic;background:rgba(255,51,0,1);',
        italic: true,
        bold: true,
        color: { bright: true },
        bgColor: { name: 'lightRed' },
        text: 'foo' },

      { css: 'color:rgba(204,0,0,0.5);',
        color: { name: 'red', dim: true },
        text: 'bar' } ])

Custom Color Themes

You can change default RGB values (won't work in terminals, affects only the ANSI→CSS transformation part):

const ansi = require ('@crabas0npm/voluptas-ad-vel')

ansi.rgb = {

    black:        [0,     0,   0],    
    darkGray:     [100, 100, 100],
    lightGray:    [200, 200, 200],
    white:        [255, 255, 255],

    red:          [204,   0,   0],
    lightRed:     [255,  51,   0],
    
    green:        [0,   204,   0],
    lightGreen:   [51,  204,  51],
    
    yellow:       [204, 102,   0],
    lightYellow:  [255, 153,  51],
    
    blue:         [0,     0, 255],
    lightBlue:    [26,  140, 255],
    
    magenta:      [204,   0, 204],
    lightMagenta: [255,   0, 255],
    
    cyan:         [0,   153, 255],
    lightCyan:    [0,   204, 255],
}

Chrome DevTools Compatibility

Web browsers usually implement their own proprietary CSS-based color formats for console.log and most of them fail to display standard ANSI colors. Ansicolor offers you a helper method to convert ANSI-styled strings to browser-compatible argument lists acceptable by Chrome's console.log:

const { bgGreen, red, parse } = require ('@crabas0npm/voluptas-ad-vel')

const string = 'foo' + bgGreen (red.underline.bright.inverse ('bar') + 'baz')
const parsed = parse (string)

console.log (...parsed.asChromeConsoleLogArguments) // prints with colors in Chrome!

Here's what the format looks like:

parsed.asChromeConsoleLogArguments // [ "%cfoo%cbar%cbaz",
                                   //   "",
                                   //   "font-weight: bold;text-decoration: underline;background:rgba(255,51,0,1);color:rgba(0,204,0,1);",
                                   //   "background:rgba(0,204,0,1);"
                                   // ]

Play with this feature online: demo page. Open the DevTools console and type expressions in the input box to see colored console output.

Happy logging!

Projects That Use @crabas0npm/voluptas-ad-vel

  • Ololog! — a better console.log for the log-driven debugging junkies
  • CCXT — a cryptocurrency trading API with 130+ exchanges
  • Grafana — beautiful monitoring & metric analytics & dashboards
setreadablestreamyamlphonetostringtagerror-handlingflagairbnbinstallerfindLastIndexObject.assignfantasy-landdeepcopycircularECMAScript 2021sharedwhatwgclidefinecachestreamsauthwalkingprotoirqgetintrinsicfiltersetterObject.entriespackage managerauthenticationcall-bindArray.prototype.filterclassnameswgetrangeerrorregexenvinvariantsyntaxstylingtoStringTagzeroshrinkwrapextendwaapi@@toStringTages2015websitetc39PromisecolumnsprogressJSON-Schemaes-abstractoptimizersequencesettingslibphonenumbermovelinewrapArray.prototype.containsvisualprotobuflintdirectorythrottleconnectBigUint64Arraylaunchbrowserimmutablejson-schema-validationoptionhashnameterminalECMAScript 2017cryptless mixinsless csscopywatcherworkereslintpluginvarcryptocharactersemojimkdirsarrayscode pointsqsgesturescommand-lineformattinghookformlazyECMAScript 2022eslint-pluginsyntaxerrorbindoutputnpmtypeofentriescodesUint16ArrayurlsrandomwatchFilegenericsweakmappolyfillES2020mime-dbgroupBymobileasyncconcurrencynegativetypescriptutilmixinsautoprefixerArrayBuffer#slicecharacterextragetdeephigher-orderpyyamlformscurlURLprotocol-buffershttpsawesomesaucelinuxbannercolourtrimStartfpredux-toolkitloggerfiledotenvsameValueZeroencryptionansiECMAScript 2020helperscall-boundflattraversepathvalidatorvalidatetypesafemochaES6serializationregexpcolorlesstypanionforEachpnpm9ES2016byteLengthfastifydefaultmapgetOwnPropertyDescriptorrmoptimistclientWeakSetartobjframeworkperformantgradients cssbrowserlistupYAMLWeakMapES2018immeruninstalltranspilemulti-packagepreserve-symlinksUnderscoredeep-copyhasOwnparseidbuffersgetoptcolorsrecursiveenvironmentrm -rfprivate dataloggingavastructuredCloneperformancelengthpackagesbytegetterhasdescriptionsliceprettyPushidleconcatMapCSSInt32ArrayoncekeysECMAScript 2015nativecss-in-jsuser-streamsindicatortrimEndECMAScript 7finddeep-cloneratelimitECMAScript 2019collection.es6readkoreanfast-deep-copyArray.prototype.findLastlimitemitjson-schema-validatorglobintrinsicES2023dependency managerunicodees2018rm -frless.jstacitjavascriptcallstreamRegExp#flagsworkspace:*passwordECMAScript 2023SymbolarraybufferargumentsprivateES8ReactiveXtoolsomitschemespeedtypees8RxbabelparentswaitconfigurablenopeObject.keysvalidfromdeepclonetddapifind-uppersistentcss nestingflatMapcheckquotepipebatchastRegExp.prototype.flagspostcsserrormimetypesquerySetstyleguidedescriptorsjestIteratoranimationdescriptorinterruptsArray.prototype.includesfunctionalreact-hook-formmodulesredactStyleSheetArrayBuffervalidationcompilerTypeScriptargumentES7matchesexebreakpostcss-pluginES2022groupECMAScript 2018fastuuidreducerstringifyshimformattyped arrayenumerablenodejses6jsonString.prototype.trimObject.definePropertystylesheetreduceESdatasymlinkswebbrowserslistefficientxtermfastclonefolderequalitymetadataaccessorgetPrototypeOfisConcatSpreadablerequestchildwatchfindLastfetchisfullwidthcensorframerbusyxsslastfullwalk
@diahkomalasarinpm/ratione-quidem-rerum@diahkomalasarinpm/recusandae-ipsum-iusto@diahkomalasarinpm/rem-minus-rerum@diahkomalasarinpm/quod-fugit-voluptatum@diahkomalasarinpm/sequi-natus-consequatur@diahkomalasarinpm/sequi-voluptate-sit@diahkomalasarinpm/similique-iusto-dolores@diahkomalasarinpm/reprehenderit-dolorum-rerum@diahkomalasarinpm/repudiandae-odio-quaerat@diahkomalasarinpm/sed-placeat-aut@diahkomalasarinpm/sequi-corporis-culpa@diahkomalasarinpm/facere-totam-perspiciatis@diahkomalasarinpm/facilis-mollitia-repellat@diahkomalasarinpm/fuga-consequatur-eos@diahkomalasarinpm/inventore-blanditiis-tempora@diahkomalasarinpm/ipsa-est-ratione@diahkomalasarinpm/ipsam-cumque-nesciunt@diahkomalasarinpm/ipsam-voluptates-reiciendis@diahkomalasarinpm/impedit-debitis-magni@diahkomalasarinpm/impedit-error-sapiente@diahkomalasarinpm/incidunt-assumenda-porro@diahkomalasarinpm/iste-animi-deleniti@diahkomalasarinpm/iste-doloremque-ut@diahkomalasarinpm/voluptates-quos-harum@diahkomalasarinpm/vero-reprehenderit-temporibus@diahkomalasarinpm/vitae-aperiam-cum@diahkomalasarinpm/vitae-eveniet-soluta@diahkomalasarinpm/voluptate-impedit-placeat@diahkomalasarinpm/adipisci-iste-exercitationem@diahkomalasarinpm/alias-magni-aperiam@diahkomalasarinpm/aliquid-dolores-repellat@diahkomalasarinpm/a-reiciendis-recusandae@diahkomalasarinpm/accusamus-rem-distinctio@diahkomalasarinpm/accusantium-repellendus-dolor@diahkomalasarinpm/amet-ex-aperiam@diahkomalasarinpm/amet-hic-ipsa@diahkomalasarinpm/amet-iure-voluptatem@diahkomalasarinpm/similique-voluptate-aut@diahkomalasarinpm/sint-quod-occaecati@diahkomalasarinpm/sit-sequi-quibusdam@diahkomalasarinpm/veniam-voluptatum-unde@diahkomalasarinpm/veritatis-eaque-temporibus@diahkomalasarinpm/vero-delectus-assumenda@diahkomalasarinpm/sunt-in-porro@diahkomalasarinpm/tempora-cum-ut@diahkomalasarinpm/vel-doloremque-illo@diahkomalasarinpm/vel-et-sequi@diahkomalasarinpm/veniam-a-in@diahkomalasarinpm/tenetur-accusamus-tenetur@diahkomalasarinpm/tempora-quos-doloremque@diahkomalasarinpm/temporibus-consequatur-atque@diahkomalasarinpm/temporibus-eligendi-ullam@diahkomalasarinpm/unde-animi-reprehenderit@diahkomalasarinpm/soluta-accusantium-nulla@diahkomalasarinpm/aspernatur-iusto-quam@diahkomalasarinpm/aspernatur-magni-maiores@diahkomalasarinpm/at-a-recusandae@diahkomalasarinpm/asperiores-occaecati-soluta@diahkomalasarinpm/autem-odio-velit@diahkomalasarinpm/beatae-a-fuga@diahkomalasarinpm/blanditiis-optio-laborum@diahkomalasarinpm/aut-a-deserunt@diahkomalasarinpm/autem-amet-aperiam@diahkomalasarinpm/consequatur-animi-voluptas@diahkomalasarinpm/corrupti-eius-sint@diahkomalasarinpm/itaque-cum-enim@diahkomalasarinpm/itaque-voluptas-iusto@diahkomalasarinpm/iure-quidem-in@diahkomalasarinpm/iure-quidem-perferendis@diahkomalasarinpm/minus-expedita-alias@diahkomalasarinpm/minus-facere-explicabo@diahkomalasarinpm/modi-corporis-incidunt@diahkomalasarinpm/modi-debitis-consectetur@diahkomalasarinpm/modi-dolorum-voluptate@diahkomalasarinpm/libero-consequatur-sequi@diahkomalasarinpm/magnam-officiis-eveniet@diahkomalasarinpm/maiores-voluptate-culpa@diahkomalasarinpm/iusto-dolor-esse@diahkomalasarinpm/laborum-dicta-velit@diahkomalasarinpm/laborum-tenetur-ipsa@diahkomalasarinpm/laudantium-in-magnam@diahkomalasarinpm/libero-adipisci-recusandae@diahkomalasarinpm/laboriosam-consequatur-voluptatem@diahkomalasarinpm/dolorem-quod-ex@diahkomalasarinpm/doloremque-nesciunt-natus@diahkomalasarinpm/deserunt-velit-voluptatibus@diahkomalasarinpm/delectus-nesciunt-dolorem@diahkomalasarinpm/delectus-suscipit-tenetur@diahkomalasarinpm/culpa-rem-accusamus@diahkomalasarinpm/cum-quo-deleniti@diahkomalasarinpm/cumque-accusamus-illo@diahkomalasarinpm/omnis-molestiae-reprehenderit@diahkomalasarinpm/omnis-quibusdam-asperiores@diahkomalasarinpm/omnis-velit-nemo@diahkomalasarinpm/pariatur-animi-ducimus@diahkomalasarinpm/praesentium-veritatis-quam@diahkomalasarinpm/provident-deleniti-ullam@diahkomalasarinpm/quae-dolorum-soluta@diahkomalasarinpm/quis-esse-vel@diahkomalasarinpm/quis-ex-ad
1.0.0

12 days ago