UNPKG

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
"use strict"; 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=