1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*
- Copyright 2015, Yahoo Inc.
- Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
- */
- 'use strict';
- const fs = require('fs');
- const os = require('os');
- const path = require('path');
- const mkdirp = require('make-dir');
- const rimraf = require('rimraf');
- /* This exists for compatibility only to avoid changing the
- * prototype chain. */
- class SourceStore {}
- class MemoryStore extends SourceStore {
- constructor() {
- super();
- this.data = {};
- }
- registerSource(filePath, sourceText) {
- this.data[filePath] = sourceText;
- }
- getSource(filePath) {
- return this.data[filePath] || null;
- }
- dispose() {}
- }
- class FileStore extends SourceStore {
- constructor(opts = {}) {
- super();
- const tmpDir = opts.tmpdir || os.tmpdir();
- this.counter = 0;
- this.mappings = [];
- this.basePath = path.resolve(tmpDir, '.istanbul', 'cache_');
- mkdirp.sync(path.dirname(this.basePath));
- }
- registerSource(filePath, sourceText) {
- if (this.mappings[filePath]) {
- return;
- }
- this.counter += 1;
- const mapFile = this.basePath + this.counter;
- this.mappings[filePath] = mapFile;
- fs.writeFileSync(mapFile, sourceText, 'utf8');
- }
- getSource(filePath) {
- const mapFile = this.mappings[filePath];
- if (!mapFile) {
- return null;
- }
- return fs.readFileSync(mapFile, 'utf8');
- }
- dispose() {
- this.mappings = [];
- rimraf.sync(path.dirname(this.basePath));
- }
- }
- module.exports = {
- create(type = 'memory', opts = {}) {
- if (type.toLowerCase() === 'file') {
- return new FileStore(opts);
- }
- return new MemoryStore(opts);
- }
- };
|