* Derives the sass options from the loader context and normalizes its values with sane defaults. * @param {LoaderContext} loaderContext loader context * @param {LoaderOptions} loaderOptions loader options * @param {string} content content * @param {boolean} useSourceMap true when need to generat
( loaderContext, loaderOptions, content, useSourceMap, )
| 182 | * @returns {Promise<Required<KnownSassOptions> & { data: string }>} sass options |
| 183 | */ |
| 184 | async function getSassOptions( |
| 185 | loaderContext, |
| 186 | loaderOptions, |
| 187 | content, |
| 188 | useSourceMap, |
| 189 | ) { |
| 190 | /** @type {SassOptions} */ |
| 191 | const options = loaderOptions.sassOptions |
| 192 | ? typeof loaderOptions.sassOptions === "function" |
| 193 | ? loaderOptions.sassOptions(loaderContext) || {} |
| 194 | : loaderOptions.sassOptions |
| 195 | : {}; |
| 196 | /** @type {KnownSassOptions & { data: string }} */ |
| 197 | const sassOptions = { |
| 198 | ...options, |
| 199 | data: loaderOptions.additionalData |
| 200 | ? typeof loaderOptions.additionalData === "function" |
| 201 | ? await loaderOptions.additionalData(content, loaderContext) |
| 202 | : `${loaderOptions.additionalData}\n${content}` |
| 203 | : content, |
| 204 | }; |
| 205 | |
| 206 | if (!sassOptions.logger) { |
| 207 | const needEmitWarning = loaderOptions.warnRuleAsWarning !== false; |
| 208 | const logger = loaderContext.getLogger("sass-loader"); |
| 209 | /** |
| 210 | * @param {SourceSpan} span span |
| 211 | * @returns {string} formatted span |
| 212 | */ |
| 213 | const formatSpan = (span) => |
| 214 | `Warning on line ${span.start.line}, column ${span.start.column} of ${ |
| 215 | span.url || "-" |
| 216 | }:${span.start.line}:${span.start.column}:\n`; |
| 217 | /** |
| 218 | * @param {SourceSpan} span span |
| 219 | * @returns {string} formatted debug span |
| 220 | */ |
| 221 | const formatDebugSpan = (span) => |
| 222 | `[debug:${span.start.line}:${span.start.column}] `; |
| 223 | |
| 224 | sassOptions.logger = { |
| 225 | /** |
| 226 | * @param {string} message message |
| 227 | * @param {{ span: SourceSpan }} loggerOptions logger options |
| 228 | * @returns {void} |
| 229 | */ |
| 230 | debug(message, loggerOptions) { |
| 231 | let builtMessage = ""; |
| 232 | |
| 233 | if (loggerOptions.span) { |
| 234 | builtMessage = formatDebugSpan(loggerOptions.span); |
| 235 | } |
| 236 | |
| 237 | builtMessage += message; |
| 238 | |
| 239 | logger.debug(builtMessage); |
| 240 | }, |
| 241 | /** |
no test coverage detected
searching dependent graphs…