ts-to-html
Version:
TS and SASS compiler for a HTML with live preview
59 lines (58 loc) • 2.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compileAll = exports.compileSassFile = exports.compileSASS = exports.compileTS = void 0;
const node_fs_1 = require("node:fs");
const node_path_1 = require("node:path");
const autoprefixer_1 = __importDefault(require("autoprefixer"));
const postcss_1 = __importDefault(require("postcss"));
const sass_1 = require("sass");
const webpack_1 = require("webpack");
const webpack_2 = __importDefault(require("../config/webpack"));
const log_1 = require("./log");
const compileTS = (config = webpack_2.default) => new Promise((resolve, reject) => {
const compiler = (0, webpack_1.webpack)(config);
compiler.run((err, stats) => {
if (err)
reject(err);
resolve(stats?.toString({ colors: true }));
});
});
exports.compileTS = compileTS;
const compileSASS = (...files) => {
const paths = files.flat();
const result = [];
for (const file of paths) {
try {
result.push({ file, css: (0, sass_1.compile)(file, { style: "compressed" }).css });
}
catch (error) {
result.push({ error });
}
}
return result;
};
exports.compileSASS = compileSASS;
const compileSassFile = async (input, minified = false) => {
// prefix and compile CSS
const { css } = await (0, postcss_1.default)([autoprefixer_1.default]).process((0, sass_1.compile)(input, { style: minified ? "compressed" : "expanded" }).css, { from: undefined });
// Return CSS
return css;
};
exports.compileSassFile = compileSassFile;
const compileAll = async () => {
(0, log_1.clearAndLog)("Compiling...".yellow);
// Compile TS
await (0, exports.compileTS)();
// Get SASS files
const dir = (0, node_fs_1.readdirSync)((0, node_path_1.resolve)(process.cwd(), "public")).map(e => (0, node_path_1.resolve)(process.cwd(), "public", e));
const sassFiles = dir.filter(e => e.endsWith('.scss'));
// Compile SASS
for (const file of sassFiles) {
const css = await (0, exports.compileSassFile)(file);
(0, node_fs_1.writeFileSync)(file.replace(/\.scss$/, '.css'), css);
}
};
exports.compileAll = compileAll;