load_config_files
Loads config files.
Supports joining with common config files, also further up in the directory structure.
Filetypes supported:
- .toml
- .json
- .yml
- .yaml
- .js
- .mjs
- .ts
Usage
Set up a directory like example-config, in your current working directory:
example-config/
├── dev/
│ ├── common.js
│ ├── myapp1.toml
│ ├── myapp2.toml
│ └── README.md
└── prod/
├── common.json
├── myapp1.json
├── myapp2.json
└── README.md
// example.ts
import {
Config,
CONFIG_FORMATTERS,
ConfigFormatter,
loadConfig,
LoadConfigOptions,
} from "https://deno.land/x/load_config_files/mod.ts";
const options: LoadConfigOptions = { verbose: false };
const [formatterId, configRootPath, ...segments] = Deno.args;
const configRootUrl = new URL(configRootPath, "file:" + Deno.cwd());
const config: Config = await loadConfig(configRootUrl, segments, options);
const formatter: ConfigFormatter = CONFIG_FORMATTERS[formatterId];
const output: string = await formatter(config);
console.log(output);
Running the above program:
deno run \
--allow-read \
--allow-net=deno.land \
https://deno.land/x/load_config_files/example.ts \
shell example-config dev myapp2
deno run \
--allow-read \
--allow-net=deno.land \
http://dev-server:3001/example.ts \
shell example-config dev myapp2
…would output:
COLOR='purple'
CUSTOMER_URLS='{"CustomerA":"https://dev.example.com/customers/CustomerA.json","CustomerB":"https://dev.example.com/customers/CustomerB.json","CustomerC":"https://dev.example.com/customers/CustomerC.json","CustomerD":"https://dev.example.com/customers/CustomerD.json","CustomerE":"https://dev.example.com/customers/CustomerE.json"}'
APP_ID='myapp2'
More examples
For all possible combinations, including different output formats, see example-config/EXAMPLE_ALL_COMBINATIONS.md.