UNPKG

@stryker-mutator/core

Version:

The extendable JavaScript mutation testing framework

87 lines 4.45 kB
var _ProjectFile_instances, _ProjectFile_currentContent, _ProjectFile_originalContent, _ProjectFile_relativePath, _ProjectFile_writeTo; import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib"; import path from 'path'; import { StrykerError } from '@stryker-mutator/util'; /** * Represents a file inside the project under test. * Has utility methods to help with copying it to the sandbox, or backing it up (when `--inPlace` is active) * * Assumes utf-8 as encoding when reading/writing content. */ export class ProjectFile { constructor(fs, name, mutate) { _ProjectFile_instances.add(this); this.fs = fs; this.name = name; this.mutate = mutate; _ProjectFile_currentContent.set(this, void 0); _ProjectFile_originalContent.set(this, void 0); _ProjectFile_relativePath.set(this, void 0); __classPrivateFieldSet(this, _ProjectFile_relativePath, path.relative(process.cwd(), this.name), "f"); } setContent(content) { __classPrivateFieldSet(this, _ProjectFile_currentContent, content, "f"); } async toInstrumenterFile() { return { content: await this.readContent(), mutate: this.mutate, name: this.name, }; } async readContent() { if (__classPrivateFieldGet(this, _ProjectFile_currentContent, "f") === undefined) { __classPrivateFieldSet(this, _ProjectFile_currentContent, await this.readOriginal(), "f"); } return __classPrivateFieldGet(this, _ProjectFile_currentContent, "f"); } async readOriginal() { if (__classPrivateFieldGet(this, _ProjectFile_originalContent, "f") === undefined) { try { __classPrivateFieldSet(this, _ProjectFile_originalContent, await this.fs.readFile(this.name, 'utf-8'), "f"); } catch (e) { throw new StrykerError(`Could not read file "${this.name}"`, e); } if (__classPrivateFieldGet(this, _ProjectFile_currentContent, "f") === undefined) { __classPrivateFieldSet(this, _ProjectFile_currentContent, __classPrivateFieldGet(this, _ProjectFile_originalContent, "f"), "f"); } } return __classPrivateFieldGet(this, _ProjectFile_originalContent, "f"); } async writeInPlace() { if (__classPrivateFieldGet(this, _ProjectFile_currentContent, "f") !== undefined && this.hasChanges) { await this.fs.writeFile(this.name, __classPrivateFieldGet(this, _ProjectFile_currentContent, "f"), 'utf-8'); } } async writeToSandbox(sandboxDir) { const folderName = path.join(sandboxDir, path.dirname(__classPrivateFieldGet(this, _ProjectFile_relativePath, "f"))); const targetFileName = path.join(folderName, path.basename(__classPrivateFieldGet(this, _ProjectFile_relativePath, "f"))); await this.fs.mkdir(path.dirname(targetFileName), { recursive: true }); await __classPrivateFieldGet(this, _ProjectFile_instances, "m", _ProjectFile_writeTo).call(this, targetFileName); return targetFileName; } async backupTo(backupDir) { const backupFileName = path.join(backupDir, __classPrivateFieldGet(this, _ProjectFile_relativePath, "f")); await this.fs.mkdir(path.dirname(backupFileName), { recursive: true }); if (__classPrivateFieldGet(this, _ProjectFile_originalContent, "f") === undefined) { await this.fs.copyFile(this.name, backupFileName); } else { await this.fs.writeFile(backupFileName, __classPrivateFieldGet(this, _ProjectFile_originalContent, "f")); } return backupFileName; } get hasChanges() { return __classPrivateFieldGet(this, _ProjectFile_currentContent, "f") !== __classPrivateFieldGet(this, _ProjectFile_originalContent, "f"); } } _ProjectFile_currentContent = new WeakMap(), _ProjectFile_originalContent = new WeakMap(), _ProjectFile_relativePath = new WeakMap(), _ProjectFile_instances = new WeakSet(), _ProjectFile_writeTo = async function _ProjectFile_writeTo(to) { if (__classPrivateFieldGet(this, _ProjectFile_currentContent, "f") === undefined) { await this.fs.copyFile(this.name, to); } else { await this.fs.writeFile(to, __classPrivateFieldGet(this, _ProjectFile_currentContent, "f"), 'utf-8'); } }; //# sourceMappingURL=project-file.js.map