lib-tools
Version:
The lib-tools helps you simplify the build, bundle, test and npm packaging workflows for Typescript, JavaScript, Angular library projects and assets module projects.
97 lines • 17.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.prepareStyles = void 0;
const path = require("path");
const fs_extra_1 = require("fs-extra");
const utils_1 = require("../utils");
const inputExtRegExp = /\.(sass|scss|css)$/i;
const outputExtRegExp = /\.css$/i;
async function prepareStyles(buildConfig) {
if (!buildConfig.style) {
return;
}
const styleOptions = buildConfig.style;
if (!styleOptions.compilations || !styleOptions.compilations.length) {
return;
}
const projectName = buildConfig._projectName;
const projectRoot = buildConfig._projectRoot;
let packageJsonStyleEntry;
for (let i = 0; i < styleOptions.compilations.length; i++) {
const styleEntry = styleOptions.compilations[i];
if (!styleEntry.input || !styleEntry.input.trim().length) {
throw new Error(`Style input file is required, please correct value in 'projects[${projectName}].tasks.build.style.compilations[${i}].input'.`);
}
if (!inputExtRegExp.test(styleEntry.input)) {
throw new Error(`Unsupported style input file '${styleEntry.input}', please correct value in 'projects[${projectName}].tasks.build.style.compilations[${i}].input'.`);
}
const inputFilePath = path.resolve(projectRoot, styleEntry.input);
const inputFileExists = await fs_extra_1.pathExists(inputFilePath);
if (!inputFileExists) {
throw new Error(`Style input file '${inputFilePath}' doesn't exist, please correct value in 'projects[${projectName}].tasks.build.style.compilations[${i}].input'.`);
}
let outputFilePath;
if (styleEntry.output) {
const extName = path.extname(styleEntry.output);
if (!extName || styleEntry.output.endsWith('/')) {
const outputFileName = path.basename(inputFilePath).replace(inputExtRegExp, '.css');
outputFilePath = path.resolve(buildConfig._outputPath, styleEntry.output, outputFileName);
}
else {
if (!outputExtRegExp.test(extName)) {
throw new Error(`Unsupported style output file '${styleEntry.input}', correct value in 'projects[${projectName}].tasks.build.style.compilations[${i}].output'.`);
}
outputFilePath = path.resolve(buildConfig._outputPath, styleEntry.output);
}
}
else {
const outputFileName = path.basename(inputFilePath).replace(inputExtRegExp, '.css');
outputFilePath = path.resolve(buildConfig._outputPath, outputFileName);
}
let includePaths = [];
if (styleEntry.includePaths) {
includePaths = styleEntry.includePaths.map((includePath) => path.resolve(projectRoot, includePath));
}
else if (styleOptions.includePaths) {
includePaths = styleOptions.includePaths.map((includePath) => path.resolve(projectRoot, includePath));
}
let sourceMap = true;
if (styleEntry.sourceMap != null) {
sourceMap = styleEntry.sourceMap;
}
else if (styleOptions.sourceMap != null) {
sourceMap = styleOptions.sourceMap;
}
let sourceMapContents = true;
if (styleEntry.sourceMapContents != null) {
sourceMapContents = styleEntry.sourceMapContents;
}
else if (styleOptions.sourceMapContents != null) {
sourceMapContents = styleOptions.sourceMapContents;
}
let vendorPrefixes = true;
if (styleEntry.vendorPrefixes != null) {
vendorPrefixes = styleEntry.vendorPrefixes;
}
else if (styleOptions.vendorPrefixes != null) {
vendorPrefixes = styleOptions.vendorPrefixes;
}
let minify = true;
if (styleEntry.minify != null) {
minify = styleEntry.minify;
}
else if (styleOptions.minify != null) {
minify = styleOptions.minify;
}
const minOutputFilePath = path.resolve(path.dirname(outputFilePath), `${path.parse(outputFilePath).name}.min.css`);
if (!packageJsonStyleEntry && styleOptions.addToPackageJson !== false) {
packageJsonStyleEntry = utils_1.normalizePath(path.relative(buildConfig._packageJsonOutDir, outputFilePath));
}
buildConfig._styleEntries.push(Object.assign(Object.assign({}, styleEntry), { _inputFilePath: inputFilePath, _outputFilePath: outputFilePath, _includePaths: includePaths, _sourceMap: sourceMap, _sourceMapContents: sourceMapContents, _vendorPrefixes: vendorPrefixes, _minify: minify, _minOutputFilePath: minOutputFilePath }));
}
if (styleOptions.addToPackageJson !== false && packageJsonStyleEntry) {
buildConfig._packageJsonEntryPoint.style = packageJsonStyleEntry;
}
}
exports.prepareStyles = prepareStyles;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1zdHlsZXMuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbImhlbHBlcnMvcHJlcGFyZS1zdHlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQTZCO0FBRTdCLHVDQUFzQztBQUd0QyxvQ0FBeUM7QUFFekMsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7QUFDN0MsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBRTNCLEtBQUssVUFBVSxhQUFhLENBQUMsV0FBZ0M7SUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7UUFDcEIsT0FBTztLQUNWO0lBRUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUV2QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQ2pFLE9BQU87S0FDVjtJQUVELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDN0MsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztJQUM3QyxJQUFJLHFCQUF5QyxDQUFDO0lBRTlDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN2RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FDWCxtRUFBbUUsV0FBVyxvQ0FBb0MsQ0FBQyxXQUFXLENBQ2pJLENBQUM7U0FDTDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMs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a0JBQWtCLEVBQUUsaUJBQWlCLEVBQ3JDLGVBQWUsRUFBRSxjQUFjLEVBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQ2Ysa0JBQWtCLEVBQUUsaUJBQWlCLElBQ3ZDLENBQUM7S0FDTjtJQUVELElBQUksWUFBWSxDQUFDLGdCQUFnQixLQUFLLEtBQUssSUFBSSxxQkFBcUIsRUFBRTtRQUNsRSxXQUFXLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLHFCQUFxQixDQUFDO0tBQ3BFO0FBQ0wsQ0FBQztBQXpIRCxzQ0F5SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnZnMtZXh0cmEnO1xuXG5pbXBvcnQgeyBBdXRvUHJlZml4ZXJPcHRpb25zLCBCdWlsZENvbmZpZ0ludGVybmFsLCBDbGVhbkNTU09wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgaW5wdXRFeHRSZWdFeHAgPSAvXFwuKHNhc3N8c2Nzc3xjc3MpJC9pO1xuY29uc3Qgb3V0cHV0RXh0UmVnRXhwID0gL1xcLmNzcyQvaTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVTdHlsZXMoYnVpbGRDb25maWc6IEJ1aWxkQ29uZmlnSW50ZXJuYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWJ1aWxkQ29uZmlnLnN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZU9wdGlvbnMgPSBidWlsZENvbmZpZy5zdHlsZTtcblxuICAgIGlmICghc3R5bGVPcHRpb25zLmNvbXBpbGF0aW9ucyB8fCAhc3R5bGVPcHRpb25zLmNvbXBpbGF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plY3ROYW1lID0gYnVpbGRDb25maWcuX3Byb2plY3ROYW1lO1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gYnVpbGRDb25maWcuX3Byb2plY3RSb290O1xuICAgIGxldCBwYWNrYWdlSnNvblN0eWxlRW50cnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVPcHRpb25zLmNvbXBpbGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzdHlsZUVudHJ5ID0gc3R5bGVPcHRpb25zLmNvbXBpbGF0aW9uc1tpXTtcbiAgICAgICAgaWYgKCFzdHlsZUVudHJ5LmlucHV0IHx8ICFzdHlsZUVudHJ5LmlucHV0LnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgU3R5bGUgaW5wdXQgZmlsZSBpcyByZXF1aXJlZCwgcGxlYXNlIGNvcnJlY3QgdmFsdWUgaW4gJ3Byb2plY3RzWyR7cHJvamVjdE5hbWV9XS50YXNrcy5idWlsZC5zdHlsZS5jb21waWxhdGlvbnNbJHtpfV0uaW5wdXQnLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlucHV0RXh0UmVnRXhwLnRlc3Qoc3R5bGVFbnRyeS5pbnB1dCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgc3R5bGUgaW5wdXQgZmlsZSAnJHtzdHlsZUVudHJ5LmlucHV0fScsIHBsZWFzZSBjb3JyZWN0IHZhbHVlIGluICdwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0udGFza3MuYnVpbGQuc3R5bGUuY29tcGlsYXRpb25zWyR7aX1dLmlucHV0Jy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5wdXRGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0Um9vdCwgc3R5bGVFbnRyeS5pbnB1dCk7XG4gICAgICAgIGNvbnN0IGlucHV0RmlsZUV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoaW5wdXRGaWxlUGF0aCk7XG4gICAgICAgIGlmICghaW5wdXRGaWxlRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFN0eWxlIGlucHV0IGZpbGUgJyR7aW5wdXRGaWxlUGF0aH0nIGRvZXNuJ3QgZXhpc3QsIHBsZWFzZSBjb3JyZWN0IHZhbHVlIGluICdwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0udGFza3MuYnVpbGQuc3R5bGUuY29tcGlsYXRpb25zWyR7aX1dLmlucHV0Jy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG91dHB1dEZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHN0eWxlRW50cnkub3V0cHV0KSB7XG4gICAgICAgICAgICBjb25zdCBleHROYW1lID0gcGF0aC5leHRuYW1lKHN0eWxlRW50cnkub3V0cHV0KTtcblxuICAgICAgICAgICAgaWYgKCFleHROYW1lIHx8IHN0eWxlRW50cnkub3V0cHV0LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5wdXRGaWxlUGF0aCkucmVwbGFjZShpbnB1dEV4dFJlZ0V4cCwgJy5jc3MnKTtcbiAgICAgICAgICAgICAgICBvdXRwdXRGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShidWlsZENvbmZpZy5fb3V0cHV0UGF0aCwgc3R5bGVFbnRyeS5vdXRwdXQsIG91dHB1dEZpbGVOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvdXRwdXRFeHRSZWdFeHAudGVzdChleHROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgc3R5bGUgb3V0cHV0IGZpbGUgJyR7c3R5bGVFbnRyeS5pbnB1dH0nLCBjb3JyZWN0IHZhbHVlIGluICdwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0udGFza3MuYnVpbGQuc3R5bGUuY29tcGlsYXRpb25zWyR7aX1dLm91dHB1dCcuYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG91dHB1dEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGJ1aWxkQ29uZmlnLl9vdXRwdXRQYXRoLCBzdHlsZUVudHJ5Lm91dHB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoaW5wdXRGaWxlUGF0aCkucmVwbGFjZShpbnB1dEV4dFJlZ0V4cCwgJy5jc3MnKTtcbiAgICAgICAgICAgIG91dHB1dEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGJ1aWxkQ29uZmlnLl9vdXRwdXRQYXRoLCBvdXRwdXRGaWxlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5jbHVkZVBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoc3R5bGVFbnRyeS5pbmNsdWRlUGF0aHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGVQYXRocyA9IHN0eWxlRW50cnkuaW5jbHVkZVBhdGhzLm1hcCgoaW5jbHVkZVBhdGg6IHN0cmluZykgPT4gcGF0aC5yZXNvbHZlKHByb2plY3RSb290LCBpbmNsdWRlUGF0aCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0eWxlT3B0aW9ucy5pbmNsdWRlUGF0aHMpIHtcbiAgICAgICAgICAgIGluY2x1ZGVQYXRocyA9IHN0eWxlT3B0aW9ucy5pbmNsdWRlUGF0aHMubWFwKChpbmNsdWRlUGF0aDogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShwcm9qZWN0Um9vdCwgaW5jbHVkZVBhdGgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNvdXJjZU1hcCA9IHRydWU7XG4gICAgICAgIGlmIChzdHlsZUVudHJ5LnNvdXJjZU1hcCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VNYXAgPSBzdHlsZUVudHJ5LnNvdXJjZU1hcDtcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZU9wdGlvbnMuc291cmNlTWFwICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZU1hcCA9IHN0eWxlT3B0aW9ucy5zb3VyY2VNYXA7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc291cmNlTWFwQ29udGVudHMgPSB0cnVlO1xuICAgICAgICBpZiAoc3R5bGVFbnRyeS5zb3VyY2VNYXBDb250ZW50cyAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2VNYXBDb250ZW50cyA9IHN0eWxlRW50cnkuc291cmNlTWFwQ29udGVudHM7XG4gICAgICAgIH0gZWxzZSBpZiAoc3R5bGVPcHRpb25zLnNvdXJjZU1hcENvbnRlbnRzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNvdXJjZU1hcENvbnRlbnRzID0gc3R5bGVPcHRpb25zLnNvdXJjZU1hcENvbnRlbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZlbmRvclByZWZpeGVzOiBib29sZWFuIHwgQXV0b1ByZWZpeGVyT3B0aW9ucyA9IHRydWU7XG4gICAgICAgIGlmIChzdHlsZUVudHJ5LnZlbmRvclByZWZpeGVzICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZlbmRvclByZWZpeGVzID0gc3R5bGVFbnRyeS52ZW5kb3JQcmVmaXhlcztcbiAgICAgICAgfSBlbHNlIGlmIChzdHlsZU9wdGlvbnMudmVuZG9yUHJlZml4ZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmVuZG9yUHJlZml4ZXMgPSBzdHlsZU9wdGlvbnMudmVuZG9yUHJlZml4ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWluaWZ5OiBib29sZWFuIHwgQ2xlYW5DU1NPcHRpb25zID0gdHJ1ZTtcbiAgICAgICAgaWYgKHN0eWxlRW50cnkubWluaWZ5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbmlmeSA9IHN0eWxlRW50cnkubWluaWZ5O1xuICAgICAgICB9IGVsc2UgaWYgKHN0eWxlT3B0aW9ucy5taW5pZnkgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWluaWZ5ID0gc3R5bGVPcHRpb25zLm1pbmlmeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1pbk91dHB1dEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICAgICAgcGF0aC5kaXJuYW1lKG91dHB1dEZpbGVQYXRoKSxcbiAgICAgICAgICAgIGAke3BhdGgucGFyc2Uob3V0cHV0RmlsZVBhdGgpLm5hbWV9Lm1pbi5jc3NgXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFwYWNrYWdlSnNvblN0eWxlRW50cnkgJiYgc3R5bGVPcHRpb25zLmFkZFRvUGFja2FnZUpzb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBwYWNrYWdlSnNvblN0eWxlRW50cnkgPSBub3JtYWxpemVQYXRoKHBhdGgucmVsYXRpdmUoYnVpbGRDb25maWcuX3BhY2thZ2VKc29uT3V0RGlyLCBvdXRwdXRGaWxlUGF0aCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVpbGRDb25maWcuX3N0eWxlRW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLnN0eWxlRW50cnksXG4gICAgICAgICAgICBfaW5wdXRGaWxlUGF0aDogaW5wdXRGaWxlUGF0aCxcbiAgICAgICAgICAgIF9vdXRwdXRGaWxlUGF0aDogb3V0cHV0RmlsZVBhdGgsXG4gICAgICAgICAgICBfaW5jbHVkZVBhdGhzOiBpbmNsdWRlUGF0aHMsXG4gICAgICAgICAgICBfc291cmNlTWFwOiBzb3VyY2VNYXAsXG4gICAgICAgICAgICBfc291cmNlTWFwQ29udGVudHM6IHNvdXJjZU1hcENvbnRlbnRzLFxuICAgICAgICAgICAgX3ZlbmRvclByZWZpeGVzOiB2ZW5kb3JQcmVmaXhlcyxcbiAgICAgICAgICAgIF9taW5pZnk6IG1pbmlmeSxcbiAgICAgICAgICAgIF9taW5PdXRwdXRGaWxlUGF0aDogbWluT3V0cHV0RmlsZVBhdGhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlT3B0aW9ucy5hZGRUb1BhY2thZ2VKc29uICE9PSBmYWxzZSAmJiBwYWNrYWdlSnNvblN0eWxlRW50cnkpIHtcbiAgICAgICAgYnVpbGRDb25maWcuX3BhY2thZ2VKc29uRW50cnlQb2ludC5zdHlsZSA9IHBhY2thZ2VKc29uU3R5bGVFbnRyeTtcbiAgICB9XG59XG4iXX0=