braindrops.nicwands.com/shared/libs/sass/utils.js
2026-07-17 11:24:36 -04:00

108 lines
2 KiB
JavaScript

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