@technician/source-fs
v2.0.1
Published
Access config on your local filesystem with Technician.
Downloads
6
Maintainers
Readme
@technician/source-fs
A config source for accessing config stored on the filesystem, allowing access to several config files stored in the same directory. It useable as both an async and sync config source.
This package provides the FSConfigSource
for use with the Technician manager.
Installation
npm i @technician/source-fs
This package is compatible with Node 10 LTS and up.
Usage Examples
FSConfigSource
returns Buffer
data by default and uses filenames as keys.
The Basics
import {Technician} from 'technician';
import {FSConfigSource} from '@technician/source-fs'
const technician = new Technician(new FSConfigSource());
// By default, FSConfigSource reads from process.cwd();
await technician.read('.myapprc');
await technician.read('something-else.json');
Working With JSON
import {Technician, Interpret} from 'technician';
import {FSConfigSource} from '@technician/source-fs'
const technician = new Technician(Interpret.buffer.asJSON(new FSConfigSource(), 'utf8'));
const config = await technician.read('config.json');
// The default asJSON interpreter can read and return JSON files as a js object.
// Non-JSON will be ignored with `asJSON`.
// You can use `asStringOrJSON` to parse JSON only when valid and otherwise return strings.
db.connect(config.dbUsername, config.dbPassword);
Specifying Directories
// Provide an absolute path to a directory.
new FSConfigSource('/home/me/my-config-dir');
// The relativeRootPath option will look inside process.cwd() for your custom path.
new FSConfigSource('app-config-dir', {relativeRootPath: true});
Recursive Reading
// Recursively reads subdirectories.
technician.addSource(new FSConfigSource(), {recurse: true});
// Read a file at the top level...
await technician.read('top-level-file.txt');
// ... or within nested subdirectories
await technician.read('subdirectory/another-file.txt');
// Subdirectories are not expanded into objects with readAll(),
// but instead keep the same flat key structure used by read().
// Ex: {"top-level-file.txt": "contents", "subdirectory/another-file.txt": "contents"}
Errors
By default, the FSConfigSource suppresses all filesystem errors (except in the case that the rootPath
passed to the constructor is invalid), instead treating any unreadable files as simply nonexistent.
To throw these errors instead, use the {throwErrors: true}
option. Note that this will cause readAll()
to throw an error if the target directory contains any inaccessible files, even if others are valid.
Contributions
Contributions and pull requests are always welcome. Please be sure your code passes all existing tests and linting.
Pull requests with full code coverage are strongly encouraged.