You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							4.3 KiB
						
					
					
				"use strict"; | 
						|
 | 
						|
Object.defineProperty(exports, "__esModule", { | 
						|
  value: true | 
						|
}); | 
						|
exports.default = void 0; | 
						|
 | 
						|
var _os = _interopRequireDefault(require("os")); | 
						|
 | 
						|
var _path = _interopRequireDefault(require("path")); | 
						|
 | 
						|
var _cloneDeep = _interopRequireDefault(require("clone-deep")); | 
						|
 | 
						|
var _proxyCustomImporters = _interopRequireDefault(require("./proxyCustomImporters")); | 
						|
 | 
						|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | 
						|
 | 
						|
function isProductionLikeMode(loaderContext) { | 
						|
  return loaderContext.mode === 'production' || !loaderContext.mode || loaderContext.minimize; | 
						|
} | 
						|
/** | 
						|
 * Derives the sass options from the loader context and normalizes its values with sane defaults. | 
						|
 * | 
						|
 * @param {object} loaderContext | 
						|
 * @param {object} loaderOptions | 
						|
 * @param {string} content | 
						|
 * @param {object} implementation | 
						|
 * @returns {Object} | 
						|
 */ | 
						|
 | 
						|
 | 
						|
function getSassOptions(loaderContext, loaderOptions, content, implementation) { | 
						|
  const options = (0, _cloneDeep.default)(loaderOptions.sassOptions ? typeof loaderOptions.sassOptions === 'function' ? loaderOptions.sassOptions(loaderContext) || {} : loaderOptions.sassOptions : {}); | 
						|
  const isDartSass = implementation.info.includes('dart-sass'); | 
						|
 | 
						|
  if (isDartSass) { | 
						|
    const shouldTryToResolveFibers = !options.fiber && options.fiber !== false; | 
						|
 | 
						|
    if (shouldTryToResolveFibers) { | 
						|
      let fibers; | 
						|
 | 
						|
      try { | 
						|
        fibers = require.resolve('fibers'); | 
						|
      } catch (_error) {// Nothing | 
						|
      } | 
						|
 | 
						|
      if (fibers) { | 
						|
        // eslint-disable-next-line global-require, import/no-dynamic-require | 
						|
        options.fiber = require(fibers); | 
						|
      } | 
						|
    } else if (options.fiber === false) { | 
						|
      // Don't pass the `fiber` option for `sass` (`Dart Sass`) | 
						|
      delete options.fiber; | 
						|
    } | 
						|
  } else { | 
						|
    // Don't pass the `fiber` option for `node-sass` | 
						|
    delete options.fiber; | 
						|
  } | 
						|
 | 
						|
  options.data = loaderOptions.prependData ? typeof loaderOptions.prependData === 'function' ? loaderOptions.prependData(loaderContext) + _os.default.EOL + content : loaderOptions.prependData + _os.default.EOL + content : content; // opt.outputStyle | 
						|
 | 
						|
  if (!options.outputStyle && isProductionLikeMode(loaderContext)) { | 
						|
    options.outputStyle = 'compressed'; | 
						|
  } | 
						|
 | 
						|
  const useSourceMap = typeof loaderOptions.sourceMap === 'boolean' ? loaderOptions.sourceMap : loaderContext.sourceMap; // opt.sourceMap | 
						|
  // Not using the `this.sourceMap` flag because css source maps are different | 
						|
  // @see https://github.com/webpack/css-loader/pull/40 | 
						|
 | 
						|
  if (useSourceMap) { | 
						|
    // Deliberately overriding the sourceMap option here. | 
						|
    // node-sass won't produce source maps if the data option is used and options.sourceMap is not a string. | 
						|
    // In case it is a string, options.sourceMap should be a path where the source map is written. | 
						|
    // But since we're using the data option, the source map will not actually be written, but | 
						|
    // all paths in sourceMap.sources will be relative to that path. | 
						|
    // Pretty complicated... :( | 
						|
    options.sourceMap = _path.default.join(process.cwd(), '/sass.map'); | 
						|
 | 
						|
    if ('sourceMapRoot' in options === false) { | 
						|
      options.sourceMapRoot = process.cwd(); | 
						|
    } | 
						|
 | 
						|
    if ('omitSourceMapUrl' in options === false) { | 
						|
      // The source map url doesn't make sense because we don't know the output path | 
						|
      // The css-loader will handle that for us | 
						|
      options.omitSourceMapUrl = true; | 
						|
    } | 
						|
 | 
						|
    if ('sourceMapContents' in options === false) { | 
						|
      // If sourceMapContents option is not set, set it to true otherwise maps will be empty/null | 
						|
      // when exported by webpack-extract-text-plugin. | 
						|
      options.sourceMapContents = true; | 
						|
    } | 
						|
  } | 
						|
 | 
						|
  const { | 
						|
    resourcePath | 
						|
  } = loaderContext; | 
						|
 | 
						|
  const ext = _path.default.extname(resourcePath); // If we are compiling sass and indentedSyntax isn't set, automatically set it. | 
						|
 | 
						|
 | 
						|
  if (ext && ext.toLowerCase() === '.sass' && 'indentedSyntax' in options === false) { | 
						|
    options.indentedSyntax = true; | 
						|
  } else { | 
						|
    options.indentedSyntax = Boolean(options.indentedSyntax); | 
						|
  } // Allow passing custom importers to `node-sass`. Accepts `Function` or an array of `Function`s. | 
						|
 | 
						|
 | 
						|
  options.importer = options.importer ? (0, _proxyCustomImporters.default)(options.importer, resourcePath) : []; | 
						|
  options.includePaths = (options.includePaths || []).concat(_path.default.dirname(resourcePath)); | 
						|
  return options; | 
						|
} | 
						|
 | 
						|
var _default = getSassOptions; | 
						|
exports.default = _default; |