scss-extract
Version:
Extract structured variables from scss files. Fast and accurate.
77 lines (66 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createStructuredValue = createStructuredValue;
var _sass = require('sass');
var _sass2 = _interopRequireDefault(_sass);
var _util = require('./util');
var _serialize = require('./serialize');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Transform a sassValue into a structured value based on the value type
*/
function makeValue(sassValue) {
if (sassValue instanceof _sass2.default.types.Boolean || sassValue instanceof _sass2.default.types.String) {
return { value: sassValue.getValue() };
}
if (sassValue instanceof _sass2.default.types.Number) {
return { value: sassValue.getValue(), unit: sassValue.getUnit() };
}
if (sassValue instanceof _sass2.default.types.Color) {
var r = Math.round(sassValue.getR());
var g = Math.round(sassValue.getG());
var b = Math.round(sassValue.getB());
return {
value: {
r: r,
g: g,
b: b,
a: sassValue.getA(),
hex: '#' + (0, _util.toColorHex)(r) + (0, _util.toColorHex)(g) + (0, _util.toColorHex)(b)
}
};
}
if (sassValue instanceof _sass2.default.types.Null) {
return { value: null };
}
if (sassValue instanceof _sass2.default.types.List) {
var listLength = sassValue.getLength();
var listValue = [];
for (var i = 0; i < listLength; i++) {
listValue.push(createStructuredValue(sassValue.getValue(i)));
}
return { value: listValue, separator: sassValue.getSeparator() ? ',' : ' ' };
}
if (sassValue instanceof _sass2.default.types.Map) {
var mapLength = sassValue.getLength();
var mapValue = {};
for (var _i = 0; _i < mapLength; _i++) {
// Serialize map keys of arbitrary type for extracted struct
var serializedKey = (0, _serialize.serialize)(sassValue.getKey(_i));
mapValue[serializedKey] = createStructuredValue(sassValue.getValue(_i));
}
return { value: mapValue };
}
throw new Error('Unsupported sass variable type \'' + sassValue.constructor.name + '\'');
}
/**
* Create a structured value definition from a sassValue object
*/
function createStructuredValue(sassValue) {
var value = Object.assign({
type: sassValue.constructor.name
}, makeValue(sassValue));
return value;
}