diff options
Diffstat (limited to 'node_modules/csso/cjs/replace/Number.cjs')
| -rw-r--r-- | node_modules/csso/cjs/replace/Number.cjs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/node_modules/csso/cjs/replace/Number.cjs b/node_modules/csso/cjs/replace/Number.cjs new file mode 100644 index 00000000..d85d6b52 --- /dev/null +++ b/node_modules/csso/cjs/replace/Number.cjs @@ -0,0 +1,45 @@ +'use strict'; + +const OMIT_PLUSSIGN = /^(?:\+|(-))?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/; +const KEEP_PLUSSIGN = /^([\+\-])?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/; +const unsafeToRemovePlusSignAfter = new Set([ + 'Dimension', + 'Hash', + 'Identifier', + 'Number', + 'Raw', + 'UnicodeRange' +]); + +function packNumber(value, item) { + // omit plus sign only if no prev or prev is safe type + const regexp = item && item.prev !== null && unsafeToRemovePlusSignAfter.has(item.prev.data.type) + ? KEEP_PLUSSIGN + : OMIT_PLUSSIGN; + + // 100 -> '100' + // 00100 -> '100' + // +100 -> '100' + // -100 -> '-100' + // 0.123 -> '.123' + // 0.12300 -> '.123' + // 0.0 -> '' + // 0 -> '' + // -0 -> '-' + value = String(value).replace(regexp, '$1$2$3'); + + if (value === '' || value === '-') { + value = '0'; + } + // FIXME: is it solution simplier? + // value = String(Number(value)).replace(/^(-?)0+\./, '$1.'); + + return value; +} + +function Number(node) { + node.value = packNumber(node.value); +} + +exports.Number = Number; +exports.packNumber = packNumber; |
