// 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);