File inclusion

Configuration LEGO

Introduction

Configuration supports inclusion of files to enable a modular structure.

An inclusion expression has the following format:

"@include:/path/to/includable/file/or/dir"

After inclusion the property value containing the inclusion will be replaced with the content of the include file(s).

Only files of type JSON are supported and file must contain a JSON object or array.

Syntax

An inclusion expressen MUST:

  • be a string ("...")

  • start with @include:

  • end with a path pointing to file or directory to include

  • NOT contain expansions

Both files and directories can be included.

If include is a file:

  1. Load content of file

  2. Parse content as JSON

  3. Replace property value with included JSON (object or array)

Including a non-existing, empty or non-json file is an error.

If include is a directory:

  1. Create a JSON array ("result")

  2. For each file in directory matching pattern "*.json"

    1. Load content of file

    2. Parse content as JSON

    3. Add JSON (object or array) to result array

  3. Replace property value with result array

Including a non-existing directory is an error. Including an empty directory (or a directory that doesn't contain any .json files) results in an empty result array.

Paths

Paths can be absolute or relative. Relative paths are resolved against the directory of the including file.

// Absolute path
"property": "@include:/absolute/path/to/included/file.json"

// Relative path, same directory
"property": "@include:file.json"
"property": "@include:./file.json"

// Relative path, sub directory
"property": "@include:includes/dir/file.json"
"property": "@include:./includes/dir/file.json"

// Relative path, sibling directory
"property": "@include:../other/dir/file.json"

Troubleshooting

Included file/dir not found:

Include not found: <path/to/file>

Included file does not contain valid JSON:

Invalid include content type (<type>): <path/to/file>

Included file is empty:

Empty include: <path/to/file>