UNPKG

@ui5/task-adaptation

Version:

Custom task for ui5-builder which allows building UI5 Flexibility Adaptation Projects for SAP BTP, Cloud Foundry environment

65 lines 2.29 kB
import * as fs from "fs"; import * as path from "path"; import ResourceUtil from "../util/resourceUtil.js"; import tempFolder from "temp-dir"; export default class CacheManager { configuration; constructor(configuration) { this.configuration = configuration; } getTempFolder() { return path.join(tempFolder, this.getTempId()); } async getFiles(fetchMetadata, fetchFiles) { const tempMetadata = this.readTempMetadata(); const metadata = await fetchMetadata(); if (this.isMetadataSame(tempMetadata, metadata)) { return this.readTemp(); } else { const files = await fetchFiles(); if (files?.size > 0) { await this.writeTemp(files, metadata); } return files; } } isMetadataSame(tempMetadata, metadata) { // TODO: Implement correct metadata comparision. return tempMetadata && metadata && tempMetadata.changedOn === metadata.changedOn; } readTempMetadata() { const tempFolder = this.getTempFolder(); const filename = this.getMetadataFilename(); const metadataPath = path.resolve(tempFolder, filename); if (fs.existsSync(metadataPath)) { return JSON.parse(fs.readFileSync(metadataPath, { encoding: "utf-8" })); } } writeTemp(files, metadata) { this.deleteTemp(); const filesToCache = this.getFilesToCache(files, metadata); return ResourceUtil.write(this.getTempFolder(), filesToCache); } async readTemp() { const files = new Map(); const tempFolder = this.getTempFolder(); if (fs.existsSync(tempFolder)) { ResourceUtil.read(tempFolder, tempFolder, files, [this.getMetadataFilename()]); } return files; } deleteTemp() { fs.rmSync(this.getTempFolder(), { recursive: true, force: true }); } normalizeId(id) { return id.replace(/\/\\/g, "_"); } getFilesToCache(files, metadata) { const filename = this.getMetadataFilename(); const filesClone = new Map([...files]); filesClone.set(filename, JSON.stringify(metadata)); return filesClone; } } //# sourceMappingURL=cacheManager.js.map