'use strict' const path = require('path') const fs = require('fs') const fse = require('fs-extra') const crypto = require('crypto') const yaml = require('js-yaml') const JSZip = require('jszip') const tmpDirCommonPath = require('@serverless/test/process-tmp-dir') function getTmpDirPath() { return path.join(tmpDirCommonPath, crypto.randomBytes(8).toString('hex')) } function getTmpFilePath(fileName) { return path.join(getTmpDirPath(), fileName) } function createTmpDir() { const dirPath = getTmpDirPath() fse.ensureDirSync(dirPath) return dirPath } function createTmpFile(name) { const filePath = getTmpFilePath(name) fse.ensureFileSync(filePath) return filePath } function replaceTextInFile(filePath, subString, newSubString) { const fileContent = fs.readFileSync(filePath).toString() fs.writeFileSync(filePath, fileContent.replace(subString, newSubString)) } function readYamlFile(filePath) { const content = fs.readFileSync(filePath, 'utf8') return yaml.load(content) } function writeYamlFile(filePath, content) { const data = yaml.dump(content) fs.writeFileSync(filePath, data) return data } function listZipFiles(filename) { return new JSZip() .loadAsync(fs.readFileSync(filename)) .then((zip) => Object.keys(zip.files)) } async function listFileProperties(filename) { const zip = await new JSZip().loadAsync(fs.readFileSync(filename)) return zip.files } module.exports = { tmpDirCommonPath, getTmpDirPath, getTmpFilePath, createTmpDir, createTmpFile, replaceTextInFile, readYamlFile, writeYamlFile, listZipFiles, listFileProperties, }