@usefui/svgjsx
Version:
Open Source Command Line Interfaces to generate JSX Icon Components from SVGs.
99 lines ⢠4.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleError = exports.displayCompletion = exports.generateIcons = void 0;
const file_operations_1 = require("../core/file-operations");
const transformers_1 = require("../core/transformers");
const result_1 = require("../utils/result");
const logComponent = (component, outputPath) => {
console.log(`ā
Added ${component.name} to ${outputPath}`);
};
const logSkippedFile = (filename, reason) => {
const message = reason ? `${reason}` : "Invalid component name";
console.warn(`ā ļø Skipped ${filename}: ${message}`);
};
const getMemoryUsage = () => Math.round(process.memoryUsage().heapUsed / 1024);
const processSvgFile = (config) => (svgPath) => {
return (0, result_1.chain)((svgFile) => {
const component = (0, transformers_1.createTsxComponent)(svgFile);
if (!component) {
logSkippedFile(svgFile.name);
return (0, result_1.success)(null);
}
const appendResult = (0, file_operations_1.appendFile)(config.outputFile, component.content);
if (!(0, result_1.isSuccess)(appendResult)) {
return appendResult;
}
logComponent(component, config.outputFile);
return (0, result_1.success)(component);
})((0, file_operations_1.readSvgFile)(svgPath));
};
const generateIcons = (config) => {
console.log(`š Source: ${config.sourceDir}`);
console.log(`š Output: ${config.outputFile}`);
const initResult = (0, file_operations_1.writeFile)(config.outputFile, (0, transformers_1.generateHeader)());
if (!(0, result_1.isSuccess)(initResult)) {
return initResult;
}
return (0, result_1.chain)((svgFiles) => {
if (svgFiles.length === 0) {
console.log(`ā¹ļø No SVG files found in '${config.sourceDir}'`);
return (0, result_1.success)({
componentsCount: 0,
memoryUsed: getMemoryUsage(),
outputPath: config.outputFile,
skippedFiles: [],
});
}
console.log(`š Found ${svgFiles.length} SVG files`);
let successCount = 0;
const skippedFiles = [];
const componentNames = [];
for (let i = 0; i < svgFiles.length; i++) {
const svgPath = svgFiles[i];
if (!svgPath) {
return (0, result_1.failure)(new Error(`Cannot process file with index ${i} in ${svgFiles}`));
}
const result = processSvgFile(config)(svgPath);
if ((0, result_1.isSuccess)(result)) {
if (result.value !== null) {
successCount++;
componentNames.push(result.value.name);
}
else {
skippedFiles.push(svgPath);
}
}
else {
console.error(`ā Error processing ${svgPath}: ${result.error.message}`);
skippedFiles.push(svgPath);
}
}
const exportList = (0, transformers_1.generateExportList)(componentNames);
if (exportList && componentNames.length > 0) {
(0, file_operations_1.appendFile)(config.outputFile, exportList);
}
return (0, result_1.success)({
componentsCount: successCount,
memoryUsed: getMemoryUsage(),
outputPath: config.outputFile,
skippedFiles,
});
})((0, file_operations_1.findSvgFiles)(config.sourceDir));
};
exports.generateIcons = generateIcons;
const displayCompletion = (result) => {
console.log("\nš Generation completed!");
console.log(`š¦ Generated ${result.componentsCount} components`);
console.log(`š½ Memory used: ${result.memoryUsed} KB`);
console.log(`š Output: ${result.outputPath}`);
if (result.skippedFiles.length > 0) {
console.log(`ā ļø Skipped ${result.skippedFiles.length} files`);
}
};
exports.displayCompletion = displayCompletion;
const handleError = (error) => {
console.error(`${error.message}`);
process.exit(1);
};
exports.handleError = handleError;
//# sourceMappingURL=generate.js.map