Skip to content

letnull19A/find-settings.lib

Repository files navigation

find-settings.lib

A lightweight TypeScript library for finding configuration files in a directory based on naming patterns and environment variables.

Features

  • 🔍 Pattern-based file discovery - Finds config files matching specific naming conventions
  • 🌍 Environment-aware - Automatically detects NODE_ENV for environment-specific configs
  • 📁 Non-recursive - Searches only in the specified directory (no subdirectories)
  • 🎯 Extensible - Base class for implementing custom file finders
  • 📦 Zero dependencies - Uses only Node.js built-in modules

Installation

npm install define-settings
# or
pnpm add define-settings
# or
yarn add define-settings

Usage

YamlSettingsFinder

Finds YAML/YML configuration files matching common patterns:

import { YamlSettingsFinder } from 'define-settings/yaml';

const finder = new YamlSettingsFinder('/path/to/config', 'settings');
const configFiles = finder.find();
// Returns: ['settings.yaml', 'settings.local.yaml', 'settings.development.yml']

Supported File Patterns

The library looks for files matching these patterns:

  • {baseName}.yaml or {baseName}.yml - Base configuration
  • {baseName}.local.yaml or {baseName}.local.yml - Local overrides
  • {baseName}.{NODE_ENV}.yaml or {baseName}.{NODE_ENV}.yml - Environment-specific configs

Example: If NODE_ENV=production and baseName=settings, it will find:

  • settings.yaml
  • settings.local.yaml
  • settings.production.yml

Custom Implementation

Extend BaseSettingsFinder to create your own file finder:

import { BaseSettingsFinder } from 'define-settings';

class JsonSettingsFinder extends BaseSettingsFinder {
  constructor(directory: string, baseName: string) {
    super(directory, ['json', 'jsonc'], baseName);
  }
}

const finder = new JsonSettingsFinder('/config', 'app');
const files = finder.find();

API

YamlSettingsFinder

Constructor

new YamlSettingsFinder(directory: string, baseName: string)
  • directory - Path to the directory to search in
  • baseName - Base name of the config files (e.g., 'settings', 'config')

Methods

  • find(): string[] - Returns array of matching filenames

BaseSettingsFinder

Abstract base class for implementing custom file finders.

Constructor

constructor(directory: string, extensions: string[], baseName: string)

Protected Methods

  • buildPatterns(): RegExp[] - Generates regex patterns for file matching
  • isMatch(filename: string): boolean - Checks if filename matches patterns

Public Methods

  • find(): string[] - Finds and returns matching files

Development

# Install dependencies
pnpm install

# Run tests
pnpm test

# Run tests in watch mode
pnpm test:watch

# Run tests with coverage
pnpm test:coverage

# Build
pnpm build

License

MIT © letnull19A

About

библиотека для поиска файлов настроек проекта

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published