UNPKG

@contextjs/system

Version:
150 lines (105 loc) 4 kB
# @contextjs/system [![Tests](https://github.com/contextjs/context/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/contextjs/context/actions/workflows/tests.yaml)&nbsp; [![npm](https://badgen.net/npm/v/@contextjs/system?cache=300)](https://www.npmjs.com/package/@contextjs/system)&nbsp; [![License](https://badgen.net/static/license/MIT)](https://github.com/contextjs/context/blob/main/LICENSE) > A zero-dependency system utility library for the ContextJS ecosystem, providing application lifecycle, environment detection, console formatting, exception handling, property extraction (`nameof()`), and core extensions — all written with full type safety. ## Features - **Application lifecycle management** with `onRun()` hooks - **Environment detection** with development/production/test/staging support - **Console formatting** with ANSI styles and argument parsing - **Typed exceptions** like `NullReferenceException` and `InvalidExpressionException` - **Safe property extraction** via `nameof()` for both lambdas and keys - **Core helpers** for object and string manipulation with type guards - **Type-safe utility `Throw` guard methods** - **Fully tested**, 100% coverage, no dependencies ## Installation ```bash npm i @contextjs/system ``` ## Quick Start ### 1. Run an application ```typescript import { Application } from '@contextjs/system'; const app = new Application(); app.onRun(async () => { console.log("App booted"); }); await app.runAsync(); ``` ### 2. nameof() Example ```typescript import { Application, nameof } from '@contextjs/system'; const app = new Application(); class User { name: string = 'John Doe'; age: number = 30; } class Config { port: number = 3000; host: string = 'localhost'; } const user = new User(); const property = nameof(() => user.name); // "name" const key = nameof<Config>('port'); // "port" app.onRun(async () => { console.log("App is running"); console.log(`User name: ${user.name}`); console.log(`User age: ${user.age}`); }); await app.runAsync(); ``` ## Console Formatting ```typescript import { Console } from "@contextjs/system"; Console.writeLineSuccess('✔ Success'); Console.writeLineWarning('⚠ Warning'); Console.writeLineError('✖ Error'); Console.writeLineInfo('ℹ Info'); Console.writeLineFormatted({ format: ['bold', 'green'], text: 'Styled' }); ``` ## Common Utilities ### Guard with `Throw` ```typescript import { Application, StringExtensions, Throw } from "@contextjs/system"; const name = StringExtensions.empty; const configPath = "config.json"; const obj = { key: "value" }; const app = new Application(); app.onRun(async () => { Throw.ifNullOrWhiteSpace(name); Throw.ifNullOrEmpty(configPath); Throw.ifNull(obj); }); await app.runAsync(); ``` ### Use string helpers ```typescript import { StringExtensions } from "@contextjs/system"; const value = "a b c "; StringExtensions.removeWhiteSpaces(value); console.log(StringExtensions.isNullOrWhiteSpace(value)); ``` ### Check object null state ```typescript import { ObjectExtensions } from "@contextjs/system"; const value: string = "Hello, World!"; if (!ObjectExtensions.isNullOrUndefined(value)) { // TypeScript will narrow the type console.log(value); } ``` ## Testing This library is fully covered with unit tests using Node's native `test` module. Test coverage includes: - Environment parsing - Console formatting - String/object helpers - Exception and guard behavior - Version display - Application lifecycle execution - Property name extraction via `nameof()` ## Philosophy @contextjs/system is built to be the minimal core foundation for higher-level libraries in the ContextJS ecosystem. It provides safe, strongly-typed primitives that you can rely on without reflection, decorators, or external dependencies. ## API Reference For detailed API documentation, please refer to the [API Reference](https://contextjs.dev/api/system#api-reference).