@freemework/hosting
Version:
Hosting library of the Freemework Project.
41 lines • 1.69 kB
JavaScript
import * as path from "path";
import * as fs from "fs";
import { promisify } from "util";
const readFileAsync = promisify(fs.readFile);
const readdirAsync = promisify(fs.readdir);
const statAsync = promisify(fs.stat);
import { FConfigurationDictionary } from "@freemework/common";
import { pathToFileURL } from "url";
/**
* Loading values from files. A filename is used as key name.
* Main reason for this is https://docs.docker.com/engine/swarm/secrets/
* @param directory a directory where secret files are placed. Default: /run/secrets
*/
export class FConfigurationDirectory extends FConfigurationDictionary {
static async read(directory) {
if (directory === undefined) {
// Setup default dir
// https://docs.docker.com/engine/swarm/secrets/
directory = "/run/secrets";
}
const dict = {};
const sourceDirectory = directory;
const files = await readdirAsync(sourceDirectory);
await files.reduce(async (p, c) => {
await p;
const fullFileName = path.join(sourceDirectory, c);
const stats = await statAsync(fullFileName);
if (stats.isFile()) {
const value = await readFileAsync(fullFileName, "utf-8");
dict[c] = value.trim();
}
}, Promise.resolve());
return new FConfigurationDirectory(directory, dict);
}
constructor(directory, dict) {
const directoryFileURL = pathToFileURL(directory);
const sourceURI = new URL(`configuration+directory://${directoryFileURL.pathname}`);
super(sourceURI, dict);
}
}
//# sourceMappingURL=FConfigurationDirectory.js.map