|
|
- "use strict";
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
-
- var _path = _interopRequireDefault(require("path"));
-
- var _os = _interopRequireDefault(require("os"));
-
- var _fs = _interopRequireDefault(require("fs"));
-
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
- // A typical sass error looks like this
- // const SassError = {
- // message: "invalid property name",
- // column: 14,
- // line: 1,
- // file: "stdin",
- // status: 1
- // };
-
- /**
- * Enhances the sass error with additional information about what actually went wrong.
- *
- * @param {SassError} error
- * @param {string} resourcePath
- */
- function formatSassError(error, resourcePath) {
- // Instruct webpack to hide the JS stack from the console
- // Usually you're only interested in the SASS stack in this case.
- // eslint-disable-next-line no-param-reassign
- error.hideStack = true; // The file property is missing in rare cases.
- // No improvement in the error is possible.
-
- if (!error.file) {
- return;
- }
-
- let msg = error.message;
-
- if (error.file === 'stdin') {
- // eslint-disable-next-line no-param-reassign
- error.file = resourcePath;
- } // node-sass returns UNIX-style paths
- // eslint-disable-next-line no-param-reassign
-
-
- error.file = _path.default.normalize(error.file); // The 'Current dir' hint of node-sass does not help us, we're providing
- // additional information by reading the err.file property
-
- msg = msg.replace(/\s*Current dir:\s*/, ''); // msg = msg.replace(/(\s*)(stdin)(\s*)/, `$1${err.file}$3`);
- // eslint-disable-next-line no-param-reassign
-
- error.message = `${getFileExcerptIfPossible(error) + msg.charAt(0).toUpperCase() + msg.slice(1) + _os.default.EOL} in ${error.file} (line ${error.line}, column ${error.column})`;
- }
- /**
- * Tries to get an excerpt of the file where the error happened.
- * Uses err.line and err.column.
- *
- * Returns an empty string if the excerpt could not be retrieved.
- *
- * @param {SassError} error
- * @returns {string}
- */
-
-
- function getFileExcerptIfPossible(error) {
- try {
- const content = _fs.default.readFileSync(error.file, 'utf8');
-
- return `${_os.default.EOL + content.split(/\r?\n/)[error.line - 1] + _os.default.EOL + new Array(error.column - 1).join(' ')}^${_os.default.EOL} `;
- } catch (ignoreError) {
- // If anything goes wrong here, we don't want any errors to be reported to the user
- return '';
- }
- }
-
- var _default = formatSassError;
- exports.default = _default;
|