/* GoToSocial Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ "use strict"; const fs = require("fs"); const path = require("path"); const chalk = require("chalk"); const {Writable} = require("stream"); const {out} = require("../index.js"); const fromRegex = /\/\* from (.+?) \*\//; module.exports = function splitCSS() { let chunks = []; return new Writable({ write: function(chunk, encoding, next) { chunks.push(chunk); next(); }, final: function() { let stream = chunks.join(""); let input; let content = []; function write() { if (content.length != 0) { if (input == undefined) { if (content[0].length != 0) { throw new Error("Got CSS content without filename, can't output: ", content); } } else { console.log(chalk.blue("CSS: writing to", out(input))); fs.writeFileSync(out(input), content.join("\n")); } content = []; } } const cssDir = path.join(__dirname, "../css"); stream.split("\n").forEach((line) => { if (line.startsWith("/* from")) { let found = fromRegex.exec(line); if (found != null) { write(); let parts = path.parse(found[1]); if (path.relative(cssDir, path.join(process.cwd(), parts.dir)) == "") { input = parts.base; } else { // prefix filename with path let relative = path.relative(path.join(__dirname, "../"), path.join(process.cwd(), found[1])); input = relative.replace(/\//g, "-"); } } } else { content.push(line); } }); write(); } }); };