Skip to main content

Overview

The configuration management system handles loading configuration from files, merging with CLI options and defaults, and transforming values for runtime use.

getDefaultConfig

Returns the default configuration with sensible defaults for all generators.
import { getDefaultConfig } from './utils/configuration/index.mjs';

const defaults = getDefaultConfig();

Returns

config
Configuration
Default configuration object containing:

loadConfigFile

Loads a configuration file from a URL or file path.
import { loadConfigFile } from './utils/configuration/index.mjs';

const config = await loadConfigFile('./doc-kit.config.mjs');

Parameters

filePath
string
URL or file path to the configuration file. Returns empty object if not provided.

Returns

config
Partial<Configuration>
The imported configuration object, or an empty object if no path provided

createConfigFromCLIOptions

Converts CLI options into a configuration object.
import { createConfigFromCLIOptions } from './utils/configuration/index.mjs';

const config = createConfigFromCLIOptions({
  input: 'doc/api/*.md',
  output: 'dist/',
  target: ['json-simple'],
  threads: 4,
});

Parameters

options
CLIOptions
required
Command-line options object

Returns

config
Configuration
Configuration object structured for internal use

createRunConfiguration

Creates a complete run configuration by merging config file, user options, and defaults.
import { createRunConfiguration } from './utils/configuration/index.mjs';

const config = await createRunConfiguration({
  configFile: './doc-kit.config.mjs',
  target: ['json-simple'],
  threads: 4,
});

Parameters

options
CLIOptions
required
User-provided configuration options (same as createConfigFromCLIOptions)

Returns

config
Promise<Configuration>
Fully merged and transformed configuration ready for execution

Behavior

  1. Loads configuration file if configFile option is provided
  2. Merges in order: defaults → config file → CLI options
  3. Transforms async values:
    • Coerces version string to SemVer object
    • Parses changelog URL to array of release entries
    • Parses index URL to array of documentation sections
  4. Enforces constraints:
    • Minimum threads: 1
    • Minimum chunkSize: 1
  5. Propagates global config to generator-specific configs

setConfig

Sets the global configuration and returns the processed configuration.
import { setConfig } from './utils/configuration/index.mjs';

const config = await setConfig({
  input: 'doc/api/*.md',
  output: 'dist/',
  target: ['metadata', 'json-simple'],
  threads: 4,
});

Parameters

options
Configuration | CLIOptions
required
Configuration object or CLI options. In main thread, creates run configuration. In worker threads, uses options as-is.

Returns

config
Promise<Configuration>
The processed configuration

getConfig

Retrieves the current configuration or generator-specific configuration.
import getConfig from './utils/configuration/index.mjs';

// Get full configuration
const config = getConfig();

// Get generator-specific configuration
const metadataConfig = getConfig('metadata');

Parameters

generator
string
Optional generator name. If provided, returns generator-specific configuration.

Returns

config
Configuration | GlobalConfiguration
Full configuration if no generator specified, otherwise generator-specific configuration

Configuration Types

Configuration

type Configuration = {
  global: GlobalConfiguration;
  target: Array<keyof AvailableGenerators>;
  threads: number;
  chunkSize: number;
} & {
  [generator: string]: GlobalConfiguration & GeneratorDefaultConfig;
};

GlobalConfiguration

type GlobalConfiguration = {
  repository: string;
  input: string | string[];
  ignore: string | string[];
  output: string;
  minify: boolean;
  version: SemVer;
  changelog: Array<ApiDocReleaseEntry>;
  index: Array<{ section: string; api: string }>;
  baseURL: string | URL;
  ref: string;
};

Template Utilities

populate

Populates a template string with configuration values.
import { populate } from './utils/configuration/templates.mjs';

const url = populate('https://github.com/{repository}/blob/{ref}/', config);
// Result: 'https://github.com/nodejs/node/blob/HEAD/'
Source: utils/configuration/templates.mjs:19

Examples

Loading Configuration from File

import { setConfig } from './utils/configuration/index.mjs';
import createGenerator from './generators.mjs';

// Load config from file
const config = await setConfig({
  configFile: './doc-kit.config.mjs',
  target: ['json-simple'],
});

// Run generators
const { runGenerators } = createGenerator();
await runGenerators(config);

Overriding Configuration

import { createRunConfiguration } from './utils/configuration/index.mjs';

// Merge file config with CLI overrides
const config = await createRunConfiguration({
  configFile: './doc-kit.config.mjs',
  output: 'custom-dist/', // Override output
  threads: 8, // Override threads
});

Generator-Specific Configuration

import getConfig from './utils/configuration/index.mjs';

// Inside a generator
const config = getConfig('metadata');
console.log(config.typeMap); // Generator-specific config
console.log(config.version); // Inherited from global

Build docs developers (and LLMs) love