2.0.0 • Published 11 days ago

skuba-dive v2.0.0

Weekly downloads
3,397
License
MIT
Repository
github
Last release
11 days ago

🤿🌊

npm package Powered by skuba

Minimal runtime for skuba.

Table of contents

API reference

Assert

TypeScript assertion functions for narrowing down types in unit tests and the like.

These may be used for input validation in your application code at a pinch, but consider a proper validation library with richer error handling and reporting.

import { Assert } from 'skuba-dive';

it('should think of a good test case name', () => {
  const result = numberOrNull();
  // result is number | null

  Assert.notNullish(result);
  // result is number
});

Env

Functions for reading values out of environment variables.

For example, in your /src/config.ts:

import { Env } from 'skuba-dive';

const ENVIRONMENTS = ['dev', 'prod'] as const;

export type Environment = (typeof ENVIRONMENTS)[number];

export const environment = Env.oneOf(ENVIRONMENTS)('ENVIRONMENT');
// 'dev' | 'prod'

export const port = Env.nonNegativeInteger('PORT', { default: undefined });
// number | undefined

export const version = Env.string('VERSION', { default: 'local' });
// string | 'local'

export const flag = Env.boolean('FLAG');
// boolean

Each function will throw if its environment variable is not set and opts.default is not provided.

Register

Runtime hook for import paths relative to /src.

Make a side-effectful import at the top of your entry point(s):

// /src/register.ts

import 'skuba-dive/register';
// /src/app.ts

import './register';

import { config } from 'src/config';

export = new Koa();

The hook must be imported from a module that sits directly under /src for module resolution to work correctly.

Design

skuba-dive packages up:

  • General application boilerplate that doesn't justify a standalone module
  • Runtime functionality that complements skuba

See skuba's goals and non-goals for more information.