CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-config

Configuration control for production node deployments

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

core-config.mddocs/

Core Configuration

Core configuration access providing the primary interface for retrieving and validating configuration values. Includes both method-based and direct property access with full validation support.

Capabilities

Configuration Access Methods

Primary methods for accessing configuration values with validation and error handling.

/**
 * Get configuration value by property path
 * @param property - Dot-notation path to configuration property (e.g., 'database.host')
 * @returns Configuration value of any type
 * @throws Error if property is null, undefined, or doesn't exist
 */
config.get(property: string): any;

/**
 * Test if configuration property exists
 * @param property - Dot-notation path to configuration property
 * @returns True if property is defined, false otherwise
 */
config.has(property: string): boolean;

Usage Examples:

const config = require('config');

// Basic property access
const dbHost = config.get('database.host');
const port = config.get('server.port');

// Nested property access
const credentials = config.get('services.api.credentials');

// Check existence before access
if (config.has('features.experimental')) {
  const experimental = config.get('features.experimental');
  console.log('Experimental features:', experimental);
}

// Error handling
try {
  const value = config.get('nonexistent.property');
} catch (error) {
  console.error('Configuration property not found:', error.message);
}

Direct Property Access

Direct access to configuration properties as object properties. All configuration objects inherit Config prototype methods.

// Direct property access (alternative to get() method)
config.propertyName: any;
config.nested.property: any;

// All configuration sub-objects have Config methods
config.database.get(property: string): any;
config.database.has(property: string): boolean;

Usage Examples:

const config = require('config');

// Direct property access
const appName = config.appName;
const dbConfig = config.database;

// Sub-configuration access
const dbHost = config.database.host;
const dbPort = config.database.port;

// Using Config methods on sub-objects
if (config.database.has('credentials')) {
  const credentials = config.database.get('credentials');
}

// Mixed access patterns
const serverConfig = config.get('server');
const serverHost = serverConfig.host; // Direct access on returned object
const serverPort = serverConfig.get('port'); // Method access on returned object

Configuration Value Types

Configuration values can be of any JavaScript type, with full support for nested objects and arrays.

// Supported configuration value types
type ConfigValue = 
  | string 
  | number 
  | boolean 
  | null 
  | object 
  | any[] 
  | ConfigValue[];

// Configuration objects maintain type information
interface ConfigObject {
  [key: string]: ConfigValue;
  get(property: string): ConfigValue;
  has(property: string): boolean;
}

Usage Examples:

// String values
const appName = config.get('app.name'); // "My Application"

// Number values  
const port = config.get('server.port'); // 3000
const timeout = config.get('timeout'); // 30.5

// Boolean values
const debugMode = config.get('debug'); // true

// Object values
const dbConfig = config.get('database');
// { host: 'localhost', port: 5432, name: 'myapp' }

// Array values
const allowedHosts = config.get('security.allowedHosts');
// ['localhost', '127.0.0.1', 'myapp.com']

// Nested arrays and objects
const services = config.get('services');
// { api: { url: '...', timeout: 5000 }, cache: { enabled: true } }

Error Handling

Configuration access includes comprehensive error handling for undefined properties and invalid access patterns.

/**
 * Configuration errors thrown by get() method
 */
class ConfigError extends Error {
  message: string; // Description of the configuration error
}

// Error conditions:
// - get(null) or get(undefined) throws: "Calling config.get with null or undefined argument"
// - get('nonexistent.property') throws: 'Configuration property "nonexistent.property" is not defined'

Usage Examples:

const config = require('config');

// Error handling patterns
try {
  const value = config.get('missing.property');
} catch (error) {
  if (error.message.includes('is not defined')) {
    console.log('Property not found, using default');
    const value = 'default-value';
  }
}

// Safe access with has() check
function getConfigSafely(property, defaultValue) {
  return config.has(property) ? config.get(property) : defaultValue;
}

const dbTimeout = getConfigSafely('database.timeout', 5000);

// Validate arguments before calling get()
function getConfigValue(property) {
  if (property == null) {
    throw new Error('Property path cannot be null or undefined');
  }
  return config.get(property);
}

docs

async-config.md

config-utilities.md

core-config.md

deferred-config.md

environment-integration.md

index.md

raw-config.md

tile.json