import * as fs from "fs"; import * as util from "util"; const deepmerge = require("deepmerge"); const readFile = util.promisify(fs.readFile); const subst = `$1`; const subst2 = `$2`; const tranformfileliquid = async ( pathFileCss1 = "./test/_variables.scss", pathFileCss2 = "./test/css-variables.liquid", pathFileOutPut = "./test/css-var-output.css" ) => { const data1 = await readFile(pathFileCss1); const content1Remove = data1 .toString() .replace(/\/.*\*\//gm, "") .replace(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, "") .replace(/{% comment %}.*{% endcomment %}/gm, "") .replace(/\s/gm, "") .replace(/\n/gm, "") .replace(/\r/gm, "") .split(/[;]+/) .filter(value => Object.keys(value).length !== 0) .filter(value => value !== ""); const regex = /\$(.*)\:(.*)/gm; const filterFormat: any = content1Remove.map(data => { const result1 = data.replace(regex, subst); const result2 = data.replace(regex, subst2); return { KeyElm: result1, ValueElm: result2, isTran: 0 }; }); const data2 = await readFile(pathFileCss2); const regex2 = /.*\-\-(.*)\:(.*)/gm; const contentRemove2 = data2 .toString() .replace(/\/.*\*\//gm, "") .replace(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, "") .replace(/{% comment %}.*{% endcomment %}/gm, "") .replace(/\s/gm, "") .replace(/\n/gm, "") .replace(/\r/gm, "") .split(/[;]+/) .filter(value => Object.keys(value).length !== 0) .filter(value => value !== ""); // console.log(JSON.stringify(contentRemove2)); const filterFormat2: any = contentRemove2.map(data => { const result1 = data.replace(regex2, subst); const result2 = data.replace(regex2, subst2); return { KeyElm: result1, ValueElm: result2, isTran: 1 }; }); let dataArrayCheck = []; const mergeArray = deepmerge(filterFormat, filterFormat2); mergeArray.map(data => { const findId = dataArrayCheck.findIndex( dataw => dataw.KeyElm === data.KeyElm ); if (findId >= 0) { dataArrayCheck[findId].ValueElm = data.ValueElm; dataArrayCheck[findId].isTran = 1; } else { dataArrayCheck.push({ KeyElm: data.KeyElm, ValueElm: data.ValueElm, isTran: data.isTran }); } }); const resultLength = dataArrayCheck.length; const wiK = dataArrayCheck.map((data, i) => { if (data.isTran === 1) { return `$${data.KeyElm}: ${data.ValueElm};`; } else { if (i === 0) { return `// $${data.KeyElm}: ${data.ValueElm};\n`; } else if (i === resultLength) { return `\n// $${data.KeyElm}: ${data.ValueElm};`; } else { return `// $${data.KeyElm}: ${data.ValueElm};\n`; } } }); fs.writeFile(pathFileOutPut, wiK.join("\n"), err => { if (err) { return console.log(err); } return console.log("success"); }); }; export { tranformfileliquid }; export default tranformfileliquid;