UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

73 lines (72 loc) 2.96 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const DifferenceSet_1 = __importDefault(require("./DifferenceSet")); const IFileDifference_1 = require("./IFileDifference"); const StorageUtilities_1 = __importDefault(require("./StorageUtilities")); class Thumbprint { fileInfos = {}; compare(secondThumbprint, compareOnlyLeafs) { const tempFileInfos = {}; for (const fileInfoPath in this.fileInfos) { let comparePath = fileInfoPath; if (compareOnlyLeafs) { comparePath = StorageUtilities_1.default.canonicalizeName(StorageUtilities_1.default.getLeafName(fileInfoPath)); } tempFileInfos[comparePath] = this.fileInfos[fileInfoPath]; } for (const fileInfoPath in secondThumbprint.fileInfos) { const compareFile = secondThumbprint.fileInfos[fileInfoPath]; if (compareFile) { let comparePath = fileInfoPath; if (compareOnlyLeafs) { comparePath = StorageUtilities_1.default.canonicalizeName(StorageUtilities_1.default.getLeafName(fileInfoPath)); } const sourceFileInfo = tempFileInfos[comparePath]; if (sourceFileInfo !== undefined) { if (sourceFileInfo.size === compareFile.size) { tempFileInfos[comparePath] = undefined; } } } } const diffSet = new DifferenceSet_1.default(); for (const fileInfoPath in tempFileInfos) { const fi = tempFileInfos[fileInfoPath]; if (fi) { diffSet.fileDifferences.push({ type: IFileDifference_1.FileDifferenceType.contentsDifferent, path: fileInfoPath, }); } } return diffSet; } async create(folder) { const tempFileInfos = {}; await this._createInternal(folder, tempFileInfos); this.fileInfos = tempFileInfos; } async _createInternal(folder, fileInfos) { if (!folder.isLoaded) { await folder.load(); } for (const fileName in folder.files) { const file = folder.files[fileName]; if (file) { fileInfos[file.storageRelativePath] = { size: file.content ? file.content.length : -1 }; } } for (const folderName in folder.folders) { const childFolder = folder.folders[folderName]; if (childFolder && !childFolder.errorStatus) { await this._createInternal(childFolder, fileInfos); } } } } exports.default = Thumbprint;