UNPKG

scss-extract

Version:

Extract structured variables from scss files. Fast and accurate.

93 lines (80 loc) 2.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.serialize = serialize; var _sass = require('sass'); var _sass2 = _interopRequireDefault(_sass); var _util = require('./util'); var _parseColor = require('parse-color'); var _parseColor2 = _interopRequireDefault(_parseColor); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Serialize a given sass color into a color name like 'white', an rgba(r,g,b,a), or #000000 string * based on the color provided */ function serializeColor(sassColor) { var alpha = Math.round(sassColor.getA() * 100) / 100; var r = Math.round(sassColor.getR()); var g = Math.round(sassColor.getG()); var b = Math.round(sassColor.getB()); if (alpha < 0.999) { return 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')'; } var hex = '#' + (0, _util.toColorHex)(r) + (0, _util.toColorHex)(g) + (0, _util.toColorHex)(b); var parsedColor = (0, _parseColor2.default)(hex); if (parsedColor.keyword != null) { return parsedColor.keyword; } return hex; } /** * Transform a SassValue into a serialized string */ function serializeValue(sassValue, isInList) { if (sassValue instanceof _sass2.default.types.Boolean || sassValue instanceof _sass2.default.types.String) { return '' + sassValue.getValue(); } if (sassValue instanceof _sass2.default.types.Number) { return '' + sassValue.getValue() + sassValue.getUnit(); } if (sassValue instanceof _sass2.default.types.Color) { return serializeColor(sassValue); } if (sassValue instanceof _sass2.default.types.Null) { return 'null'; } if (sassValue instanceof _sass2.default.types.List) { var listLength = sassValue.getLength(); var listElement = []; var hasSeparator = sassValue.getSeparator(); for (var i = 0; i < listLength; i++) { listElement.push(serialize(sassValue.getValue(i), true)); } // Make sure nested lists are serialized with surrounding parenthesis if (isInList) { return '(' + listElement.join(hasSeparator ? ',' : ' ') + ')'; } return '' + listElement.join(hasSeparator ? ',' : ' '); } if (sassValue instanceof _sass2.default.types.Map) { var mapLength = sassValue.getLength(); var mapValue = {}; for (var _i = 0; _i < mapLength; _i++) { var key = serialize(sassValue.getKey(_i)); var value = serialize(sassValue.getValue(_i)); mapValue[key] = value; } var serializedMapValues = Object.keys(mapValue).map(function (key) { return key + ': ' + mapValue[key]; }); return '(' + serializedMapValues + ')'; } throw new Error('Unsupported sass variable type \'' + sassValue.constructor.name + '\''); } /** * Create a serialized string from a sassValue object */ function serialize(sassValue, isInList) { return serializeValue(sassValue, isInList); }