Minimal runtime for skuba
.
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
});
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.
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.
skuba-dive
packages up:
- General application boilerplate that doesn't justify a standalone module
- Runtime functionality that complements
skuba