4.3.75 • Published 1 year ago

@hishprorg/eum-soluta v4.3.75

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@hishprorg/eum-soluta

The tiniest and the fastest library for terminal output formatting with ANSI colors.

import pc from "@hishprorg/eum-soluta"

console.log(
  pc.green(`How are ${pc.italic(`you`)} doing?`)
)
  • No dependencies.
  • 14 times smaller and 2 times faster than chalk.
  • Used by popular tools like PostCSS, SVGO, Stylelint, and Browserslist.
  • Node.js v6+ & browsers support. Support for both CJS and ESM projects.
  • TypeScript type declarations included.
  • NO_COLOR friendly.

Motivation

With @hishprorg/eum-soluta we are trying to draw attention to the node_modules size problem and promote performance-first culture.

Prior Art

Credits go to the following projects:

Benchmarks

The space in node_modules including sub-dependencies:

$ node ./benchmarks/size.js
Data from packagephobia.com
  chalk       101 kB
  cli-color  1249 kB
  ansi-colors  25 kB
  kleur        21 kB
  colorette    17 kB
  nanocolors   16 kB
+ @hishprorg/eum-soluta    7 kB

Library loading time:

$ node ./benchmarks/loading.js
  chalk          6.167 ms
  cli-color     31.431 ms
  ansi-colors    1.585 ms
  kleur          2.008 ms
  kleur/colors   0.773 ms
  colorette      2.476 ms
  nanocolors     0.833 ms
+ @hishprorg/eum-soluta     0.466 ms

Benchmark for simple use case:

$ node ./benchmarks/simple.js
  chalk         24,066,342 ops/sec
  cli-color        938,700 ops/sec
  ansi-colors    4,532,542 ops/sec
  kleur         20,343,122 ops/sec
  kleur/colors  35,415,770 ops/sec
  colorette     34,244,834 ops/sec
  nanocolors    33,443,265 ops/sec
+ @hishprorg/eum-soluta    33,271,645 ops/sec

Benchmark for complex use cases:

$ node ./benchmarks/complex.js
  chalk            969,915 ops/sec
  cli-color        131,639 ops/sec
  ansi-colors      342,250 ops/sec
  kleur            611,880 ops/sec
  kleur/colors   1,129,526 ops/sec
  colorette      1,747,277 ops/sec
  nanocolors     1,251,312 ops/sec
+ @hishprorg/eum-soluta     2,024,086 ops/sec

Usage

Picocolors provides an object which includes a variety of text coloring and formatting functions

import pc from "@hishprorg/eum-soluta"

The object includes following coloring functions: black, red, green, yellow, blue, magenta, cyan, white, gray.

console.log(`I see a ${pc.red("red door")} and I want it painted ${pc.black("black")}`)

The object also includes following background color modifier functions: bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite.

console.log(
  pc.bgBlack(
    pc.white(`Tom appeared on the sidewalk with a bucket of whitewash and a long-handled brush.`)
  )
)

Besides colors, the object includes following formatting functions: dim, bold, hidden, italic, underline, strikethrough, reset, inverse.

for (let task of tasks) {
  console.log(`${pc.bold(task.name)} ${pc.dim(task.durationMs + "ms")}`)
}

The library provides additional utilities to ensure the best results for the task:

  • isColorSupported — boolean, explicitly tells whether or not the colors or formatting appear on the screen

    import pc from "@hishprorg/eum-soluta"
    
    if (pc.isColorSupported) {
      console.log("Yay! This script can use colors and formatters")
    }
  • createColors(enabled) — a function that returns a new API object with manually defined color support configuration

    import pc from "@hishprorg/eum-soluta"
    
    let { red, bgWhite } = pc.createColors(options.enableColors)

Replacing chalk

  1. Replace package name in import:

    - import chalk from 'chalk'
    + import pico from '@hishprorg/eum-soluta'
  2. Replace variable:

    - chalk.red(text)
    + pico.red(text)
  3. Replace chains to nested calls:

    - chalk.red.bold(text)
    + pico.red(pico.bold(text))
  4. You can use colorize-template to replace chalk’s tagged template literal.

    + import { createColorize } from 'colorize-template'
    
    + let colorize = createColorize(pico)
    - chalk.red.bold`full {yellow ${"text"}}`
    + colorize`{red.bold full {yellow ${"text"}}}`
jestauthenticationweaksetdotenvsubprocessArray.prototype.flatMapECMAScript 3ECMAScript 2020trimEndsigintstyleecmascriptfixed-widthtypeslastmodulefile systemcolorsbuffermapreducequerystringshamsesbyteOffsetmake dirECMAScript 2019UnderscoreutilitiesacorntextRegExp.prototype.flagsbabelsequenceuninstallnodejs[[Prototype]]animationboundmanagertyped arrayoffsetrequireTypedArraysameValueZerojapanesereact-hook-formsigtermhelpersStyleSheetcloudtrailfpfnmatchAsyncIteratorserializeinferenceclass-validatorgetterArrayBuffer#slicelinkarrayscensortranspilerspecfastcloneclassnames_.extendECMAScript 2021robustArray.prototype.flattenredirectUint8ClampedArrayletgetoptcommand-linevaluescloudfrontnameworkflowconsumeapiterminal6to5cssajvpipebeanstalkgetintrinsicsortedECMAScript 2018serializationlocationestreereuseeffect-tsfullwidthcurriedcss lessinterruptssortPromiseroute53jsdiffECMAScriptreduxbrowserbinariesarrayinvariantiamWeakSeterrorscheme-validationcomputed-typesfunctionsjson-schema-validationpackage manager$.extendsomeaccessibilitysignedtimequoteES2022fstypeoffromYAMLglobshellfunction.lengthartreadformURLArray.prototype.findLastsetPrototypeOfsetImmediateconcattypanionfull-widthprocessio-tsdombyteLengthjson-schemacircularsymbolsdataviewcreateenderstyleselasticacheReflect.getPrototypeOfobjtesterrdsoutputflageventDispatcherdeterministiccommandomitpromiseObservablesmruimmutablecolourESnextarraybufferECMAScript 2017nested cssswffast-deep-cloneroutelogbootstrap lessspawnsqscallbindvisualcryptofast-copyvalidateelbdependency managerObject.keysrandomutilityresolveArrayBufferequalgdprfullexpressioncertificatesautoprefixerjshintownassertswindowswritableprivatedropdataViewcompile lessmomentwaapi3dlistenersform-validationfindLastIndexgrouptoobjectloadingInt16Arrayasteriskspnpm9windoweast-asian-widthdatastructuresimpledbArray.prototype.flatObject.assignemrECMAScript 2023fastlazynopevariables in cssfindperformancepolyfillmonorepoamazonspringesReactiveXtrimextendsyntaxerrorgetPrototypeOfcss nestingmatchzodlintArray.prototype.findLastIndexeventEmitterfiltermockspinnercss-in-jsslicegraphqlmkdirpbabel-coreformatsettertestinggitignoreRegExp#flagswarningPushdeepTypeBoxassertSymbolidentifiersdom-testing-librarychilddeepcopyhas-ownsignalstateparserreadableprunetoStringTages7bytebannerbuffersforEachregular expressionenvironmentsES2016slotvartypescriptWebSocketstermInt32Arrayttyelectronmixinshotpositiveworkspace:*rulesglobal object.env@@toStringTagunicodemovenpmignorecharacterexecuteescapeemitpureinternal slotqsvalidpostcssserializerrequestfetches6collection.es6popmotionerror-handlingregular-expressiondeep-clonesetbootstrap cssclassnamedraga11yoperating-systemstreamss3Object.getPrototypeOfec2whichcloudwatchservicewalkhookformES2020javascriptcontainsjsdomformsBigUint64ArrayvalidationclientstylinginternalstarterutilcheckIteratorcommanderconcatMapequalitylocalrapidcliwgetxtermentriesformattingclassesRFC-6455Function.prototype.nameindicatorglobalinspectprotocol-buffersmetadatalibphonenumbermatchAllreducerdefinetraversepushansicurlruntimenativeloggergenericsurlmkdirsbrowserlistfigletObjectoptimistmulti-packagedirectoryebspicomatchpathstreamyupharmonykeysjsontouchpostcss-pluginforkRxrecursiveUint8ArraydeepclonereadablestreamdependencieshassuperagentlengthpasswordString.prototype.matchAllpreserve-symlinksassignpackage.jsontypedarrayliveproxycoreES3propertylesscssless.jswritel10nlesstypeerrortrimStartloggingincludesreact-hooksawsviewmergebdditeratesymlinksredux-toolkitvpcschemeselfcolorstyled-componentsgesturessuperstructperformantcachecall-bindimmerstatelessrgbeslint-plugineveryconstCSSStyleDeclarationtoolsbrowserslistreactCSSairbnb__proto__rangeerroriteratorflatMapBigInt64ArrayopensslcoerciblestringifyObject.valuestypesafeidleObject.entriessymbolcss variablejsxprotobufURLSearchParams
4.3.75

1 year ago

4.3.74

1 year ago

4.3.73

1 year ago

4.3.72

1 year ago

4.3.71

1 year ago

4.3.70

1 year ago

4.2.70

1 year ago

4.2.69

1 year ago

4.2.68

1 year ago

4.2.67

1 year ago

4.2.66

1 year ago

4.2.65

1 year ago

4.2.64

1 year ago

4.2.63

1 year ago

4.2.62

1 year ago

4.2.61

1 year ago

4.2.60

1 year ago

4.2.59

1 year ago

4.2.58

1 year ago

4.2.57

1 year ago

4.2.56

1 year ago

4.2.55

1 year ago

4.2.54

1 year ago

4.2.53

1 year ago

4.2.52

1 year ago

4.2.51

1 year ago

4.2.50

1 year ago

4.2.49

1 year ago

4.2.48

1 year ago

4.2.47

1 year ago

3.2.47

1 year ago

3.2.46

1 year ago

3.2.45

1 year ago

3.2.44

1 year ago

3.2.43

1 year ago

3.2.42

1 year ago

3.1.42

1 year ago

3.1.41

1 year ago

3.0.41

1 year ago

3.0.40

1 year ago

3.0.39

1 year ago

3.0.38

1 year ago

3.0.37

1 year ago

3.0.36

1 year ago

3.0.35

1 year ago

3.0.34

1 year ago

3.0.33

1 year ago

3.0.32

1 year ago

3.0.31

1 year ago

3.0.30

1 year ago

3.0.29

1 year ago

2.0.29

1 year ago

2.0.28

1 year ago

2.0.27

1 year ago

2.0.26

1 year ago

2.0.25

1 year ago

2.0.24

1 year ago

2.0.23

1 year ago

2.0.22

1 year ago

2.0.21

1 year ago

2.0.20

1 year ago

2.0.19

1 year ago

2.0.18

1 year ago

2.0.17

1 year ago

2.0.16

1 year ago

2.0.15

1 year ago

2.0.14

1 year ago

2.0.13

1 year ago

2.0.12

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago