@coat/cli
Version:
TODO: See #3
49 lines (46 loc) • 1.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.groupFiles = groupFiles;
var _getNormalizedFilePath = require("../util/get-normalized-file-path");
var _getRelativeFilePath = require("../util/get-relative-file-path");
/**
* Groups generated files by their normalized absolute path.
*
* Coat files are declared by a relative file path from the current coat
* project. In order to merge files correctly, they are grouped by
* their normalized absolute file path, in order to ensure that entries
* that relate to the same files are merged and placed correctly.
*
* Example with edge cases:
*
* There might be two files that are placed by coat:
* - file.json
* - folder-1/../file.json
*
* Both relate to the same file, but their paths are not equal. Normalizing
* and grouping them helps to merge them correctly and place them on the
* file system with the expected result.
*
* @param files The files that shall be grouped
* @param context The context of the current coat project
*/
function groupFiles(files, context) {
return files.reduce((accumulator, file) => {
var _accumulator$normaliz;
const normalizedPath = (0, _getNormalizedFilePath.getNormalizedFilePath)(file.file, context);
// TODO: See #37
// Validate that all files have the same file properties
// e.g. type, once and local
accumulator[normalizedPath] = {
...file,
content: [...(((_accumulator$normaliz = accumulator[normalizedPath]) === null || _accumulator$normaliz === void 0 ? void 0 : _accumulator$normaliz.content) ?? []), file.content],
once: !!file.once,
local: !!file.local,
file: normalizedPath,
relativePath: (0, _getRelativeFilePath.getRelativeFilePath)(normalizedPath, context)
};
return accumulator;
}, {});
}