2.3.36 • Published 1 year ago

@kollorg/sed-laboriosam-unde v2.3.36

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

BaseErr

A solid BaseError class that supports custom properties and wrapping errors

Installation

npm i --save @kollorg/sed-laboriosam-unde

Usage

Create a custom error class

import BaseError from '@kollorg/sed-laboriosam-unde'

class CustomError extends BaseError {}

const err = new CustomError('boom')
console.log(err.name // 'CustomError'
console.log(err.stack)
// CustomError: boom
//     anonymous (filename:5:17)

Wrap an error with a custom error class

import BaseError from '@kollorg/sed-laboriosam-unde'

class CustomError extends BaseError {}

try {
  throw new Error('pow')
} catch (_err) {
  const err = CustomError.wrap('caught error', _err)
  console.log(err.stack)
  // CustomError: caught error
  //     anonymous (filename:8:17)
  // ----
  // Error: pow
  //     anonymous (filename:6:9)
}

Wrap an error with a custom error class in promise chain

import BaseError from '@kollorg/sed-laboriosam-unde'

class CustomError extends BaseError {}

Promise.reject(new Error('pow')).catch((err) =>
  CustomError.wrapAndThrow('caught error', err),
)
// rejects with:
// CustomError: caught error
//     anonymous (filename:6:3)
// ----
// Error: pow
//     anonymous (filename:5:16)

Create custom error instance with data properties

import BaseError from '@kollorg/sed-laboriosam-unde'

class CustomError extends BaseError {}

const err = new CustomError('boom', { foo: 10, bar: 20 })
console.log(err.foo) // 10
console.log(err.bar) // 20
console.log(err.stack)
// CustomError: boom
//     anonymous (filename:5:17)
// {
//   "foo": 10,
//   "bar": 20
// }

// TypeScripters use BaseError.create if you want to access extended properties with proper typing:
const err = CustomError.create('boom', { foo: 10, bar: 20 })
console.log(err.foo) // 10
console.log(err.bar) // 20

Create custom api client with robust error handling

import BaseError from '@kollorg/sed-laboriosam-unde'

class FetchError extends BaseError {}
class ResponseError extends BaseError {}
class ApiError extends BaseError {}

class ApiClient {
  getData() {
    const url = 'https://localhost:3000'
    try {
      const res = await Promise.race([
        timeout(2000).then(() => {
          throw new TimeoutError('request timed out', { statusCode: 504, url })
        }),
        fetch(url).catch(
          FetchError.wrapAndThrow('network error', { statusCode: 503, url }),
        ),
      ])
      if (res.statusCode !== 200) {
        throw new ResponseError('status: ${res.statusCode}', {
          statusCode: res.statusCode,
          url,
        })
      }
      return await res.json()
    } catch (err) {
      throw ApiError.wrap(err, { url, statusCode: err.statusCode || 500 })
      // ApiError: boom
      //     anonymous (filename:row:col)
      // {
      //   "url": 'https://localhost:3000',
      //   "statusCode": 504
      // }
      // ----
      // TimedoutError: request timed out
      //     anonymous (filename:row:col)
      // {
      //   "url": 'https://localhost:3000',
      //   "statusCode": 504
      // }
    }
  }
}

Checkout the tests for more examples..

License

MIT

swfECMAScript 3byteLengthisargumentboundfindup@@toStringTagcurlmatchessearchtoobjectapisyntaxerror-handlingdebuggroupByfind-upnested cssinternal slotprivate datauppreserve-symlinkserrorlistenerscoerciblepositiveloggertapES5eventDispatcherstylegettercharactervalidationassertgraphqljwtsettingslook-upfindspeedsimpledbhardlinksfast-copyviewextensionCSSStyleDeclarationfull-widthhasOwnPropertyMicrosoftArray.prototype.flattenhookformcss-in-jsthroatmappropequalObject.assignconcatfixed-widthcall-boundmodulesObject.fromEntriesAsyncIteratorjasmineformsformattingcacheES2021typeStreamnativeES2023installerprogressReactiveXInt32ArrayshellimportspinnertouchconnectsetPrototypeOfdependency managerreact-hook-formwatchjesttscharacterssequencejsonsignalstrimRightreadableInt8Arrayzodglobextendwindowsexecworkspace:*ratelimitgetOwnPropertyDescriptorimmerttyeventEmitteraccessibility_.extenddirectoryes8mixinsassertionjQuerywritePushtypedarrayterminalchinesesqsES2015ajvlessquotelinknegative zerogetprettyapollocolumncryptopropertytypedtoolsinutil.inspectpromisesenderstdlib$.extendUint8Arraycolumnsrm -frmoduleUint8ClampedArraytimeperformancejsdomjavascriptmonorepostyled-componentstaskes6scheme-validationcloudsearchReflect.getPrototypeOfes5keysortbuffersgroupfast-deep-clonetoolkitbusyES6es7ES3streams2ESsesArray.prototype.containsdayjsclonenamescloudformationdescriptiontaperegulardateiesafeECMAScript 2023dotenvxhrbyteOffsetdefinePropertyprivatebatchconsolepredictabletraversewatcherelmprunethrottlebufferworkflowrangeerrorfilterdeepcopyeslint-pluginsymlinksqueueMicrotaskmiddlewarefullwidthexpresspatchtslibtc39awsoptimizercss nestingarktypestylingasciitestmatchbundlerdroppropertiestddexitRxJSJSONdeepclonecensores2018protobuftyped arrayi18ndiffreact-testing-librarymoveES2017passwordlibphonenumbereslintpluginflatMappipereducermdirminimalprocessless compilercopymkdirUint16Arrayl10nSetECMAScript 7ES2016browseromitObject.entriesbannercss variablelinuxcomparehashfetchperformantprotocol-buffersArrayBuffer.prototype.slicereadschemeiteratejsdiffSymbolbrowserlisthasOwnlengthpnpm9descriptorsgetoptlazyinternalsideinspectgetPrototypeOfestreereactes2016codesInt16ArrayECMAScript 5fast-cloneecmascriptnegativeregular expressionponyfillcompilerRFC-6455wordbreakstateregexpreal-timedataviewrdsRegExp.prototype.flagssortedECMAScript 2015idleschemakeysdatasuperagentsetterECMAScript 2020awaitES2020weaksetclioptimistfastifyslotnodejsTypeScriptopenObject.valuesECMAScript 2018resolvecloudtrailbreaktrimLefthas-ownwatchFileassertsJSON-SchemalruUnderscoreserializeinstallstatustakerapidhttpssigintquerynpmPromisesignalebsdirloadbalancingutilityArray.prototype.filtercreateString.prototype.matchAllpostcsstypescriptES7WebSocketsObject.definePropertypersistentcircularshimexit-codeFunction.prototype.namejsonpathxtermairbnbeslintconfigdependenciesclassesrobustIteratorfunctionschromiumreact-hooksArrayBuffer#slicesnswafenvironmentfindLastes-shim APIhttpsyntaxerrorURLconfigurlliveparseESnextmimestartershebangtrimEndtelephonezeropromisestreamsclientdeletecolorsnumberfluxstringifyformatvariablesjssliceargvec2toStringTagstreamrequestasyncsuperstructarraybuffermochaArrayBufferYAMLlogcjkmacosloadingirqutilitiesrecursivewordwrapencryptionECMAScript 2019BigUint64Array0lesscssredux-toolkittermava256getintrinsicpyyamlcallRegExp#flagscore-jstrimmatchAllsymlinkWeakMapsymbolspackagesstringreducerreusewalkroute53s3astsharedarraybufferautoscalingFloat32ArrayreadablestreamprefixtypesafepluginclassnameswgetrandomArrayfilemulti-packagewalkingdefineequality[[Prototype]]RxiteratorHyBiownwrapvpcreduxajaxparentarraysdescriptoreveryserializerfastsharedcolourtoArrayfolderrm -rfmkdirpECMAScript 2017guiddynamodbcloudfrontmkdirsconcurrencyfindLastIndexFloat64Arrayrequireprototypedom-testing-libraryfromsameValueZerowritablemake dires-shimspreprocessorcommandfunctiongenericsbcryptlanguageauthReactiveExtensionsUint32ArraytypesObjectexpressionyuplastshrinkwrapcsseslinthasString.prototype.trimcoreinferencenameforEachcontainsbddindicatormergeSymbol.toStringTagcorsdatastructuretypanionArray.prototype.findLastcheckcode pointsoperating-systemrateaccessorvalidateObject.keys
2.3.28

1 year ago

2.2.17

1 year ago

2.3.27

1 year ago

2.2.18

1 year ago

2.3.29

1 year ago

2.2.16

1 year ago

2.3.24

1 year ago

2.3.23

1 year ago

2.3.26

1 year ago

2.3.25

1 year ago

2.3.20

1 year ago

2.3.22

1 year ago

2.3.21

1 year ago

2.3.19

1 year ago

2.3.18

1 year ago

2.3.35

1 year ago

2.3.34

1 year ago

2.3.36

1 year ago

2.3.31

1 year ago

2.3.30

1 year ago

2.3.33

1 year ago

2.3.32

1 year ago

2.2.15

1 year ago

2.2.13

1 year ago

2.1.12

1 year ago

2.2.14

1 year ago

2.2.12

1 year ago

2.1.11

1 year ago

2.0.11

1 year ago

2.0.10

1 year ago

2.0.9

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