conflakes
Version:
Manager of the configuration, may be depending on the environment, with the ability to import another config files defined inside themselves.
50 lines (40 loc) • 1.87 kB
text/typescript
import * as _ from 'lodash';
import * as p from 'path';
import * as yml from 'js-yaml';
import {BaseFileLoaderAbstract} from "./BaseFileLoaderAbstract";
import GlobalVariableSchema from "./Extensions/Yaml/GlobalVariableType";
export class YamlLoader extends BaseFileLoaderAbstract {
public supports(resource: any, type: string|null = null): boolean {
return _.isString(resource) && resource && (('yml' === type || 'yaml' === type) || ('.yml' === p.extname(resource) || '.yaml' === p.extname(resource)))
}
/**
* Laduje do kontenera resource example FileResource jeżeli JsonLoader obsługuje imporotwanie resourców to używa metody
* import aby wcześniej jeszcze rozwiązać który loader powinien być użyty do załadowania rezourca
*
* @param resource
* @param type
* @returns {any}
*/
public load(resource: any, type: string|null = null, as: string|null): void {
var content = this.getFileContent(resource);
try {
var parsedFile = yml.load(content, { schema: GlobalVariableSchema });
} catch (e) {
throw new Error(`Parse Error: ${resource}\n${e.toString()}`)
}
var imports = [];
if ('imports' in parsedFile) {
for (let imp in parsedFile['imports']) {
if (parsedFile['imports'][imp]['as'] && as) {
parsedFile['imports'][imp]['as'] = as + '.' + parsedFile['imports'][imp]['as']
} else if (as) {
parsedFile['imports'][imp]['as'] = as;
}
}
imports = parsedFile['imports'];
delete parsedFile['imports'];
}
this.importFromArray(imports, resource);
_.merge(this.container, as ? _.set({}, as, parsedFile) : parsedFile);
}
}