Network Performance Monitor

    TypeScript icon, indicating that this package has built-in type declarations

    1.1.2 • Public • Published


    Build PR/Master

    Boring project components.


    npm install --save @btilford/ts-base-node
    npm install --save @btilford/ts-base-browser


    Examples can be found here



    Extra features and configurability for logging. By default uses Console but with node can also use a stream.Writable for stdout and stderr output.

    • Configure default LogLevel
    • Configure and register a root Log
    • Log.extend creates a new Log extending it's name and any configuration not overridden.
    • Log.copy creates a new Log instance sharing the configs that were not overridden but does not inherit naming like Log.extend does.
    • You can add Interceptors to your LogConfig to perform additional tasks on log messages. In the node module there is an interceptor for Stackdriver and Datadog that can be combined with a FilterLogMessage to send critical messages.
    • In your LogConfig you can provide a Context function to supply additional properties to make available in a MessageTemplate.
    • You can configure a MessageTemplate and MessageFormat in your LogConfig.
      • MessageTemplate { format(ctx: MessageContext):string } is generates a string that can include items supplied by a Context call.
      • MessageFormat {(msg, ...args):string} can be used to format you log message if you wanted to use something like printj instead of console.log(message, ...args).
    Log Type Browser Node Comment
    ConsoleLog yes yes Just a wrapper around console
    StdOutLog no yes Uses a Writable defaulting to stdout/stderr
    JsonLog no yes TODO


    There are some method decorators for instrumenting methods with custom APM. The decorators can accept a Filter that can determine whether to run the decorator or just run the original method. For example only run the decorator N times or at intervals.

    Type System Provider
    @Timed Browser Console
    @Timed Node Console, StatsD, Prometheus
    @TimedAsync Browser Console
    @TimedAsync Node Console, StatsD, Prometheus
    @CountInvocations Browser Console
    @CountInvocations Node Console, StatsD, Prometheus
    @CountSuccess Browser Console
    @CountSuccess Node Console, StatsD, Prometheus
    @CountErrors Browser Console
    @CountErrors Node Console, StatsD, Prometheus
    @GaugeInvocations Node Console, StatsD, Prometheus
    @GaugeSuccess Node Console, StatsD, Prometheus
    @GaugeErrors Node Console, StatsD, Prometheus


    Note most of the things in this package use BigInt which isn't super well supported yet.


    • TimeMeasurement -- Holds a bigint of arbitrary nanoseconds.
    • Duration -- Holds a bigint representing time elapsed between 2 arbitrary nano seconds.
    • Instant -- Holds a bigint of nanoseconds representing a point in time.
    • Period -- Holds a bigint of elapsed nanoseconds between 2 Instants.


    • timePart(nanos, unit) -- Returns the count of unit in nanos and the remainder. [count:bigint, remainder:bigint]
    • timeParts(nanos, parts:{name:string, unit:bigint}[]) -- Returns a Record<string, bigint> with the count for each name based on the remainder of larger units.
    • millisAsString(nanos:bigint, postfix?: '' | 'n') -- Turn nanoseconds into a string... Lots of things don't serialize bigint yet.
    • millisAsNanoString(milliseconds:number, postfix?: '' | 'n') -- Turn milliseconds into a string with all the extra 0s for a nanosecond.

    Other Stuff

    • Providers -- A service locator/lookup utility.
    • Env -- Load and access environmental configs with support for nested EnvProps configs based on a prefix. There are loaders for:
      • processEnvLoader -- For process.env on node.
      • loadEnvWithObj -- For providing arbitrary variables.
      • documentQueryExtractor -- For loading data from the DOM in the browser.
      • loadEnvWithMetaTags -- For loading meta tags with a specific prefix in the browser.
      • debugEnv -- Initializes internal components to full debug.
    • PropEnabled -- Matches keys in an EnvProps against a set of accepted values.
    • bootstrap() -- Helper can be called from your entry point to initialize the different components you want to use.


    npm i @btilford/ts-base

    DownloadsWeekly Downloads






    Unpacked Size

    1.11 MB

    Total Files


    Last publish


    • btilford