// NOTICE: This file is generated by Rollup. To modify it, // please instead edit the ESM counterpart and rebuild with Rollup (npm run build). 'use strict'; const getAtRuleParams = require('./getAtRuleParams.cjs'); const getRuleSelector = require('./getRuleSelector.cjs'); const validateTypes = require('./validateTypes.cjs'); /** @import {AtRule, Declaration, Rule} from 'postcss' */ /** * @param {AtRule} atRule * @returns {number} */ function atRuleParamIndex(atRule) { const index = atRuleAfterNameIndex(atRule); return index + (atRule.raws.afterName?.length ?? 0); } /** * @param {AtRule} atRule * @returns {number} */ function atRuleAfterIndex(atRule) { // subtract 1 for `}` const endOffset = atRule.source?.end?.offset; if (!endOffset) return atRule.toString().length - 1; const afterLength = atRule.raws?.after?.length; if (!afterLength) return endOffset - 1; return endOffset - (afterLength + 1); } /** * @param {AtRule} atRule * @returns {number} */ function atRuleAfterNameIndex(atRule) { // Initial 1 is for the `@` return 1 + atRule.name.length; } /** * @param {AtRule} atRule * @returns {number} */ function atRuleBetweenIndex(atRule) { return atRuleParamIndex(atRule) + getAtRuleParams(atRule).length; } /** * @param {Declaration} decl * @returns {number} */ function declarationBetweenIndex(decl) { const { prop } = decl.raws; const propIsObject = validateTypes.isObject(prop); return countChars([ propIsObject && 'prefix' in prop && prop.prefix, (propIsObject && 'raw' in prop && prop.raw) || decl.prop, propIsObject && 'suffix' in prop && prop.suffix, ]); } /** * Get the index of a declaration's value * * @param {Declaration} decl * @returns {number} */ function declarationValueIndex(decl) { const { between, value } = decl.raws; return ( declarationBetweenIndex(decl) + countChars([between || ':', value && 'prefix' in value && value.prefix]) ); } /** * @param {Rule} rule * @returns {number} */ function ruleBetweenIndex(rule) { return getRuleSelector(rule).length; } /** * @param {Rule} rule * @returns {number} */ function ruleAfterIndex(rule) { // subtract 1 for `}` const endOffset = rule.source?.end?.offset; if (!endOffset) return rule.toString().length - 1; const afterLength = rule.raws?.after?.length; if (!afterLength) return endOffset - 1; return endOffset - (afterLength + 1); } /** * @param {unknown[]} values * @returns {number} */ function countChars(values) { return values.reduce((/** @type {number} */ count, value) => { if (validateTypes.isString(value)) return count + value.length; return count; }, 0); } exports.atRuleAfterIndex = atRuleAfterIndex; exports.atRuleAfterNameIndex = atRuleAfterNameIndex; exports.atRuleBetweenIndex = atRuleBetweenIndex; exports.atRuleParamIndex = atRuleParamIndex; exports.declarationBetweenIndex = declarationBetweenIndex; exports.declarationValueIndex = declarationValueIndex; exports.ruleAfterIndex = ruleAfterIndex; exports.ruleBetweenIndex = ruleBetweenIndex;