basic setup
This commit is contained in:
108
libs/sass-utils/utils.js
Normal file
108
libs/sass-utils/utils.js
Normal file
@@ -0,0 +1,108 @@
|
||||
// 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)
|
||||
Reference in New Issue
Block a user