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.
54 lines
1.6 KiB
54 lines
1.6 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.moduleNamespace = moduleNamespace;
|
|
/**
|
|
* Returns the namespace of an imported module or `null` if the namespace is removed.
|
|
*
|
|
* Example: no import found, possibly using global function
|
|
* `@use "sass:color";`
|
|
* `moduleNamespace(root, 'sass:map')` returns 'map'
|
|
*
|
|
* Example: default namespace
|
|
* `@use "sass:map";`
|
|
* `moduleNamespace(root, 'sass:map')` returns `map`
|
|
*
|
|
* Example: custom namespace
|
|
* `@use "sass:map" as ns;`
|
|
* `moduleNamespace(root, 'sass:map')` returns 'ns'
|
|
*
|
|
* Example: no namespace
|
|
* `@use "sass:map" as *;`
|
|
* `moduleNamespace(root, 'sass:map')` returns `null`
|
|
*
|
|
* Have a look at the tests for more examples.
|
|
*/
|
|
function moduleNamespace(root, module) {
|
|
var moduleNamespace = getDefaultNamespace(module);
|
|
root.walkAtRules("use", function (rule) {
|
|
var customNamespace = getCustomNamespace(module, rule);
|
|
switch (customNamespace) {
|
|
case null:
|
|
return;
|
|
case "*":
|
|
moduleNamespace = null;
|
|
return;
|
|
default:
|
|
moduleNamespace = customNamespace;
|
|
}
|
|
});
|
|
return moduleNamespace;
|
|
}
|
|
function getDefaultNamespace(module) {
|
|
return module.match(/([^/:]+)$/)[1].replace(/\.[^.]+$/, "");
|
|
}
|
|
function getCustomNamespace(module, rule) {
|
|
var ruleParamsParts = rule.params.split(new RegExp("[\"']".concat(module, "['\"][ \n]*as")));
|
|
if (ruleParamsParts.length < 2) {
|
|
return null;
|
|
}
|
|
var secondRuleParamsPart = ruleParamsParts[1].trim();
|
|
return !secondRuleParamsPart.startsWith("*") ? secondRuleParamsPart.split(" ")[0] : "*";
|
|
}
|