README
🤿🌊
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