2023-12-18 13:12:25 +08:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
|
|
value: true
|
|
|
|
});
|
|
|
|
exports.default = _default;
|
|
|
|
var order = {
|
|
|
|
"*": 0,
|
|
|
|
"/": 0,
|
|
|
|
"+": 1,
|
|
|
|
"-": 1
|
|
|
|
};
|
|
|
|
|
|
|
|
function round(value, prec) {
|
|
|
|
if (prec !== false) {
|
|
|
|
var precision = Math.pow(10, prec);
|
|
|
|
return Math.round(value * precision) / precision;
|
|
|
|
}
|
|
|
|
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
function stringify(node, prec) {
|
|
|
|
switch (node.type) {
|
|
|
|
case "MathExpression":
|
|
|
|
{
|
|
|
|
var left = node.left,
|
|
|
|
right = node.right,
|
|
|
|
op = node.operator;
|
|
|
|
var str = "";
|
2024-01-16 21:26:16 +08:00
|
|
|
|
|
|
|
if (left.type === 'MathExpression' && order[op] < order[left.operator]) {
|
|
|
|
str += `(${stringify(left, prec)})`;
|
|
|
|
} else {
|
|
|
|
str += stringify(left, prec);
|
|
|
|
}
|
|
|
|
|
2023-12-18 13:12:25 +08:00
|
|
|
str += order[op] ? ` ${node.operator} ` : node.operator;
|
2024-01-16 21:26:16 +08:00
|
|
|
|
|
|
|
if (right.type === 'MathExpression' && order[op] < order[right.operator]) {
|
|
|
|
str += `(${stringify(right, prec)})`;
|
|
|
|
} else {
|
|
|
|
str += stringify(right, prec);
|
|
|
|
}
|
|
|
|
|
2023-12-18 13:12:25 +08:00
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
2024-01-16 21:26:16 +08:00
|
|
|
case 'Number':
|
2023-12-18 13:12:25 +08:00
|
|
|
return round(node.value, prec);
|
|
|
|
|
|
|
|
case 'Function':
|
|
|
|
return node.value;
|
|
|
|
|
|
|
|
default:
|
|
|
|
return round(node.value, prec) + node.unit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function _default(calc, node, originalValue, options, result, item) {
|
|
|
|
var str = stringify(node, options.precision);
|
2024-01-16 21:26:16 +08:00
|
|
|
var shouldPrintCalc = node.type === "MathExpression" || node.type === "Function";
|
2023-12-18 13:12:25 +08:00
|
|
|
|
2024-01-16 21:26:16 +08:00
|
|
|
if (shouldPrintCalc) {
|
2023-12-18 13:12:25 +08:00
|
|
|
// if calc expression couldn't be resolved to a single value, re-wrap it as
|
|
|
|
// a calc()
|
|
|
|
str = `${calc}(${str})`; // if the warnWhenCannotResolve option is on, inform the user that the calc
|
|
|
|
// expression could not be resolved to a single value
|
|
|
|
|
|
|
|
if (options.warnWhenCannotResolve) {
|
|
|
|
result.warn("Could not reduce expression: " + originalValue, {
|
|
|
|
plugin: 'postcss-calc',
|
|
|
|
node: item
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = exports.default;
|