89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
'use strict';
|
|
var __importDefault =
|
|
(this && this.__importDefault) ||
|
|
function (mod) {
|
|
return mod && mod.__esModule ? mod : { default: mod };
|
|
};
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
const path_1 = __importDefault(require('path'));
|
|
const chalk_1 = __importDefault(require('chalk'));
|
|
const common_1 = require('./common');
|
|
const log_1 = require('./log');
|
|
const win32 = process.platform === 'win32';
|
|
function hasParent(file, records) {
|
|
const dirname = path_1.default.dirname(file);
|
|
// root directory
|
|
if (dirname === file) {
|
|
return false;
|
|
}
|
|
return Boolean(records[dirname]);
|
|
}
|
|
function purgeTopDirectories(records) {
|
|
while (true) {
|
|
let found = false;
|
|
for (const file in records) {
|
|
if (records[file]) {
|
|
const record = records[file];
|
|
const links = record[common_1.STORE_LINKS];
|
|
if (links && links.length === 1) {
|
|
if (!hasParent(file, records)) {
|
|
const file2 = path_1.default.join(file, links[0]);
|
|
const record2 = records[file2];
|
|
const links2 = record2[common_1.STORE_LINKS];
|
|
if (links2 && links2.length === 1) {
|
|
const file3 = path_1.default.join(file2, links2[0]);
|
|
const record3 = records[file3];
|
|
const links3 = record3[common_1.STORE_LINKS];
|
|
if (links3) {
|
|
delete records[file];
|
|
log_1.log.debug(
|
|
chalk_1.default.cyan('Deleting record file :', file)
|
|
);
|
|
found = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!found) break;
|
|
}
|
|
}
|
|
function denominate(records, entrypoint, denominator, symLinks) {
|
|
const newRecords = {};
|
|
const makeSnap = (file) => {
|
|
let snap = (0, common_1.substituteDenominator)(file, denominator);
|
|
if (win32) {
|
|
if (snap.slice(1) === ':') snap += '\\';
|
|
} else if (snap === '') {
|
|
snap = '/';
|
|
}
|
|
return snap;
|
|
};
|
|
for (const file in records) {
|
|
if (records[file]) {
|
|
const snap = makeSnap(file);
|
|
newRecords[snap] = records[file];
|
|
}
|
|
}
|
|
const tmpSymLinks = symLinks;
|
|
symLinks = {};
|
|
for (const [key, value] of Object.entries(tmpSymLinks)) {
|
|
const key1 = makeSnap(key);
|
|
const value1 = makeSnap(value);
|
|
symLinks[key1] = value1;
|
|
}
|
|
return {
|
|
records: newRecords,
|
|
entrypoint: (0, common_1.substituteDenominator)(entrypoint, denominator),
|
|
symLinks,
|
|
};
|
|
}
|
|
function refiner(records, entrypoint, symLinks) {
|
|
purgeTopDirectories(records);
|
|
const denominator = (0, common_1.retrieveDenominator)(Object.keys(records));
|
|
return denominate(records, entrypoint, denominator, symLinks);
|
|
}
|
|
exports.default = refiner;
|
|
//# sourceMappingURL=refiner.js.map
|