Skip to content

Neroli's Lab - Common Library ​

The sleepapi-common package is a shared TypeScript library that contains common domain models, utilities, and types used across all components of Neroli's Lab.

Overview ​

This package provides:

  • Domain Models - Core entities and data structures for Pokémon Sleep
  • API Types - Shared type definitions for API requests/responses
  • Utilities - Common helper functions and utilities
  • Testing Utilities - Shared testing helpers via vimic

Development ​

Building the Library ​

bash
npm run build

This will:

  1. Clean the dist directory
  2. Build using Rollup with TypeScript support
  3. Include TypeScript declarations

Watch Mode ​

For development, you can build in watch mode:

bash
npm run build-watch

Testing ​

Run the test suite:

bash
npm run test          # Run once with coverage
npm run test-watch    # Watch mode

Type Checking ​

Run TypeScript type checking in watch mode:

bash
npm run type-watch

Project Structure ​

src/
├── domain/          # Core domain models and entities
├── api/             # API-related types and interfaces, might be moved to domain
├── utils/           # Common utility functions
├── vitest/          # Testing utilities
├── prototype/       # Native class extensions
└── index.ts         # Main entry point

Usage ​

Since this is a private package used internally by other Neroli's Lab components, it's typically installed as a local dependency:

json
{
  "dependencies": {
    "sleepapi-common": "file:../common"
  }
}

Import from the package:

typescript
import { SomeDomainModel, ApiResponse } from 'sleepapi-common';

Build Configuration ​

The library uses Rollup for building with:

  • TypeScript compilation
  • Dual format output (CommonJS + ES modules)
  • Declaration file generation
  • Node.js resolution

See rollup.config.mjs for complete build configuration.

Testing ​

Tests are written using Vitest and located alongside source files with .test.ts extensions. The library includes comprehensive test coverage reporting.

Development Guidelines ​

When contributing to the common library, please follow these guidelines:

Public API ​

  • Maintain clean public API - Keep the exported interface simple and well-designed
  • Backward compatibility - Avoid breaking changes when possible
  • Clear naming conventions - Use descriptive and consistent naming for exports

Type Definitions ​

  • Export all necessary types - Make TypeScript interfaces and types available to consumers, re-export with index.ts files
  • Comprehensive type coverage - Ensure all public APIs are properly typed
  • Generic types - Use generics appropriately for reusable functionality

Testing ​

  • Comprehensive unit test coverage - Test all your code changes
  • Test edge cases - Include tests for error conditions and boundary cases
  • Fast test execution - Keep tests lightweight and fast-running

Documentation ​

  • JSDoc comments for public APIs - Document any complex interface or function with JSDoc
  • Usage examples - Provide clear examples in documentation
  • Keep documentation current - Update docs when making changes to APIs

Released under the Apache 2.0 License.