UNPKG

container.ts

Version:
68 lines 2.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /// <reference types="node" /> const assert = require("assert"); const path = require("path"); const fs = require("fs"); const Observable_1 = require("rxjs/Observable"); require("rxjs/add/observable/of"); require("rxjs/add/observable/throw"); require("rxjs/add/observable/bindNodeCallback"); require("rxjs/add/operator/do"); require("rxjs/add/operator/map"); const container_1 = require("../../container"); // TODO: Split caches. // TODO: Validation library. exports.ENV_ASSETS_PATH = "ASSETS_PATH"; /** Assets read only files interface. */ class Assets extends container_1.ContainerModule { constructor(name, opts) { super(name, opts); this._cache = {}; // Get assets directory path from environment. const assetsPath = this.environment.get(exports.ENV_ASSETS_PATH); assert(assetsPath != null, "Assets path is undefined"); this._path = path.resolve(assetsPath); this.debug(`path '${this.path}'`); } get path() { return this._path; } get cache() { return this._cache; } /** Read assets file contents with optional encoding. */ readFile(target, encoding) { return this.read(target, encoding) .do((data) => { // Save to cache. this.cache[target] = data; }); } /** Read assets file contents and parse JSON object. */ readJson(target, encoding = "utf8") { return this.read(target, encoding) .map((data) => { try { // Parse JSON and save to cache. const json = JSON.parse(data); this.cache[target] = json; return json; } catch (error) { return Observable_1.Observable.throw(error); } }); } /** Read assets file contents. */ read(target, encoding) { // Assets are read only, if contents defined in cache, return now. if (this.cache[target] != null) { const value = this.cache[target]; return Observable_1.Observable.of(value); } // Read file contents asynchronously. const filePath = path.resolve(this.path, target); const readFileCallback = fs.readFile.bind(this, filePath, encoding); const readFile = Observable_1.Observable.bindNodeCallback(readFileCallback); return readFile(); } } exports.Assets = Assets; //# sourceMappingURL=Assets.js.map