sass-export
Version:
Exports Sass files to Json format, able to manage sections with annotations in comments.
104 lines • 4.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Converter = void 0;
const fs = require("fs");
const sass = require("sass");
const glob = require("glob");
const parser_1 = require("../parser");
const utils_1 = require("../utils");
const LINE_BREAK = '\n';
class Converter {
constructor(options) {
this.options = options;
this.options = options || {};
}
getArray() {
let content = this.getContent();
let parsedDeclarations = new parser_1.Parser(content).parse();
return parsedDeclarations.map((declaration) => {
let isMap = false;
if (declaration.mapValue) {
isMap = true;
}
declaration.compiledValue = this.renderPropertyValue(content, declaration, isMap);
declaration.name = `$${declaration.name}`;
if (declaration.mapValue) {
declaration.mapValue.map((mapDeclaration) => {
mapDeclaration.compiledValue = this.renderPropertyValue(content, mapDeclaration, true);
return mapDeclaration;
});
}
return declaration;
});
}
getStructured() {
let content = this.getContent();
let structuredDeclaration = new parser_1.Parser(content).parseStructured();
structuredDeclaration = this.compileStructure(structuredDeclaration);
return structuredDeclaration;
}
compileStructure(structuredDeclaration) {
let groups = Object.keys(structuredDeclaration);
groups.forEach((group) => {
let content = this.getContent();
let isMap = false;
let compiledGroup = structuredDeclaration[group].map((declaration) => {
if (declaration.mapValue) {
isMap = true;
}
declaration.compiledValue = this.renderPropertyValue(content, declaration, isMap);
declaration.name = `$${declaration.name}`;
if (declaration.mapValue) {
declaration.mapValue.map((mapDeclaration) => {
mapDeclaration.compiledValue = this.renderPropertyValue(content, mapDeclaration, true);
return mapDeclaration;
});
}
return declaration;
});
});
return this.checkForMixins(structuredDeclaration);
}
getContent() {
let inputFiles = [];
let inputs = [];
if (!Array.isArray(this.options.inputFiles)) {
inputFiles.push(this.options.inputFiles);
}
else {
inputFiles = this.options.inputFiles;
}
inputFiles.forEach((path) => {
let files = glob.sync(String(path));
inputs.push(...files);
});
let contents = inputs.map((filePath) => fs.readFileSync(String(filePath)));
return contents.join(LINE_BREAK);
}
checkForMixins(structuredDeclaration) {
let mixinsGroup = 'mixins';
let parsedMixins = new parser_1.Mixins(this.getContent()).parse();
if (parsedMixins && parsedMixins.length) {
structuredDeclaration[mixinsGroup] = parsedMixins;
}
return structuredDeclaration;
}
renderPropertyValue(content, declaration, isMap) {
try {
let rendered = sass.renderSync({
data: content + LINE_BREAK + utils_1.Utils.wrapCss(declaration, isMap),
includePaths: this.options.includePaths,
outputStyle: 'compressed'
});
let wrappedRendered = String(rendered.css);
wrappedRendered = utils_1.Utils.removeDoubleQuotes(wrappedRendered);
return utils_1.Utils.unWrapValue(wrappedRendered);
}
catch (err) {
console.error(err);
return '';
}
}
}
exports.Converter = Converter;
//# sourceMappingURL=converter.js.map