config
Configuration management for GraphQL Markdown.
This module handles all aspects of configuration including:
- Loading and merging configuration from multiple sources
- Validating configuration values
- Providing defaults for missing options
- Processing special configuration options (directives, deprecated items, etc)
The configuration follows this precedence (highest to lowest):
- CLI arguments
- Config file options
- GraphQL Config options
- Default values
DeprecatedOptionβ
Defined in: config.ts:96
Options for handling deprecated items in the schema.
- DEFAULT: Show deprecated items normally
- GROUP: Group deprecated items separately
- SKIP: Exclude deprecated items from documentation
Exampleβ
const deprecatedHandling = DeprecatedOption.GROUP;
Enumeration Membersβ
DEFAULTβ
DEFAULT: "default";
Defined in: config.ts:97
GROUPβ
GROUP: "group";
Defined in: config.ts:98
SKIPβ
SKIP: "skip";
Defined in: config.ts:99
DiffMethodβ
Defined in: config.ts:78
Diff methods used to determine how schema changes are processed.
- NONE: No diffing is performed
- FORCE: Force regeneration of documentation regardless of schema changes
Exampleβ
const diffMethod = DiffMethod.FORCE;
Enumeration Membersβ
FORCEβ
FORCE: "FORCE";
Defined in: config.ts:80
NONEβ
NONE: "NONE";
Defined in: config.ts:79
TypeHierarchyβ
Defined in: config.ts:60
Type hierarchy options for organizing schema documentation.
- API: Groups types by their role in the API (Query, Mutation, etc.)
- ENTITY: Groups types by their entity relationships
- FLAT: No grouping, all types in a flat structure
Exampleβ
const hierarchy = TypeHierarchy.API;
Enumeration Membersβ
APIβ
API: "api";
Defined in: config.ts:61
ENTITYβ
ENTITY: "entity";
Defined in: config.ts:62
FLATβ
FLAT: "flat";
Defined in: config.ts:63
ASSET_HOMEPAGE_LOCATIONβ
const ASSET_HOMEPAGE_LOCATION: string;
Defined in: config.ts:118
Location of the default homepage template.
DEFAULT_HIERARCHYβ
const DEFAULT_HIERARCHY: object;
Defined in: config.ts:129
Default hierarchy configuration using the API hierarchy type.
Type declarationβ
apiβ
api: object = {};
DEFAULT_OPTIONSβ
const DEFAULT_OPTIONS: Readonly<Pick<ConfigOptions, "customDirective" | "groupByDirective" | "loaders"> & Required<Omit<ConfigOptions,
| "customDirective"
| "groupByDirective"
| "loaders"
| "mdxParser"
| "printTypeOptions">>> & object;
Defined in: config.ts:138
Default configuration options used when no user options are provided. These values serve as fallbacks for any missing configuration.
Type declarationβ
printTypeOptionsβ
printTypeOptions: Required<Omit<ConfigPrintTypeOptions, "hierarchy">> & object;
Type declarationβ
hierarchyβ
hierarchy: Required<Pick<TypeHierarchyObjectType, API>>;
Seeβ
Options for the complete configuration interface
DOCS_URLβ
const DOCS_URL: "https://graphql-markdown.dev/docs";
Defined in: config.ts:106
Documentation website URL for reference in error messages and help text.
PACKAGE_NAMEβ
const PACKAGE_NAME: "@graphql-markdown/docusaurus";
Defined in: config.ts:112
Default package name used for temporary directory creation and identification.
buildConfig()β
function buildConfig(
configFileOpts,
cliOpts?,
id?): Promise<Options>
Defined in: config.ts:740
Builds the complete configuration object by merging options from multiple sources in order of precedence:
- CLI options (highest priority)
- Configuration file options
- GraphQL Config options
- Default options (lowest priority)
Parametersβ
configFileOptsβ
Maybe
<ConfigOptions
>
Options from the configuration file
cliOpts?β
Maybe
<CliOptions
>
Options from the command line interface
id?β
Maybe
<string
> = "default"
The configuration ID used when referencing multiple schemas
Returnsβ
Promise
<Options
>
A promise resolving to the final merged configuration object
Exampleβ
// Basic usage with minimal options
const config = await buildConfig(
{ baseURL: "api" }, // Config file options
{ pretty: true } // CLI options
);
// With specific config ID
const config = await buildConfig(
{ schema: "./schemas/users.graphql" },
{ force: true },
"users"
);
// The resulting config will contain all required options
// with values from CLI taking precedence over config file,
// and defaults filling in any missing values
Seeβ
- Options for the complete configuration interface
- DEFAULT_OPTIONS for default values
getCustomDirectives()β
function getCustomDirectives(customDirectiveOptions, skipDocDirective?): Maybe<CustomDirective>
Defined in: config.ts:383
Processes custom directives, filtering out any that should be skipped. Validates that each custom directive has the correct format with required functions.
Parametersβ
customDirectiveOptionsβ
Maybe
<CustomDirective
>
The custom directive configuration object
skipDocDirective?β
Maybe
<DirectiveName
[]>
Array of directive names that should be skipped
Returnsβ
Maybe
<CustomDirective
>
The filtered custom directives object, or undefined if empty/invalid
Throwsβ
Error if a custom directive has an invalid format
Exampleβ
// Valid custom directive with tag function
const customDirectives = {
example: {
tag: (value) => `Example: ${value}`
},
todo: {
descriptor: () => "TODO items"
}
};
// Filter out the "example" directive
const filteredDirectives = getCustomDirectives(customDirectives, ["example"]);
console.log(filteredDirectives); // { todo: { descriptor: [Function] } }
// Invalid format - will throw an error
getCustomDirectives({ example: { invalid: true } }, []);
// Error: Wrong format for plugin custom directive "example"...
Seeβ
DOCS_URL/advanced/custom-directive for custom directive format documentation
getDiffMethod()β
function getDiffMethod(diff, force): TypeDiffMethod
Defined in: config.ts:435
Determines the diff method to use based on the configuration and force flag. If force is true, always returns FORCE regardless of the configured diff method.
Parametersβ
diffβ
TypeDiffMethod
The configured diff method
forceβ
boolean
= false
Whether to force regeneration (overrides diff setting)
Returnsβ
TypeDiffMethod
The resolved diff method to use
Exampleβ
// Normal usage - respects the configured diff method
const method1 = getDiffMethod(DiffMethod.NONE, false);
console.log(method1); // "NONE"
// Force flag overrides the diff method
const method2 = getDiffMethod(DiffMethod.NONE, true);
console.log(method2); // "FORCE"
Seeβ
DiffMethod for available diff methods
getDocDirective()β
function getDocDirective(name): DirectiveName
Defined in: config.ts:206
Retrieves a directive name from a string by parsing and validating the format. Directive names should be prefixed with '@' (e.g., '@example').
Parametersβ
nameβ
Maybe
<DirectiveName
>
The directive name as a string, which should follow the format '@directiveName'
Returnsβ
DirectiveName
The validated directive name without the '@' prefix
Throwsβ
Error if the directive name format is invalid
Exampleβ
const directive = getDocDirective("@example");
console.log(directive); // "example"
// Invalid - will throw an error
getDocDirective("example"); // Error: Invalid "example"
getDocOptions()β
function getDocOptions(cliOpts?, configOptions?): Required<ConfigDocOptions>
Defined in: config.ts:479
Builds the document options by merging CLI options, config file options, and defaults. Handles index generation flag and front matter configuration.
Parametersβ
cliOpts?β
Maybe
<CliOptions
& Omit
<DeprecatedCliOptions
, "never"
>>
CLI options for document generation
configOptions?β
Maybe
<ConfigDocOptions
& Omit
<DeprecatedConfigDocOptions
, "never"
>>
Config file options for document generation
Returnsβ
Required
<ConfigDocOptions
>
The resolved document options with all required fields
Exampleβ
const cliOptions = { index: true };
const configOptions = { frontMatter: { sidebar_label: 'API' } };
const docOptions = getDocOptions(cliOptions, configOptions);
console.log(docOptions);
// {
// index: true,
// frontMatter: { sidebar_label: 'API' }
// }
getOnlyDocDirectives()β
function getOnlyDocDirectives(cliOpts, configFileOpts): DirectiveName[]
Defined in: config.ts:239
Retrieves the list of "only" directives from CLI and config options. These directives specify which schema elements should be included in the documentation.
Parametersβ
cliOptsβ
Maybe
<CliOptions
>
CLI options containing "only" directives
configFileOptsβ
Maybe
<Pick
<ConfigOptions
, "onlyDocDirective"
>>
Config file options containing "onlyDocDirective"
Returnsβ
DirectiveName
[]
An array of validated "only" directives (without '@' prefix)
Exampleβ
const cliOptions = { only: ["@example", "@internal"] };
const configOptions = { onlyDocDirective: ["@auth"] };
const onlyDirectives = getOnlyDocDirectives(cliOptions, configOptions);
console.log(onlyDirectives); // ["example", "internal", "auth"]
Seeβ
getDocDirective for directive name validation
getPrintTypeOptions()β
function getPrintTypeOptions(cliOpts, configOptions): Required<ConfigPrintTypeOptions>
Defined in: config.ts:614
Builds the print type options by merging CLI options, config file options, and defaults. Handles various formatting options for type documentation.
Parametersβ
cliOptsβ
Maybe
<CliOptions
& Omit
<DeprecatedCliOptions
, "never"
>>
CLI options for print type configuration
configOptionsβ
Maybe
<ConfigPrintTypeOptions
& Omit
<DeprecatedConfigPrintTypeOptions
, "never"
>>
Config file options for print type configuration
Returnsβ
Required
<ConfigPrintTypeOptions
>
The resolved print type options with all required fields
Exampleβ
const cliOptions = { noCode: true, deprecated: "group" };
const configOptions = {
exampleSection: true,
hierarchy: "entity"
};
const printOptions = getPrintTypeOptions(cliOptions, configOptions);
console.log(printOptions);
// {
// codeSection: false, // Disabled via noCode CLI flag
// deprecated: "group", // From CLI
// exampleSection: true, // From config
// parentTypePrefix: true, // Default value
// relatedTypeSection: true, // Default value
// typeBadges: true, // Default value
// hierarchy: { entity: {} } // Parsed from config
// }
Seeβ
- DeprecatedOption for deprecated handling options
- getTypeHierarchyOption for hierarchy resolution
getSkipDocDirectives()β
function getSkipDocDirectives(cliOpts, configFileOpts): DirectiveName[]
Defined in: config.ts:274
Retrieves the list of "skip" directives from CLI and config options. These directives specify which schema elements should be excluded from the documentation. Additionally, if deprecated handling is set to SKIP, adds the "deprecated" directive.
Parametersβ
cliOptsβ
Maybe
<CliOptions
>
CLI options containing "skip" directives
configFileOptsβ
Maybe
<Pick
<ConfigOptions
, "printTypeOptions"
| "skipDocDirective"
>>
Config file options containing "skipDocDirective" and potentially "printTypeOptions.deprecated"
Returnsβ
DirectiveName
[]
An array of validated "skip" directives (without '@' prefix)
Exampleβ
const cliOptions = { skip: ["@internal"], deprecated: "skip" };
const configOptions = { skipDocDirective: ["@auth"] };
const skipDirectives = getSkipDocDirectives(cliOptions, configOptions);
console.log(skipDirectives); // ["internal", "auth", "deprecated"]
Seeβ
- getDocDirective for directive name validation
- DeprecatedOption for deprecated handling options
getTypeHierarchyOption()β
function getTypeHierarchyOption(cliOption?, configOption?): Maybe<Partial<Record<TypeHierarchyValueType, TypeHierarchyTypeOptions>>>
Defined in: config.ts:525
Resolves the type hierarchy configuration by merging CLI and config file options. Validates that CLI and config don't specify conflicting hierarchy types.
Parametersβ
cliOption?β
Maybe
<TypeHierarchyValueType
>
The hierarchy option specified via CLI (string value)
configOption?β
Maybe
<TypeHierarchyType
>
The hierarchy option from the config file (string or object)
Returnsβ
Maybe
<Partial
<Record
<TypeHierarchyValueType
, TypeHierarchyTypeOptions
>>>
The resolved type hierarchy object
Throwsβ
Error if CLI and config specify conflicting hierarchy types
Exampleβ
// Using hierarchy from CLI (string format)
const hierarchy1 = getTypeHierarchyOption("api", undefined);
console.log(hierarchy1); // { api: {} }
// Using hierarchy from config (object format)
const hierarchy2 = getTypeHierarchyOption(undefined, { entity: { User: ["posts"] } });
console.log(hierarchy2); // { entity: { User: ["posts"] } }
// Error case - conflicting hierarchies
getTypeHierarchyOption("api", { entity: {} });
// Error: Hierarchy option mismatch in CLI flag 'api' and config 'entity'
Seeβ
TypeHierarchy for available hierarchy types
getVisibilityDirectives()β
function getVisibilityDirectives(cliOpts, configFileOpts): object
Defined in: config.ts:328
Combines and validates visibility directives (only and skip) from both CLI and config sources. Ensures that no directive appears in both "only" and "skip" lists simultaneously.
Parametersβ
cliOptsβ
Maybe
<CliOptions
>
CLI options containing "only" and "skip" directives
configFileOptsβ
Maybe
<Pick
<ConfigOptions
, "onlyDocDirective"
| "printTypeOptions"
| "skipDocDirective"
>>
Config file options containing directive configurations
Returnsβ
object
An object with validated "onlyDocDirective" and "skipDocDirective" arrays
onlyDocDirectiveβ
onlyDocDirective: DirectiveName[];
skipDocDirectiveβ
skipDocDirective: DirectiveName[];
Throwsβ
Error if the same directive appears in both "only" and "skip" lists
Exampleβ
const cliOptions = { only: ["@example"], skip: ["@internal"] };
const configOptions = { onlyDocDirective: ["@auth"] };
const visibilityDirectives = getVisibilityDirectives(cliOptions, configOptions);
console.log(visibilityDirectives);
// {
// onlyDocDirective: ["example", "auth"],
// skipDocDirective: ["internal"]
// }
// Invalid - will throw an error
getVisibilityDirectives(
{ only: ["@example"], skip: ["@example"] },
{}
); // Error: The same directive cannot be declared in 'onlyDocDirective' and 'skipDocDirective'.
Seeβ
getOnlyDocDirectives and getSkipDocDirectives for directive retrieval
parseDeprecatedDocOptions()β
function parseDeprecatedDocOptions(_cliOpts, _configOptions): Record<string, never>
Defined in: config.ts:452
Placeholder function for handling deprecated document options. Currently returns an empty object as these options are deprecated.
Parametersβ
_cliOptsβ
Maybe
<Omit
<DeprecatedCliOptions
, "never"
>>
Deprecated CLI options (unused)
_configOptionsβ
Maybe
<Omit
<DeprecatedConfigDocOptions
, "never"
>>
Deprecated config options (unused)
Returnsβ
Record
<string
, never
>
An empty object
parseDeprecatedPrintTypeOptions()β
function parseDeprecatedPrintTypeOptions(_cliOpts, _configOptions): Record<string, never>
Defined in: config.ts:577
Placeholder function for handling deprecated print type options. Currently returns an empty object as these options are deprecated.
Parametersβ
_cliOptsβ
Maybe
<Omit
<DeprecatedCliOptions
, "never"
>>
Deprecated CLI options (unused)
_configOptionsβ
Maybe
<Omit
<DeprecatedConfigPrintTypeOptions
, "never"
>>
Deprecated config options (unused)
Returnsβ
Record
<string
, never
>
An empty object
parseGroupByOption()β
function parseGroupByOption(groupOptions): Maybe<GroupByDirectiveOptions>
Defined in: config.ts:677
Parses and validates the groupByDirective option string format. The format should be @directive(field|=fallback) where:
- directive: Name of the directive to group by
- field: Name of the field in the directive to use for grouping
- fallback: (Optional) Fallback group name for items without the directive
Parametersβ
groupOptionsβ
unknown
The group directive option as a string
Returnsβ
Maybe
<GroupByDirectiveOptions
>
A parsed GroupByDirectiveOptions object or undefined if invalid
Throwsβ
Error if the groupByDirective format is invalid
Exampleβ
// Basic usage with directive and field
const groupBy1 = parseGroupByOption("@tag(name)");
console.log(groupBy1);
// { directive: "tag", field: "name", fallback: "Miscellaneous" }
// With custom fallback group
const groupBy2 = parseGroupByOption("@category(name|=Other)");
console.log(groupBy2);
// { directive: "category", field: "name", fallback: "Other" }
// Invalid format - will throw an error
parseGroupByOption("invalid-format");
// Error: Invalid "invalid-format"