From 888d72e340b6d176e95c15d5f96ca412af86a66a Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Mon, 11 Jul 2022 20:00:40 +0300 Subject: [PATCH] fix: unexpected failing on CSS syntax error (#593) --- src/index.js | 30 +++++++++++++++--------------- src/utils.js | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/index.js b/src/index.js index b1083d85..db014c1e 100644 --- a/src/index.js +++ b/src/index.js @@ -4,7 +4,6 @@ import { satisfies } from "semver"; import postcssPackage from "postcss/package.json"; import Warning from "./Warning"; -import SyntaxError from "./Error"; import schema from "./options.json"; import { loadConfig, @@ -14,6 +13,7 @@ import { normalizeSourceMapAfterPostcss, findPackageJSONDir, getPostcssImplementation, + reportError, } from "./utils"; let hasExplicitDependencyOnPostCSS = false; @@ -169,15 +169,7 @@ export default async function loader(content, sourceMap, meta) { } } - if (error.file) { - this.addDependency(error.file); - } - - if (error.name === "CssSyntaxError") { - callback(new SyntaxError(error)); - } else { - callback(error); - } + reportError(this, callback, error); return; } @@ -223,11 +215,19 @@ export default async function loader(content, sourceMap, meta) { map = normalizeSourceMapAfterPostcss(map, this.context); } - const ast = { - type: "postcss", - version: result.processor.version, - root: result.root, - }; + let ast; + + try { + ast = { + type: "postcss", + version: result.processor.version, + root: result.root, + }; + } catch (error) { + reportError(this, callback, error); + + return; + } callback(null, result.css, map, { ast }); } diff --git a/src/utils.js b/src/utils.js index 810ea40b..83384e20 100644 --- a/src/utils.js +++ b/src/utils.js @@ -4,6 +4,8 @@ import Module from "module"; import { klona } from "klona/full"; import { cosmiconfig } from "cosmiconfig"; +import SyntaxError from "./Error"; + const parentModule = module; const stat = (inputFileSystem, filePath) => @@ -450,6 +452,18 @@ function getPostcssImplementation(loaderContext, implementation) { return resolvedImplementation; } +function reportError(loaderContext, callback, error) { + if (error.file) { + loaderContext.addDependency(error.file); + } + + if (error.name === "CssSyntaxError") { + callback(new SyntaxError(error)); + } else { + callback(error); + } +} + export { loadConfig, getPostcssOptions, @@ -458,4 +472,5 @@ export { normalizeSourceMapAfterPostcss, findPackageJSONDir, getPostcssImplementation, + reportError, };