MCPcopy Create free account
hub / github.com/webpack/less-loader / getLessOptions

Function getLessOptions

src/utils.js:300–356  ·  view source on GitHub ↗

* 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)

Source from the content-addressed store, hash-verified

298 * @returns {{ lessOptions: LessOptions, pendingDependencyTasks: Promise<void>[] }} implementation and pending tasks
299 */
300function 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

Callers 1

lessLoaderFunction · 0.90

Calls 1

createWebpackLessPluginFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…