* Get the `less` options from the loader context and normalizes its values * @param {LoaderContext} loaderContext loader context * @param {LoaderOptions} loaderOptions loader options * @param {Less} implementation implementation * @returns {{ lessOptions: LessOptions, pendingDependencyTasks: Pro
(loaderContext, loaderOptions, implementation)
| 298 | * @returns {{ lessOptions: LessOptions, pendingDependencyTasks: Promise<void>[] }} implementation and pending tasks |
| 299 | */ |
| 300 | function getLessOptions(loaderContext, loaderOptions, implementation) { |
| 301 | const options = |
| 302 | typeof loaderOptions.lessOptions === "function" |
| 303 | ? loaderOptions.lessOptions(loaderContext) || {} |
| 304 | : loaderOptions.lessOptions || {}; |
| 305 | |
| 306 | /** @type {LessOptions} */ |
| 307 | const lessOptions = { |
| 308 | // @ts-expect-error bad types |
| 309 | relativeUrls: true, |
| 310 | // We need to set the filename because otherwise our WebpackFileManager will receive an undefined path for the entry |
| 311 | filename: loaderContext.resourcePath, |
| 312 | ...options, |
| 313 | }; |
| 314 | |
| 315 | // Collects async dependency-resolution promises kicked off from |
| 316 | // synchronous Less file loads (e.g. `data-uri()`, `@plugin`). The loader |
| 317 | // awaits these before completing so webpack's dependency snapshot is |
| 318 | // accurate. |
| 319 | /** @type {Promise<void>[]} */ |
| 320 | const pendingDependencyTasks = []; |
| 321 | |
| 322 | /** @type {LessPlugin[]} */ |
| 323 | const plugins = [...(lessOptions.plugins || [])]; |
| 324 | const shouldUseWebpackImporter = |
| 325 | typeof loaderOptions.webpackImporter === "boolean" || |
| 326 | loaderOptions.webpackImporter === "only" |
| 327 | ? loaderOptions.webpackImporter |
| 328 | : true; |
| 329 | |
| 330 | if (shouldUseWebpackImporter) { |
| 331 | plugins.unshift( |
| 332 | createWebpackLessPlugin( |
| 333 | loaderContext, |
| 334 | implementation, |
| 335 | pendingDependencyTasks, |
| 336 | ), |
| 337 | ); |
| 338 | } |
| 339 | |
| 340 | plugins.unshift({ |
| 341 | /** |
| 342 | * @param {Less} less less |
| 343 | * @param {PluginManager} pluginManager plugin manager |
| 344 | */ |
| 345 | install(less, pluginManager) { |
| 346 | // @ts-expect-error to provide loader context into plugin |
| 347 | pluginManager.webpackLoaderContext = loaderContext; |
| 348 | // @ts-expect-error to reset it after execution |
| 349 | lessOptions.pluginManager = pluginManager; |
| 350 | }, |
| 351 | }); |
| 352 | |
| 353 | lessOptions.plugins = plugins; |
| 354 | |
| 355 | return { lessOptions, pendingDependencyTasks }; |
| 356 | } |
| 357 |
no test coverage detected
searching dependent graphs…