UNPKG

sass-compiler

Version:

Compile Sass or Scss to CSS.

123 lines (122 loc) 4.88 kB
"use strict"; 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;