sass-compiler
Version:
Compile Sass or Scss to CSS.
123 lines (122 loc) • 4.88 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SassHelper = void 0;
const compiler = __importStar(require("sass"));
const helper_1 = require("./helper");
class SassHelper {
static toSassOptions(format) {
return {
style: format.format,
};
}
static instanceOfSassExcpetion(object) {
return "formatted" in object;
}
static compileOne(SassPath, targetCssUri, mapFileUri, options) {
const generateMap = helper_1.Helper.getConfigSettings("generateMap"), data = {};
Object.assign(data, options);
data.logger = {
warn: (message, options) => {
console.warn([message].concat(this.format(options.span, options.stack, options.deprecation)));
},
debug: (message, options) => {
console.log([message].concat(this.format(options.span)));
},
};
try {
const compile_returns = compiler.compile(SassPath, {
...data,
sourceMap: generateMap,
logger: data.logger
});
const new_result = {
css: compile_returns.css.toString(),
...(generateMap && { map: JSON.stringify(compile_returns.sourceMap) } || {}),
};
return { result: new_result, errorString: null };
}
catch (err) {
console.error(err);
if (this.instanceOfSassExcpetion(err)) {
return { result: null, errorString: err.formatted };
}
else if (err instanceof Error) {
return { result: null, errorString: err.message };
}
return { result: null, errorString: "Unexpected error" };
}
}
static format(span, stack, deprecated) {
const stringArray = [];
if (span === undefined || span === null) {
if (stack !== undefined) {
stringArray.push(stack);
}
}
else {
stringArray.push(this.charOfLength(span.start.line.toString().length, "╷"));
let lineNumber = span.start.line;
do {
stringArray.push(`${lineNumber} |${span.context?.split("\n")[lineNumber - span.start.line] ??
span.text.split("\n")[lineNumber - span.start.line]}`);
lineNumber++;
} while (lineNumber < span.end.line);
stringArray.push(this.charOfLength(span.start.line.toString().length, this.addUnderLine(span)));
stringArray.push(this.charOfLength(span.start.line.toString().length, "╵"));
if (span.url) {
// possibly include `,${span.end.line}:${span.end.column}`, if VS Code ever supports it
stringArray.push(`${span.url.toString()}:${span.start.line}:${span.start.column}`);
}
}
if (deprecated === true) {
stringArray.push("THIS IS DEPRECATED AND WILL BE REMOVED IN SASS 2.0");
}
return stringArray;
}
static charOfLength(charCount, suffix, char = " ") {
if (charCount < 0) {
return suffix ?? "";
}
let outString = "";
for (let item = 0; item <= charCount; item++) {
outString += char;
}
return outString + (suffix ?? "");
}
static addUnderLine(span) {
let outString = "|";
if (span.start.line !== span.end.line) {
outString += this.charOfLength(span.end.column - 4, "...^");
}
else {
outString +=
this.charOfLength(span.start.column - 2, "^") +
this.charOfLength(span.end.column - span.start.column - 1, "^", ".");
}
return outString;
}
}
exports.SassHelper = SassHelper;