1.0.0 ā€¢ Published 12 days ago

@f1stnpm2/ducimus-incidunt-natus v1.0.0

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

@f1stnpm2/ducimus-incidunt-natus šŸ”¬šŸ’„

GitHub Actions Workflow Status types npm bundle size NPM Downloads

@f1stnpm2/ducimus-incidunt-natus is a tiny, widely-supported, zero-dependency alternative to invariant.

@f1stnpm2/ducimus-incidunt-natus - when every byte counts!

What is invariant?

An invariant function takes a value, and if the value is falsy then the invariant function will throw. If the value is truthy, then the function will not throw.

import invariant from '@f1stnpm2/ducimus-incidunt-natus';

invariant(truthyValue, 'This should not throw!');

invariant(falsyValue, 'This will throw!');
// Error('Invariant violation: This will throw!');

Why @f1stnpm2/ducimus-incidunt-natus?

The library: invariant supports passing in arguments to the invariant function in a sprintf style (condition, format, a, b, c, d, e, f). It has internal logic to execute the sprintf substitutions. The sprintf logic is not removed in production builds. @f1stnpm2/ducimus-incidunt-natus has dropped all of the code for sprintf logic and instead encourages consumers to leverage template literals for message formatting.

invariant(condition, `Hello, ${name} - how are you today?`);

Error Messages

@f1stnpm2/ducimus-incidunt-natus allows you to pass a string message, or a function that returns a string message. Using a function that returns a message is helpful when your message is expensive to create.

import invariant from '@f1stnpm2/ducimus-incidunt-natus';

invariant(condition, `Hello, ${name} - how are you today?`);

// Using a function is helpful when your message is expensive
invariant(value, () => getExpensiveMessage());

When process.env.NODE_ENV is set to production, the message will be replaced with the generic message Invariant failed.

Type narrowing

@f1stnpm2/ducimus-incidunt-natus is useful for correctly narrowing types for flow and typescript

const value: Person | null = { name: 'Alex' }; // type of value == 'Person | null'
invariant(value, 'Expected value to be a person');
// type of value has been narrowed to 'Person'

API: (condition: any, message?: string | (() => string)) => void

  • condition is required and can be anything
  • message optional string or a function that returns a string (() => string)

Installation

# yarn
yarn add @f1stnpm2/ducimus-incidunt-natus

# npm
npm install @f1stnpm2/ducimus-incidunt-natus --save

Dropping your message for kb savings!

Big idea: you will want your compiler to convert this code:

invariant(condition, 'My cool message that takes up a lot of kbs');

Into this:

if (!condition) {
  if ('production' !== process.env.NODE_ENV) {
    invariant(false, 'My cool message that takes up a lot of kbs');
  } else {
    invariant(false);
  }
}

Your bundler can then drop the code in the "production" !== process.env.NODE_ENV block for your production builds to end up with this:

if (!condition) {
  invariant(false);
}

Builds

  • We have a es (EcmaScript module) build
  • We have a cjs (CommonJS) build
  • We have a umd (Universal module definition) build in case you needed it

We expect process.env.NODE_ENV to be available at module compilation. We cache this value

That's it!

šŸ¤˜

unicodeincludescallstatelessmochamovejsdifffunctionallintparseaccessorcolorsreact animationbrowserlistcolumnRxJSl10nthroatSymbol.toStringTagtypanionHyBibundlingexecflatparentstestingserializeurlstypeerrorprotobufsearchwriteextensionpreprocessortostringtagindicatortoStringTageslintconfigchromiumbannerrecursivepropertiespositiveterminalWebSocketsbrowserhelpersargsclassnameartshrinkwrapsameValueZeroreducerECMAScript 2020StyleSheet3dUnderscoreviewchinesetraverseformcompareObject.assignutil.inspectInt16Arrayfind-upfastifyscheme-validationtypedarraysharmonyxdg-openfilehigher-orderschemachannelPushcode pointsnegativeBigInt64ArrayES2019lessECMAScript 3listenerskoreanxhrformattingFloat32ArrayYAMLisConcatSpreadableruntimeduplexspringjsonschemahardlinksglobtrimLeftarrayswidthrmdirconfigurablebootstrap cssexitECMAScript 2022json-schema-validationvariableseventDispatcherfindupInt32ArraybusyMapStreamrequirereduxjavascriptless.jslimitedcharacterString.prototype.trimcolorassertioncircularECMAScript 2018openerreadfindLastIndexescapedeep-copypropflattenworkspace:*dateUint8Array_.extendauthenticationconnectbcryptqueueMicrotaskuuidnodevariables in csslrupurestdlibvalueauthESnextObject.keyscallboundwatcherArray.prototype.containsES5inputcss nestingutilityreadablestreamequalityinterruptsfolderstringcontainsposeargparselengthinternalavapackageform-validationpreserve-symlinkses7mime-dbcharactersstyled-componentsregularwgetsharedtesterRFC-6455coretrimObject.issliceloggingframeworkpyyamlconcurrencyasciioperating-systemjson-schemapicomatchlooktapelectronanimationArrayfseventsecmascriptjson-schema-validatorECMAScript 2016karmaiterateexit-codeastwarningArray.prototype.findLastmatchnodejsfpcollectionpropertyapisuperstructawaithttpRegExp#flagshashairbnbhandlersspeedstringifyrobustes8css lessoptimizerclientreal-timeloadingchromesortmimetypescssfunctionprivateeslintpluginpostcssspecgradients css3Promiseprotocol-bufferscall-boundlimitreadablevisualtestES2023regular expressionsetes-shimsmapdiffstreamsoptionmixinsrm -rfwrapslotemitES2018IteratorUint16ArraygetfetchdebugeslinttakestyleURLprogressperformanceopenvaluesfilterECMAScript 7environmentutilsrangeerrorstylesheetrequestjsdomES2020emojiasyncphoneerror-handlinggdprcreatesanitizationqueueObject.entriesless csscallbindWebSocketconsumereusestringifiercryptofantasy-landuser-streamsflagsURLSearchParamsReactiveExtensionssanitizecss-in-jscorscallbackes2016zeroworkerapptsmimeECMAScript 6formskeyspopmotionassertsomeequalwatchingrm -frfullwidthponyfillfast-clonelinuxjQuery256querystringhooksAsyncIteratornopereact-hook-formtypeoflinkjsonpathRxxss0signalsexecutablemkdirinstallerstreamtranspilesorteddirectorycore-jsframerstyleswhatwggroupcollection.es6ObjectpolyfillmiddlewareECMAScript 5cjkmruresolvetrimStartbufferInt8ArraybddECMAScript 2023promisesjoimkdirpveststructuredCloneObservabletaskgraphqldroppluginmulti-packageprototypeFloat64ArraycompilersymbolsshebangjwtinspectzodmonorepoECMAScript 2019deepclonemodulesimmerislook-uptypesafesyntaxomitmatchessignaltrimEndvalidatetoucharraybuffergetoptguidexpressjesttypedcommanderutilassignjsxwebsiteCSSbyteLengthlibphonenumbergradients cssgetOwnPropertyDescriptorwaitoptimistcolumnswordwrapfile systemless mixinsmakecachefromes6copyES2021bindbyteOffsetencryptionReactiveXBigUint64Arrayassertsyupsyntaxerrorspinnerscompile lessmatchAllawesomesaucewalkArray.prototype.flatiteratorfull-widthmergelesscssuninstallwalkingECMAScript 2021toobjectwatchFileStreamsCSSStyleDeclarationfixed-widthtypescriptclass-validatorobjfast-deep-copyArrayBuffer.prototype.sliceTypeBoxirqbytefastramdahttpsprocessstableJSON-Schemaerrorcoercibleio-tsdom-testing-libraryi18nbrowserslistjasminesequencefsfast-copysetPrototypeOfconcatMapdescriptoridleestreetslibthreetoolsautoprefixerwhichJSONeventEmittersetImmediaterandomsettingsSetdayjsvalidatortypedarrayObservablesArray.prototype.includesfulllockfileclispinneropensxdgtyped arrayquoteshimprefixtoolkiteveryxtermargumentsfastclonees2017persistentnpmString.prototype.matchAllrfc4122breakrgbwebupregexparserdirconfigaccessibilityapollostatustrimRightreact6to5es-abstractnameserializationentrieslanguageES7esttyUint8ClampedArrayextendmacoseventseast-asian-widthdotenvboundmoduleArray.prototype.filterlastdeepcopyfindurlcss variableinstall$.extendTypeScriptyamlcurlnested cssObject.getPrototypeOflazytimehasstylingconcatnumberbatchajaxObject.definePropertySymbolES2017deepes-shim APIstarterprunees2015passwordprettyclassnamespnpm9ESReflect.getPrototypeOfObject.fromEntriesgroupBymkdirsES2016serializerless compilervalidationpackage.jsonlogarraytypespathobjectfindLastimportcommandwindowsbootstrap lessfigletchaienumerablelinewraprapidwaapisigintdataViewshelldependency managersharedarraybufferpostcss-pluginObject.valueseslint-pluginjsonextrareact-testing-libraryinvariantvalidWeakMapWeakSetsettercall-bindnegative zerodomgenericsmobileutilitiesschemepackagesgetPrototypeOfgetintrinsicclonedescriptiongesturesweaksetcodesoffsetratelimitonceclasseswritableinternal slotTypedArrayforEachpoint-freeimmutable[[Prototype]]metadataUint32ArraypushhookformsymbolgetterenderES3toArraypatchArray.prototype.findLastIndexArrayBuffertermes5react-hooksmake dira11ybufferssaferedux-toolkitremoveeditoransiiterationreduce__proto__functionsdataviewregexppipeintrinsicshamsidevardeep-cloneECMAScript 2015ieparentdebuggerbabeles2018private datasuperagentfastcopyexpressionRegExp.prototype.flags.envstarttelephonebundlerprotosymlinksletthrottlepromisequerylaunchregular expressionsFunction.prototype.namenamesexeECMAScript 2017flagmomentsigtermtapeweakmapjapanesedragargvES2022inferencetacitArrayBuffer#slicetranspilerspawndefinePropertyredact-0ajvES8MicrosoftminimalflatMaptoSortedbabel-corewatchdatastructurecurriedsymlinkefficientcensordescriptorstextdataconstcryptArray.prototype.flatMapcmdcheckES2015keyhasOwnjsreact posepackage managertc39envrmArray.prototype.flattenloggerdependencieswordbreakcolourarktypenativetypedefaultqschild@@toStringTagcommand-linestyleguidetddcomputed-typesdeterministicdefinefast-deep-cloneargumentratebluebirdES6outputstreams2delete
1.0.0

12 days ago