UNPKG

orionsoft-react-scripts

Version:

Orionsoft Configuration and scripts for Create React App.

82 lines (71 loc) 2.09 kB
/* Copyright (c) 2012, Yahoo! Inc. All rights reserved. Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var util = require('util'), path = require('path'), os = require('os'), fs = require('fs'), mkdirp = require('mkdirp'), Store = require('./index'); function makeTempDir() { var dir = path.join(os.tmpdir ? os.tmpdir() : /* istanbul ignore next */ (process.env.TMPDIR || '/tmp'), 'ts' + new Date().getTime()); mkdirp.sync(dir); return dir; } /** * a `Store` implementation using temporary files. * * Usage * ----- * * var store = require('istanbul').Store.create('tmp'); * * * @class TmpStore * @extends Store * @module store * @param {Object} opts Optional. * @param {String} [opts.tmp] a pre-existing directory to use as the `tmp` directory. When not specified, a random directory * is created under `os.tmpdir()` * @constructor */ function TmpStore(opts) { opts = opts || {}; this.tmp = opts.tmp || makeTempDir(); this.map = {}; this.seq = 0; this.prefix = 't' + new Date().getTime() + '-'; } TmpStore.TYPE = 'tmp'; util.inherits(TmpStore, Store); Store.mix(TmpStore, { generateTmpFileName: function () { this.seq += 1; return path.join(this.tmp, this.prefix + this.seq + '.tmp'); }, set: function (key, contents) { var tmpFile = this.generateTmpFileName(); fs.writeFileSync(tmpFile, contents, 'utf8'); this.map[key] = tmpFile; }, get: function (key) { var tmpFile = this.map[key]; if (!tmpFile) { throw new Error('Unable to find tmp entry for [' + tmpFile + ']'); } return fs.readFileSync(tmpFile, 'utf8'); }, hasKey: function (key) { return !!this.map[key]; }, keys: function () { return Object.keys(this.map); }, dispose: function () { var map = this.map; Object.keys(map).forEach(function (key) { fs.unlinkSync(map[key]); }); this.map = {}; } }); module.exports = TmpStore;