| "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] : "*"; |
| } |