UNPKG

@serenity-js/core

Version:

The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure

122 lines 5.18 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.FileSystem = void 0; const nodeOS = __importStar(require("node:os")); const cuid2_1 = require("@paralleldrive/cuid2"); const gracefulFS = __importStar(require("graceful-fs")); const Path_1 = require("./Path"); class FileSystem { root; fs; os; directoryMode; constructor(root, fs = gracefulFS, os = nodeOS, directoryMode = Number.parseInt('0777', 8) & (~process.umask())) { this.root = root; this.fs = fs; this.os = os; this.directoryMode = directoryMode; } resolve(relativeOrAbsolutePath) { return this.root.resolve(relativeOrAbsolutePath); } async store(relativeOrAbsolutePathToFile, data, encoding) { await this.ensureDirectoryExistsAt(relativeOrAbsolutePathToFile.directory()); return this.writeFile(relativeOrAbsolutePathToFile, data, encoding); } readFile(relativeOrAbsolutePathToFile, options) { return this.fs.promises.readFile(this.resolve(relativeOrAbsolutePathToFile).value, options); } readFileSync(relativeOrAbsolutePathToFile, options) { return this.fs.readFileSync(this.resolve(relativeOrAbsolutePathToFile).value, options); } async writeFile(relativeOrAbsolutePathToFile, data, options) { const resolvedPath = this.resolve(relativeOrAbsolutePathToFile); await this.fs.promises.writeFile(resolvedPath.value, data, options); return resolvedPath; } writeFileSync(relativeOrAbsolutePathToFile, data, options) { const resolvedPath = this.resolve(relativeOrAbsolutePathToFile); this.fs.writeFileSync(resolvedPath.value, data, options); return resolvedPath; } createReadStream(relativeOrAbsolutePathToFile) { return this.fs.createReadStream(this.resolve(relativeOrAbsolutePathToFile).value); } createWriteStreamTo(relativeOrAbsolutePathToFile) { return this.fs.createWriteStream(this.resolve(relativeOrAbsolutePathToFile).value); } stat(relativeOrAbsolutePathToFile) { return this.fs.promises.stat(this.resolve(relativeOrAbsolutePathToFile).value); } exists(relativeOrAbsolutePathToFile) { return this.fs.existsSync(this.resolve(relativeOrAbsolutePathToFile).value); } async remove(relativeOrAbsolutePathToFileOrDirectory) { try { const absolutePath = this.resolve(relativeOrAbsolutePathToFileOrDirectory); const stat = await this.stat(relativeOrAbsolutePathToFileOrDirectory); if (stat.isFile()) { await this.fs.promises.unlink(absolutePath.value); } else { const entries = await this.fs.promises.readdir(absolutePath.value); for (const entry of entries) { await this.remove(absolutePath.join(new Path_1.Path(entry))); } await this.fs.promises.rmdir(absolutePath.value); } } catch (error) { if (error?.code === 'ENOENT') { return void 0; } throw error; } } async ensureDirectoryExistsAt(relativeOrAbsolutePathToDirectory) { const absolutePath = this.resolve(relativeOrAbsolutePathToDirectory); await this.fs.promises.mkdir(absolutePath.value, { recursive: true, mode: this.directoryMode }); return absolutePath; } rename(source, destination) { return this.fs.promises.rename(source.value, destination.value); } tempFilePath(prefix = '', suffix = '.tmp') { return Path_1.Path.from(this.fs.realpathSync(this.os.tmpdir()), `${prefix}${(0, cuid2_1.createId)()}${suffix}`); } } exports.FileSystem = FileSystem; //# sourceMappingURL=FileSystem.js.map