@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
87 lines • 4.45 kB
JavaScript
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