UNPKG

@freemework/hosting

Version:

Hosting library of the Freemework Project.

50 lines (38 loc) 1.68 kB
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); } }