// https://github.com/dawaltconley/sass-cast/blob/main/utils.js import * as sass from 'sass-embedded' /** * Check if string is quoted * @private * @param {string} str * @return {boolean} */ export const isQuoted = (str) => /^['"].*['"]$/.test(str) /** * Surrounds a string with quotes * @private * @param {string} str * @param {string} q - quotes, double or single * @return {string} */ export const quoteString = (str, q) => { if (!q) return str if (isQuoted(str)) { q = str[0] str = str.slice(1, -1) } let r = new RegExp(q, 'g') return q + str.replace(r, '\\' + q) + q } /** * Unquotes a string * @private * @param {string} str * @return {string} */ export const unquoteString = (str) => (isQuoted(str) ? str.slice(1, -1) : str) /** * Parse a string as a Sass object * cribbed from davidkpiano/sassport * * @private * @param {string} str * @return {Value} */ export const parseString = (str) => { let result try { sass.compileString(`$_: ___(${str});`, { functions: { '___($value)': (args) => { result = args[0] return result }, }, }) } catch (e) { return str } return result } /** * Parse a string as a legacy Sass object * cribbed from davidkpiano/sassport * * @private * @param {string} str * @return {LegacyObject} */ export const parseStringLegacy = (str) => { let result try { sass.renderSync({ data: `$_: ___((${str}));`, functions: { '___($value)': (value) => { result = value return value }, }, }) } catch (e) { return str } return result } /** * Function to handle 'toString()' methods with legacy API. * * @private * @param {LegacyObject} obj * @return {string} */ export const legacyToString = (obj) => (obj.dartValue || obj).toString() /** * Return a value from an object and a list of keys. * @private * @param {Object|Array} obj * @param {*[]} attrs */ export const getAttr = (obj, attrs) => attrs.reduce((o, attr) => o[attr], obj)