From 9ed333ed7ea50aabbbca64c779c593f2c4b950ad Mon Sep 17 00:00:00 2001 From: Kamen Bundev Date: Mon, 13 May 2019 14:34:13 +0300 Subject: [PATCH] Add support for custom importers similar to node-sass ones (without done() async) --- index.js | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 4c3655b..7bd4d16 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ var sassJs = require('sass.js'), _ = require('lodash'), path = require('path'), fs = require('fs'), + utils = require('loader-utils'), getNodeModuleDir = require('./lib/get-node-module-dir'), getResolvedPath = require('./lib/get-resolved-path'), @@ -16,8 +17,35 @@ module.exports = function(content) { sassJs.importer(function(request, done) { // Adapted from - // eslint-disable-next-line max-len + // eslint-disable-next-line max-len // https://github.com/amiramw/grunt-contrib-sassjs/blob/a65f869df967a4e417c4260fd93239e4f0bc55ee/tasks/sass.js#L11 + + var options = utils.getOptions(self); + + if (options && options.importer) { + if (!(options.importer instanceof Array)) { + options.importer = [ options.importer ]; + } + + options.importer.some((importer) => { + var imported = importer(request.current, request.previous); + + if (imported.file !== null) { + request.current = imported.file; + request.resolved = imported.file; + + return true; + } + + if (imported.contents !== null) { + request.path = request.resolved; + request.content = imported.contents; + + return true; + } + }) + } + if (request.path) { done(); } else if (request.resolved) { @@ -84,4 +112,4 @@ function getRootNodeModulesDir(name) { } throw e; } -} \ No newline at end of file +}