1.0.0 ā€¢ Published 14 days ago

@landmineaknpm/totam-maxime-soluta v1.0.0

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

@landmineaknpm/totam-maxime-soluta šŸ”¬šŸ’„

GitHub Actions Workflow Status types npm bundle size NPM Downloads

@landmineaknpm/totam-maxime-soluta is a tiny, widely-supported, zero-dependency alternative to invariant.

@landmineaknpm/totam-maxime-soluta - 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 '@landmineaknpm/totam-maxime-soluta';

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

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

Why @landmineaknpm/totam-maxime-soluta?

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. @landmineaknpm/totam-maxime-soluta 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

@landmineaknpm/totam-maxime-soluta 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 '@landmineaknpm/totam-maxime-soluta';

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

@landmineaknpm/totam-maxime-soluta 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 @landmineaknpm/totam-maxime-soluta

# npm
npm install @landmineaknpm/totam-maxime-soluta --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!

šŸ¤˜

eslint-pluginES2023fullkarmafastifymodulesenumerabledragtrimRightless csssymlinkwaitbyteLengthclierrorurlsfast-deep-copypnpm9cssimmutableresolveassertionperformantterminalloadingtrimStarthasOwnwarningunicodesortedtypedRxJSstylefunctionaljson-schema-validationsharedarraybuffernegative zerohasdeepchaibundlerwatchingObject.entriesArray.prototype.includesinputpersistentoptionprettyextraharmonyUnderscoreprefixsymlinksflatsettermaphigher-orderflagstypedarrayponyfillgetOwnPropertyDescriptorpipelistenersvaluespinnersECMAScript 2020npmcircularweakmap__proto__symbolsUint32Arrayispopmotionlessfolderescodesreducercolorregular expressionsenvironmentkoreanconcaterror-handlingReactiveXfind-uptrimLeftURLparservariables in cssdescriptionES2021ArrayBuffernegative[[Prototype]]mime-dbsyntaxutilitiesfullwidthglobsymboleslintconfigconfigurablenodejsES8mkdirp_.extendCSSmake dirmatchestypeerrorInt16ArrayslicecjkcallvalidationESFloat64ArraybyteOffsetYAMLclassesarraybufferCSSStyleDeclarationlinkstringJSONwordwrapObject.getPrototypeOfsignalreadablestreamdomasyncescapeserializerbluebirdvariablesbindposechromiumstyleguideES2015prunejsdomECMAScript 2019testequalenderwindowsvalidatortermreactmetadatawalkdeep-clonedescriptorfast-deep-cloneassertscallbindsuperstructfile systemlengthauthenticationECMAScript 5xssjavascriptjson-schema-validatorzerogesturesES2019iteratorObject.valuesObject.isemitsearchcommand-lineSymboldotenvjQueryArray.prototype.flatcryptoargsanimationrateTypeBoxinterruptsvestflagansiisConcatSpreadablefull-widthopensimmerlinttoobjectfetchtoolsvalidatesuperagentbootstrap lessenvWebSocketsgenericsObservablesminimalfunctionpureparentsjasmineobjcorscommanderajaxfsString.prototype.trimpasswordtextFloat32ArrayTypedArraygetoptless compilerhttpsgetintrinsicReactiveExtensionsbddprivateless mixinsjsxcmdredactsequenceinvarianturlbannerweaksetlinewrapwidthmimetypesnameRFC-6455callboundstylinglibphonenumberavaobjectwritableremovetapajvutilsserializeargumenttypescripttypedarraysthreeHyBies6optimizerwebsitekeyworkerObject.keyspositivegroupByclonenamessanitizeES5validBigInt64ArraybundlingsortcheckdateeventDispatcherdirectorybusybabel-coretypanionUint8ClampedArrayimport6to5ECMAScript 2018fixed-widthform-validationinstallwrapcensorqueryvaluesslotbrowserslistcryptrecursiveprotobufexpresswaapijoidataexitcss lessTypeScriptjsdiffelectrontimeidletc39languagebrowserlistserializationexecstatus0concurrencyargparseInt8Arrayonceaccessibilitymru.envfantasy-landES2020getPrototypeOfforEachoperating-systemstatelessassigneslintes2018finduplazymochaguidtypeofWeakMapintrinsicpolyfillspinnerparsesameValueZeroInt32Arrayreal-timeObject.fromEntriesi18nArray.prototype.findLastrmdircomparelogcss-in-jsauthdebugconfigdom-testing-libraryfastcopyWebSocketmixinslaunchcode pointsoutputschemechromewriteURLSearchParamsapolloyupbootstrap cssdependency managerclassnamesextendsafejson-schemaecmascript3dmobilesanitizationStreamworkspace:*setPrototypeOframdasigtermargumentsjwtcurlmonorepocolumnsincludesqueuepropertyes-abstractframerObject.definePropertyairbnbio-tsduplexprivate dataconsoleexeArrayBuffer.prototype.sliceArray.prototype.findLastIndexautoprefixermergephonereact-hookstoSortedformattyped arrayrapidpostcssconststreamspropertiesreact animationarktypedebuggerlinuxpackage managerESnext256StyleSheetcore-jses2016quotepreprocessormimearraybrowsercontainsprocessgradients cssUint16Arrayreusewebtrimstylesheetspawnrfc4122internal slotwordbreakappoffsetrangeerrorwalkinga11yomitSymbol.toStringTagfastclonerequireeventEmittertddspeedexit-codemiddlewarezodgetObservableStreamsArray.prototype.flattenhelperslimitnodearraysparentiterateObjectcommandwgetsetImmediatextermpromisebytegradients css3batchwhatwgyamlhooksboundsigint@@toStringTageventsdescriptorsstartpicomatchstarterfileuninstallmodulewatchspecfindLastIndexnumberfast-clonecolumnUint8ArraydefinergbqueueMicrotaskfindLastupstringifiergraphqlJSON-SchemaletlockfiletypeflatMapsideuser-streamsrmreact-hook-formmatchAllpackagesmatch-0ECMAScript 7filtercollection.es6stdlibstringifymulti-packageinstallerexpressiontaskstablecompile lessperformancewhichinspectdeterministicECMAScript 6typesafeES2017finddataviewsomees5Array.prototype.containsproppushdeep-copychannelsetqsastprotofast-copyformattingtouchhardlinksdayjsshamirqclassnameschemaECMAScript 3testingpromisessharedcharactersprotocol-buffersES6eslintpluginshelltstoStringTagtrimEndES2018utildeepclonetostringtagRegExp#flagscollectioneast-asian-widthsyntaxerrorreadxdg-openECMAScript 2022prototypecopyrm -rfdatastructureconcatMapthrottlehttptacituuidhookformnativeratelimitArrayBuffer#sliceopenerArray.prototype.filterjsonpathpreserve-symlinkspath
1.0.0

14 days ago