A lightweight TypeScript library for finding configuration files in a directory based on naming patterns and environment variables.
- 🔍 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
npm install define-settings
# or
pnpm add define-settings
# or
yarn add define-settingsFinds 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']The library looks for files matching these patterns:
{baseName}.yamlor{baseName}.yml- Base configuration{baseName}.local.yamlor{baseName}.local.yml- Local overrides{baseName}.{NODE_ENV}.yamlor{baseName}.{NODE_ENV}.yml- Environment-specific configs
Example: If NODE_ENV=production and baseName=settings, it will find:
settings.yamlsettings.local.yamlsettings.production.yml
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();new YamlSettingsFinder(directory: string, baseName: string)directory- Path to the directory to search inbaseName- Base name of the config files (e.g., 'settings', 'config')
find(): string[]- Returns array of matching filenames
Abstract base class for implementing custom file finders.
constructor(directory: string, extensions: string[], baseName: string)buildPatterns(): RegExp[]- Generates regex patterns for file matchingisMatch(filename: string): boolean- Checks if filename matches patterns
find(): string[]- Finds and returns matching files
# 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 buildMIT © letnull19A