@freemework/hosting
Version:
Hosting library of the Freemework Project.
50 lines (38 loc) • 1.68 kB
text/typescript
import { readFile } from "fs";
import { promisify } from "util";
import { pathToFileURL } from "url";
const readFileAsync = promisify(readFile);
import { FConfigurationDictionary, FUtilUnReadonly } from "@freemework/common";
/**
* Very similar to Java property files
*/
export class FConfigurationProperties extends FConfigurationDictionary {
public static async fromFile(propertiesConfigFile: string): Promise<FConfigurationProperties> {
const propertiesConfigFileURL: URL = pathToFileURL(propertiesConfigFile);
const sourceURI: URL = new URL(`configuration+file+properties://${propertiesConfigFileURL.pathname}`);
const fileContent: Buffer = await readFileAsync(propertiesConfigFile);
return new FConfigurationProperties(
sourceURI,
fileContent.toString("utf-8")
);
}
public static factory(propertiesDocument: string): FConfigurationProperties {
const encodedPropertiesDocument: string = encodeURIComponent(propertiesDocument);
const sourceURI: URL = new URL(`configuration:properties?data=${encodedPropertiesDocument}`);
return new FConfigurationProperties(sourceURI, propertiesDocument);
}
protected constructor(sourceURI: URL, propertiesDocument: string) {
const dict: FUtilUnReadonly<FConfigurationDictionary.Data> = {};
const lines = propertiesDocument.toString().split(/(?:\r\n|\r|\n)/g);
lines.forEach((line: string) => {
if (line.startsWith("#")) { return; }
const indexOfEq = line.indexOf("=");
if (indexOfEq >= 0) {
const name: string = line.substring(0, indexOfEq).trim();
const value: string = line.substring(indexOfEq + 1).trim();
dict[name] = value;
}
});
super(sourceURI, dict);
}
}