summaryrefslogtreecommitdiffstats
path: root/vnfmarket/src/main/webapp/vnfmarket/node_modules/istanbul/lib/store/tmp.js
blob: d596fb13dca262c25e7a951bfc823168b523825c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
 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 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;