node-sass-json-functions 3.2.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport round from 'round-to';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {import('../index').SassType} SassType\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\n/**\n * @param {SassType} value\n */\nfunction getJsonValueFromSassValue(value) {\n\tlet resolvedValue;\n\tif (value instanceof sass.types.List) {\n\t\tresolvedValue = listToArray(value);\n\t} else if (value instanceof sass.types.Map) {\n\t\tresolvedValue = mapToObject(value);\n\t} else if (value instanceof sass.types.Color) {\n\t\t/** @type {[number, number, number]} */\n\t\tconst rgbValue = [value.getR(), value.getG(), value.getB()];\n\t\tconst alphaValue = value.getA();\n\t\tif (alphaValue === 1) {\n\t\t\tresolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);\n\t\t} else {\n\t\t\tresolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;\n\t\t}\n\t} else if (value instanceof sass.types.Number) {\n\t\tif (value.getUnit() !== '') {\n\t\t\tresolvedValue = String(\n\t\t\t\tround(Number(value.getValue()), 0) + value.getUnit()\n\t\t\t);\n\t\t} else {\n\t\t\tresolvedValue = round(Number(value.getValue()), 0);\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tif ('getValue' in value) {\n\t\t\t\tresolvedValue = value.getValue();\n\t\t\t} else {\n\t\t\t\tresolvedValue = null;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tresolvedValue = null;\n\t\t}\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {sass.types.List} list\n */\nfunction listToArray(list) {\n\tconst length = list.getLength();\n\t/** @type {JsonArray} */\n\tconst data = [];\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst value = getJsonValueFromSassValue(list.getValue(index));\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.types.Map} map\n */\nfunction mapToObject(map) {\n\tconst length = map.getLength();\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst key = String(map.getKey(index).getValue());\n\t\tconst value = getJsonValueFromSassValue(map.getValue(index));\n\t\tdata[key] = value;\n\t}\n\treturn data;\n}\n\nexport default getJsonValueFromSassValue;\n","import sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\n\n/**\n * @typedef {import('../index').SassType} SassType\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\nconst unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];\n\n/**\n * @param {string} value\n */\nfunction isColor(value) {\n\treturn typeof parseColor(value).rgba !== 'undefined';\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToStringOrNumber(value) {\n\tlet resolvedValue;\n\ttry {\n\t\tconst { value: parsedValue, unit, type } = parseUnit(value);\n\t\tif (unitTypes.includes(type)) {\n\t\t\tresolvedValue = new sass.types.Number(parsedValue, unit);\n\t\t} else if (type === 'percentage') {\n\t\t\tresolvedValue = new sass.types.Number(parsedValue, '%');\n\t\t} else {\n\t\t\tresolvedValue = new sass.types.String(value);\n\t\t}\n\t} catch (error) {\n\t\tresolvedValue = new sass.types.String(value);\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToColor(value) {\n\tconst [r, g, b, a] = parseColor(value).rgba;\n\treturn new sass.types.Color(r, g, b, a);\n}\n\n/**\n * @param {JsonValue} value\n */\nfunction setJsonValueToSassValue(value) {\n\tlet resolvedValue;\n\tif (Array.isArray(value)) {\n\t\tresolvedValue = arrayToList(value);\n\t} else if (isPlainObject(value)) {\n\t\tresolvedValue = objectToMap(value);\n\t} else if (isColor(String(value))) {\n\t\tresolvedValue = parseValueToColor(String(value));\n\t} else if (typeof value === 'string') {\n\t\tresolvedValue = parseValueToStringOrNumber(value);\n\t} else if (typeof value === 'number') {\n\t\tresolvedValue = new sass.types.Number(value);\n\t} else if (typeof value === 'boolean') {\n\t\tresolvedValue = value\n\t\t\t? sass.types.Boolean.TRUE\n\t\t\t: sass.types.Boolean.FALSE;\n\t} else {\n\t\tresolvedValue = sass.types.Null.NULL;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {JsonArray} array\n */\nfunction arrayToList(array) {\n\tconst length = array.length;\n\tconst data = new sass.types.List(length);\n\tfor (const [index, item] of array.entries()) {\n\t\tdata.setValue(index, setJsonValueToSassValue(item));\n\t}\n\treturn data;\n}\n\n/**\n * @param {JsonObject} object\n */\nfunction objectToMap(object) {\n\tconst length = Object.keys(object).length;\n\tconst data = new sass.types.Map(length);\n\tfor (const [index, [property, value = null]] of Object.entries(\n\t\tobject\n\t).entries()) {\n\t\tdata.setKey(index, setJsonValueToSassValue(property));\n\t\tdata.setValue(index, setJsonValueToSassValue(value));\n\t}\n\treturn data;\n}\n\nexport default setJsonValueToSassValue;\n","import sass from 'sass';\nimport getJsonValueFromSassValue from './lib/sass-to-json';\nimport setJsonValueToSassValue from './lib/json-to-sass';\n\n/**\n * @typedef {sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map} SassType\n */\n/**\n * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue\n * @typedef {JsonValue[]} JsonArray\n * @typedef {string | number | boolean | null} JsonPrimitive\n * @typedef {{[Key in string]?: JsonValue}} JsonObject\n */\n\n/**\n * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.\n *\n * @param {SassType} value Data to encode (stringify).\n * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.\n */\nfunction encode(value, quotes) {\n\tconst shouldQuote = quotes.getValue();\n\tlet resolvedValue = JSON.stringify(getJsonValueFromSassValue(value));\n\tif (shouldQuote) {\n\t\tresolvedValue = `'${resolvedValue}'`;\n\t}\n\treturn new sass.types.String(resolvedValue);\n}\n\n/**\n * Decodes (`JSON.parse`) string and returns one of available Sass types.\n *\n * @param {sass.types.String} value String to decode (parse).\n */\nfunction decode(value) {\n\t/** @type {JsonValue?} */\n\tlet resolvedValue = {};\n\ttry {\n\t\tresolvedValue = JSON.parse(value.getValue());\n\t} catch (error) {\n\t\tresolvedValue = null;\n\t}\n\treturn setJsonValueToSassValue(resolvedValue);\n}\n\n/** @type {{ 'json-encode($value, $quotes: true)': typeof encode, 'json-decode($value)': typeof decode }} */\nconst api = {\n\t'json-encode($value, $quotes: true)': encode,\n\t'json-decode($value)': decode\n};\n\nexport default api;\n"],"names":["sass","shortHexColor","rgbHex","round","parseColor","parseUnit","isPlainObject"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\n/**\n * @param {sass.Value|undefined} value\n */\nfunction getJsonValueFromSassValue(value) {\n\tlet resolvedValue;\n\tif (value instanceof sass.SassList) {\n\t\tresolvedValue = listToArray(value);\n\t} else if (value instanceof sass.SassMap) {\n\t\tresolvedValue = mapToObject(value);\n\t} else if (value instanceof sass.SassColor) {\n\t\t/** @type {[number, number, number]} */\n\t\tconst rgbValue = [value.red, value.green, value.blue];\n\t\tconst alphaValue = value.alpha;\n\t\tif (alphaValue === 1) {\n\t\t\tresolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);\n\t\t} else {\n\t\t\tresolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;\n\t\t}\n\t} else if (value instanceof sass.SassNumber) {\n\t\tif (value.hasUnits) {\n\t\t\tresolvedValue = String(value.value) + value.numeratorUnits.last();\n\t\t} else {\n\t\t\tresolvedValue = Number(value.value);\n\t\t}\n\t} else if (value instanceof sass.SassString) {\n\t\tresolvedValue = String(value.text);\n\t} else if (value instanceof sass.SassBoolean) {\n\t\tresolvedValue = Boolean(value.value);\n\t} else {\n\t\tresolvedValue = null;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {sass.SassList} list\n */\nfunction listToArray(list) {\n\tconst length = list.asList.size;\n\t/** @type {JsonArray} */\n\tconst data = [];\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst value = getJsonValueFromSassValue(list.get(index));\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.SassMap} map\n */\nfunction mapToObject(map) {\n\tconst length = map.contents.size;\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst resolvedValue = map.get(index);\n\t\tif (typeof resolvedValue !== 'undefined') {\n\t\t\tconst key = String(resolvedValue.get(0));\n\t\t\tconst value = getJsonValueFromSassValue(resolvedValue.get(1));\n\t\t\tdata[key] = value;\n\t\t}\n\t}\n\treturn data;\n}\n\nexport default getJsonValueFromSassValue;\n","import sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\nimport { OrderedMap } from 'immutable';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\nconst unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];\n\n/**\n * @param {string} value\n */\nfunction isColor(value) {\n\treturn typeof parseColor(value).rgba !== 'undefined';\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToStringOrNumber(value) {\n\tlet resolvedValue;\n\ttry {\n\t\tconst { value: parsedValue, unit, type } = parseUnit(value);\n\t\tif (unitTypes.includes(type)) {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, unit);\n\t\t} else if (type === 'percentage') {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, '%');\n\t\t} else {\n\t\t\tresolvedValue = new sass.SassString(value);\n\t\t}\n\t} catch (error) {\n\t\tresolvedValue = new sass.SassString(value);\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToColor(value) {\n\tconst [red, green, blue, alpha] = parseColor(value).rgba;\n\treturn new sass.SassColor({\n\t\tred,\n\t\tgreen,\n\t\tblue,\n\t\talpha\n\t});\n}\n\n/**\n * @param {JsonValue} value\n */\nfunction setJsonValueToSassValue(value) {\n\tlet resolvedValue;\n\tif (Array.isArray(value)) {\n\t\tresolvedValue = arrayToList(value);\n\t} else if (isPlainObject(value)) {\n\t\tresolvedValue = objectToMap(value);\n\t} else if (isColor(String(value))) {\n\t\tresolvedValue = parseValueToColor(String(value));\n\t} else if (typeof value === 'string') {\n\t\tresolvedValue = parseValueToStringOrNumber(value);\n\t} else if (typeof value === 'number') {\n\t\tresolvedValue = new sass.SassNumber(value);\n\t} else if (typeof value === 'boolean') {\n\t\tresolvedValue = value ? sass.sassTrue : sass.sassFalse;\n\t} else {\n\t\tresolvedValue = sass.sassNull;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {JsonArray} array\n */\nfunction arrayToList(array) {\n\t/** @type {sass.Value[]} */\n\tconst data = [];\n\tfor (const item of array) {\n\t\tdata.push(setJsonValueToSassValue(item));\n\t}\n\treturn new sass.SassList(data);\n}\n\n/**\n * @param {JsonObject} object\n */\nfunction objectToMap(object) {\n\t/** @type {[sass.Value, sass.Value][]} */\n\tconst data = [];\n\tfor (const [property, value = null] of Object.entries(object)) {\n\t\tdata.push([\n\t\t\tsetJsonValueToSassValue(property),\n\t\t\tsetJsonValueToSassValue(value)\n\t\t]);\n\t}\n\t// eslint-disable-next-line new-cap\n\treturn new sass.SassMap(OrderedMap(data));\n}\n\nexport default setJsonValueToSassValue;\n","import sass from 'sass';\nimport getJsonValueFromSassValue from './lib/sass-to-json.js';\nimport setJsonValueToSassValue from './lib/json-to-sass.js';\n\n/**\n * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue\n * @typedef {JsonValue[]} JsonArray\n * @typedef {string | number | boolean | null} JsonPrimitive\n * @typedef {{[Key in string]?: JsonValue}} JsonObject\n */\n\n/**\n * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.\n *\n * First argument: `sass.Value` - Data to encode (stringify).\n *\n * Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.\n *\n * @param {sass.Value[]} encodeArguments\n */\nfunction encode(encodeArguments) {\n\tconst [data, quotes_] = encodeArguments;\n\tconst quotes = quotes_.assertBoolean('quotes');\n\tconst shouldQuote = quotes.value;\n\tlet resolvedValue = JSON.stringify(getJsonValueFromSassValue(data));\n\tif (shouldQuote) {\n\t\tresolvedValue = `'${resolvedValue}'`;\n\t}\n\treturn new sass.SassString(resolvedValue);\n}\n\n/**\n * Decodes (`JSON.parse`) string and returns one of available Sass types.\n *\n * First argument: `sass.SassString` - String to decode (parse).\n *\n * @param {sass.Value[]} decodeArguments\n */\nfunction decode(decodeArguments) {\n\tconst [string_] = decodeArguments;\n\tconst string = string_.assertString('string');\n\t/** @type {JsonValue?} */\n\tlet resolvedValue = {};\n\ttry {\n\t\tresolvedValue = JSON.parse(string.text);\n\t} catch (error) {\n\t\tresolvedValue = null;\n\t}\n\treturn setJsonValueToSassValue(resolvedValue);\n}\n\n/** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */\nconst api = {\n\t'json-encode($data, $quotes: true)': encode,\n\t'json-decode($string)': decode\n};\n\nexport default api;\n"],"names":["getJsonValueFromSassValue","value","resolvedValue","sass","SassList","listToArray","SassMap","mapToObject","SassColor","rgbValue","red","green","blue","alphaValue","alpha","shortHexColor","rgbHex","apply","join","SassNumber","hasUnits","String","numeratorUnits","last","Number","SassString","text","SassBoolean","Boolean","list","length","asList","size","data","index","Array","from","keys","get","push","map","contents","key","unitTypes","isColor","parseColor","rgba","parseValueToStringOrNumber","parsedValue","unit","type","parseUnit","includes","error","parseValueToColor","setJsonValueToSassValue","isArray","arrayToList","isPlainObject","objectToMap","sassTrue","sassFalse","sassNull","array","item","object","property","Object","entries","OrderedMap","encode","encodeArguments","quotes_","quotes","assertBoolean","shouldQuote","JSON","stringify","decode","decodeArguments","string_","string","assertString","parse","api"],"mappings":";;;;;;;;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,yBAAyBA,CAACC,KAAK,EAAE;AACzC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAID,KAAK,YAAYE,wBAAI,CAACC,QAAQ,EAAE;AACnCF,IAAAA,aAAa,GAAGG,WAAW,CAACJ,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACG,OAAO,EAAE;AACzCJ,IAAAA,aAAa,GAAGK,WAAW,CAACN,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACK,SAAS,EAAE;AAC3C;AACA,IAAA,MAAMC,QAAQ,GAAG,CAACR,KAAK,CAACS,GAAG,EAAET,KAAK,CAACU,KAAK,EAAEV,KAAK,CAACW,IAAI,CAAC,CAAA;AACrD,IAAA,MAAMC,UAAU,GAAGZ,KAAK,CAACa,KAAK,CAAA;IAC9B,IAAID,UAAU,KAAK,CAAC,EAAE;AACrBX,MAAAA,aAAa,GAAGa,iCAAa,CAAE,CAAA,CAAA,EAAGC,0BAAM,CAACC,KAAK,CAAC,IAAI,EAAER,QAAQ,CAAE,EAAC,CAAC,CAAA;AAClE,KAAC,MAAM;MACNP,aAAa,GAAI,CAAOO,KAAAA,EAAAA,QAAQ,CAACS,IAAI,CAAC,GAAG,CAAE,CAAGL,CAAAA,EAAAA,UAAW,CAAE,CAAA,CAAA,CAAA;AAC5D,KAAA;AACD,GAAC,MAAM,IAAIZ,KAAK,YAAYE,wBAAI,CAACgB,UAAU,EAAE;IAC5C,IAAIlB,KAAK,CAACmB,QAAQ,EAAE;AACnBlB,MAAAA,aAAa,GAAGmB,MAAM,CAACpB,KAAK,CAACA,KAAK,CAAC,GAAGA,KAAK,CAACqB,cAAc,CAACC,IAAI,EAAE,CAAA;AAClE,KAAC,MAAM;AACNrB,MAAAA,aAAa,GAAGsB,MAAM,CAACvB,KAAK,CAACA,KAAK,CAAC,CAAA;AACpC,KAAA;AACD,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACsB,UAAU,EAAE;AAC5CvB,IAAAA,aAAa,GAAGmB,MAAM,CAACpB,KAAK,CAACyB,IAAI,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIzB,KAAK,YAAYE,wBAAI,CAACwB,WAAW,EAAE;AAC7CzB,IAAAA,aAAa,GAAG0B,OAAO,CAAC3B,KAAK,CAACA,KAAK,CAAC,CAAA;AACrC,GAAC,MAAM;AACNC,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;AACA,EAAA,OAAOA,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASG,WAAWA,CAACwB,IAAI,EAAE;AAC1B,EAAA,MAAMC,MAAM,GAAGD,IAAI,CAACE,MAAM,CAACC,IAAI,CAAA;AAC/B;EACA,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAMC,KAAK,IAAIC,KAAK,CAACC,IAAI,CAAC;AAAEN,IAAAA,MAAAA;AAAO,GAAC,CAAC,CAACO,IAAI,EAAE,EAAE;IAClD,MAAMpC,KAAK,GAAGD,yBAAyB,CAAC6B,IAAI,CAACS,GAAG,CAACJ,KAAK,CAAC,CAAC,CAAA;AACxDD,IAAAA,IAAI,CAACM,IAAI,CAACtC,KAAK,CAAC,CAAA;AACjB,GAAA;AACA,EAAA,OAAOgC,IAAI,CAAA;AACZ,CAAA;;AAEA;AACA;AACA;AACA,SAAS1B,WAAWA,CAACiC,GAAG,EAAE;AACzB,EAAA,MAAMV,MAAM,GAAGU,GAAG,CAACC,QAAQ,CAACT,IAAI,CAAA;AAChC;EACA,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAMC,KAAK,IAAIC,KAAK,CAACC,IAAI,CAAC;AAAEN,IAAAA,MAAAA;AAAO,GAAC,CAAC,CAACO,IAAI,EAAE,EAAE;AAClD,IAAA,MAAMnC,aAAa,GAAGsC,GAAG,CAACF,GAAG,CAACJ,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,OAAOhC,aAAa,KAAK,WAAW,EAAE;MACzC,MAAMwC,GAAG,GAAGrB,MAAM,CAACnB,aAAa,CAACoC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;MACxC,MAAMrC,KAAK,GAAGD,yBAAyB,CAACE,aAAa,CAACoC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7DL,MAAAA,IAAI,CAACS,GAAG,CAAC,GAAGzC,KAAK,CAAA;AAClB,KAAA;AACD,GAAA;AACA,EAAA,OAAOgC,IAAI,CAAA;AACZ;;ACpEA;AACA;AACA;AACA;AACA;;AAEA,MAAMU,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;;AAExE;AACA;AACA;AACA,SAASC,OAAOA,CAAC3C,KAAK,EAAE;EACvB,OAAO,OAAO4C,8BAAU,CAAC5C,KAAK,CAAC,CAAC6C,IAAI,KAAK,WAAW,CAAA;AACrD,CAAA;;AAEA;AACA;AACA;AACA,SAASC,0BAA0BA,CAAC9C,KAAK,EAAE;AAC1C,EAAA,IAAIC,aAAa,CAAA;EACjB,IAAI;IACH,MAAM;AAAED,MAAAA,KAAK,EAAE+C,WAAW;MAAEC,IAAI;AAAEC,MAAAA,IAAAA;AAAK,KAAC,GAAGC,6BAAS,CAAClD,KAAK,CAAC,CAAA;AAC3D,IAAA,IAAI0C,SAAS,CAACS,QAAQ,CAACF,IAAI,CAAC,EAAE;MAC7BhD,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAEC,IAAI,CAAC,CAAA;AACvD,KAAC,MAAM,IAAIC,IAAI,KAAK,YAAY,EAAE;MACjChD,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAE,GAAG,CAAC,CAAA;AACtD,KAAC,MAAM;AACN9C,MAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACsB,UAAU,CAACxB,KAAK,CAAC,CAAA;AAC3C,KAAA;GACA,CAAC,OAAOoD,KAAK,EAAE;AACfnD,IAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACsB,UAAU,CAACxB,KAAK,CAAC,CAAA;AAC3C,GAAA;AACA,EAAA,OAAOC,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASoD,iBAAiBA,CAACrD,KAAK,EAAE;AACjC,EAAA,MAAM,CAACS,GAAG,EAAEC,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,GAAG+B,8BAAU,CAAC5C,KAAK,CAAC,CAAC6C,IAAI,CAAA;AACxD,EAAA,OAAO,IAAI3C,wBAAI,CAACK,SAAS,CAAC;IACzBE,GAAG;IACHC,KAAK;IACLC,IAAI;AACJE,IAAAA,KAAAA;AACD,GAAC,CAAC,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA,SAASyC,uBAAuBA,CAACtD,KAAK,EAAE;AACvC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAIiC,KAAK,CAACqB,OAAO,CAACvD,KAAK,CAAC,EAAE;AACzBC,IAAAA,aAAa,GAAGuD,WAAW,CAACxD,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIyD,iCAAa,CAACzD,KAAK,CAAC,EAAE;AAChCC,IAAAA,aAAa,GAAGyD,WAAW,CAAC1D,KAAK,CAAC,CAAA;GAClC,MAAM,IAAI2C,OAAO,CAACvB,MAAM,CAACpB,KAAK,CAAC,CAAC,EAAE;AAClCC,IAAAA,aAAa,GAAGoD,iBAAiB,CAACjC,MAAM,CAACpB,KAAK,CAAC,CAAC,CAAA;AACjD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCC,IAAAA,aAAa,GAAG6C,0BAA0B,CAAC9C,KAAK,CAAC,CAAA;AAClD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCC,IAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAClB,KAAK,CAAC,CAAA;AAC3C,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IACtCC,aAAa,GAAGD,KAAK,GAAGE,wBAAI,CAACyD,QAAQ,GAAGzD,wBAAI,CAAC0D,SAAS,CAAA;AACvD,GAAC,MAAM;IACN3D,aAAa,GAAGC,wBAAI,CAAC2D,QAAQ,CAAA;AAC9B,GAAA;AACA,EAAA,OAAO5D,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASuD,WAAWA,CAACM,KAAK,EAAE;AAC3B;EACA,MAAM9B,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAM+B,IAAI,IAAID,KAAK,EAAE;AACzB9B,IAAAA,IAAI,CAACM,IAAI,CAACgB,uBAAuB,CAACS,IAAI,CAAC,CAAC,CAAA;AACzC,GAAA;AACA,EAAA,OAAO,IAAI7D,wBAAI,CAACC,QAAQ,CAAC6B,IAAI,CAAC,CAAA;AAC/B,CAAA;;AAEA;AACA;AACA;AACA,SAAS0B,WAAWA,CAACM,MAAM,EAAE;AAC5B;EACA,MAAMhC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAM,CAACiC,QAAQ,EAAEjE,KAAK,GAAG,IAAI,CAAC,IAAIkE,MAAM,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;AAC9DhC,IAAAA,IAAI,CAACM,IAAI,CAAC,CACTgB,uBAAuB,CAACW,QAAQ,CAAC,EACjCX,uBAAuB,CAACtD,KAAK,CAAC,CAC9B,CAAC,CAAA;AACH,GAAA;AACA;EACA,OAAO,IAAIE,wBAAI,CAACG,OAAO,CAAC+D,oBAAU,CAACpC,IAAI,CAAC,CAAC,CAAA;AAC1C;;ACnGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqC,MAAMA,CAACC,eAAe,EAAE;AAChC,EAAA,MAAM,CAACtC,IAAI,EAAEuC,OAAO,CAAC,GAAGD,eAAe,CAAA;AACvC,EAAA,MAAME,MAAM,GAAGD,OAAO,CAACE,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC9C,EAAA,MAAMC,WAAW,GAAGF,MAAM,CAACxE,KAAK,CAAA;EAChC,IAAIC,aAAa,GAAG0E,IAAI,CAACC,SAAS,CAAC7E,yBAAyB,CAACiC,IAAI,CAAC,CAAC,CAAA;AACnE,EAAA,IAAI0C,WAAW,EAAE;IAChBzE,aAAa,GAAI,CAAGA,CAAAA,EAAAA,aAAc,CAAE,CAAA,CAAA,CAAA;AACrC,GAAA;AACA,EAAA,OAAO,IAAIC,wBAAI,CAACsB,UAAU,CAACvB,aAAa,CAAC,CAAA;AAC1C,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4E,MAAMA,CAACC,eAAe,EAAE;AAChC,EAAA,MAAM,CAACC,OAAO,CAAC,GAAGD,eAAe,CAAA;AACjC,EAAA,MAAME,MAAM,GAAGD,OAAO,CAACE,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC7C;EACA,IAAIhF,aAAa,GAAG,EAAE,CAAA;EACtB,IAAI;IACHA,aAAa,GAAG0E,IAAI,CAACO,KAAK,CAACF,MAAM,CAACvD,IAAI,CAAC,CAAA;GACvC,CAAC,OAAO2B,KAAK,EAAE;AACfnD,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;EACA,OAAOqD,uBAAuB,CAACrD,aAAa,CAAC,CAAA;AAC9C,CAAA;;AAEA;AACA,MAAMkF,GAAG,GAAG;AACX,EAAA,mCAAmC,EAAEd,MAAM;AAC3C,EAAA,sBAAsB,EAAEQ,MAAAA;AACzB;;;;"}
@@ -1,11 +1,10 @@
1
1
  export default setJsonValueToSassValue;
2
- export type SassType = import('../index').SassType;
3
2
  export type JsonValue = import('../index').JsonValue;
4
3
  export type JsonObject = import('../index').JsonObject;
5
4
  export type JsonArray = import('../index').JsonArray;
6
5
  /**
7
6
  * @param {JsonValue} value
8
7
  */
9
- declare function setJsonValueToSassValue(value: JsonValue): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Boolean<true> | sass.types.Boolean<false> | sass.types.Color | sass.types.List<sass.types.SassType> | sass.types.Map<sass.types.SassType, sass.types.SassType>;
8
+ declare function setJsonValueToSassValue(value: JsonValue): sass.Value;
10
9
  import sass from "sass";
11
10
  //# sourceMappingURL=json-to-sass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";uBAMa,OAAO,UAAU,EAAE,QAAQ;wBAC3B,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAwCzC;;GAEG;AACH,gDAFW,SAAS,uOAsBnB"}
1
+ {"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";wBAOa,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AA6CzC;;GAEG;AACH,gDAFW,SAAS,cAoBnB"}
@@ -1,16 +1,15 @@
1
1
  export default getJsonValueFromSassValue;
2
- export type SassType = import('../index').SassType;
3
2
  export type JsonValue = import('../index').JsonValue;
4
3
  export type JsonObject = import('../index').JsonObject;
5
4
  export type JsonArray = import('../index').JsonArray;
6
5
  /**
7
- * @typedef {import('../index').SassType} SassType
8
6
  * @typedef {import('../index').JsonValue} JsonValue
9
7
  * @typedef {import('../index').JsonObject} JsonObject
10
8
  * @typedef {import('../index').JsonArray} JsonArray
11
9
  */
12
10
  /**
13
- * @param {SassType} value
11
+ * @param {sass.Value|undefined} value
14
12
  */
15
- declare function getJsonValueFromSassValue(value: SassType): string | number | boolean | import("../index").JsonObject | import("../index").JsonArray | null;
13
+ declare function getJsonValueFromSassValue(value: sass.Value | undefined): string | number | boolean | import("../index").JsonObject | import("../index").JsonArray | null;
14
+ import sass from "sass";
16
15
  //# sourceMappingURL=sass-to-json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sass-to-json.d.ts","sourceRoot":"","sources":["../../lib/sass-to-json.js"],"names":[],"mappings":";uBAMa,OAAO,UAAU,EAAE,QAAQ;wBAC3B,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAJzC;;;;;GAKG;AAEH;;GAEG;AACH,kDAFW,QAAQ,mGAqClB"}
1
+ {"version":3,"file":"sass-to-json.d.ts","sourceRoot":"","sources":["../../lib/sass-to-json.js"],"names":[],"mappings":";wBAKa,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAHzC;;;;GAIG;AAEH;;GAEG;AACH,kDAFW,KAAK,KAAK,GAAC,SAAS,mGA+B9B"}
package/esm/index.d.ts CHANGED
@@ -1,20 +1,15 @@
1
1
  export default api;
2
- export type SassType = sass.types.Null | sass.types.Number | sass.types.String | sass.types.Boolean | sass.types.Color | sass.types.List | sass.types.Map;
3
2
  export type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
4
3
  export type JsonArray = JsonValue[];
5
4
  export type JsonPrimitive = string | number | boolean | null;
6
5
  export type JsonObject = {
7
6
  [x: string]: JsonValue | undefined;
8
7
  };
9
- /** @type {{ 'json-encode($value, $quotes: true)': typeof encode, 'json-decode($value)': typeof decode }} */
8
+ /** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
10
9
  declare const api: {
11
- 'json-encode($value, $quotes: true)': typeof encode;
12
- 'json-decode($value)': typeof decode;
10
+ 'json-encode($data, $quotes: true)': typeof encode;
11
+ 'json-decode($string)': typeof decode;
13
12
  };
14
- import sass from "sass";
15
- /**
16
- * @typedef {sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map} SassType
17
- */
18
13
  /**
19
14
  * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue
20
15
  * @typedef {JsonValue[]} JsonArray
@@ -24,14 +19,20 @@ import sass from "sass";
24
19
  /**
25
20
  * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.
26
21
  *
27
- * @param {SassType} value Data to encode (stringify).
28
- * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.
22
+ * First argument: `sass.Value` - Data to encode (stringify).
23
+ *
24
+ * Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.
25
+ *
26
+ * @param {sass.Value[]} encodeArguments
29
27
  */
30
- declare function encode(value: SassType, quotes: sass.types.Boolean): sass.types.String;
28
+ declare function encode(encodeArguments: sass.Value[]): sass.SassString;
31
29
  /**
32
30
  * Decodes (`JSON.parse`) string and returns one of available Sass types.
33
31
  *
34
- * @param {sass.types.String} value String to decode (parse).
32
+ * First argument: `sass.SassString` - String to decode (parse).
33
+ *
34
+ * @param {sass.Value[]} decodeArguments
35
35
  */
36
- declare function decode(value: sass.types.String): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Boolean<true> | sass.types.Boolean<false> | sass.types.Color | sass.types.List<sass.types.SassType> | sass.types.Map<sass.types.SassType, sass.types.SassType>;
36
+ declare function decode(decodeArguments: sass.Value[]): sass.Value;
37
+ import sass from "sass";
37
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":";uBAKa,KAAK,KAAK,CAAC,IAAI,GAAC,KAAK,KAAK,OAAO,GAAC,KAAK,KAAK,OAAO,GAAC,KAAK,KAAK,QAAQ,GAAC,KAAK,KAAK,CAAC,KAAK,GAAC,KAAK,KAAK,CAAC,IAAI,GAAC,KAAK,KAAK,IAAI;wBAGtH,aAAa,GAAG,UAAU,cAAY;wBACtC,SAAS,EAAE;4BACX,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;;;;AAmC7C,4GAA4G;AAC5G,mBADW;IAAE,oCAAoC,EAAE,aAAa,CAAC;IAAC,qBAAqB,EAAE,aAAa,CAAA;CAAE,CAItG;;AA7CF;;GAEG;AACH;;;;;GAKG;AAEH;;;;;GAKG;AACH,+BAHW,QAAQ,UACR,KAAK,KAAK,QAAQ,qBAS5B;AAED;;;;GAIG;AACH,+BAFW,KAAK,KAAK,OAAO,uOAW3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":";wBAKa,aAAa,GAAG,UAAU,cAAY;wBACtC,SAAS,EAAE;4BACX,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI;;;;AA4C7C,4GAA4G;AAC5G,mBADW;IAAE,mCAAmC,EAAE,aAAa,CAAC;IAAC,sBAAsB,EAAE,aAAa,CAAA;CAAE,CAItG;AAnDF;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,yCAFW,KAAK,KAAK,EAAE,mBAWtB;AAED;;;;;;GAMG;AACH,yCAFW,KAAK,KAAK,EAAE,cAatB"}
package/esm/index.js CHANGED
@@ -1,89 +1,88 @@
1
1
  import sass from 'sass';
2
- import round from 'round-to';
3
2
  import rgbHex from 'rgb-hex';
4
3
  import shortHexColor from 'shorten-css-hex';
5
4
  import isPlainObject from 'is-plain-obj';
6
5
  import parseColor from 'parse-color';
7
6
  import parseUnit from 'parse-css-dimension';
7
+ import { OrderedMap } from 'immutable';
8
8
 
9
9
  /**
10
- * @typedef {import('../index').SassType} SassType
11
10
  * @typedef {import('../index').JsonValue} JsonValue
12
11
  * @typedef {import('../index').JsonObject} JsonObject
13
12
  * @typedef {import('../index').JsonArray} JsonArray
14
13
  */
15
14
 
16
15
  /**
17
- * @param {SassType} value
16
+ * @param {sass.Value|undefined} value
18
17
  */
19
18
  function getJsonValueFromSassValue(value) {
20
- let resolvedValue;
21
- if (value instanceof sass.types.List) {
22
- resolvedValue = listToArray(value);
23
- } else if (value instanceof sass.types.Map) {
24
- resolvedValue = mapToObject(value);
25
- } else if (value instanceof sass.types.Color) {
26
- /** @type {[number, number, number]} */
27
- const rgbValue = [value.getR(), value.getG(), value.getB()];
28
- const alphaValue = value.getA();
29
- if (alphaValue === 1) {
30
- resolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);
31
- } else {
32
- resolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;
33
- }
34
- } else if (value instanceof sass.types.Number) {
35
- if (value.getUnit() !== '') {
36
- resolvedValue = String(
37
- round(Number(value.getValue()), 0) + value.getUnit()
38
- );
39
- } else {
40
- resolvedValue = round(Number(value.getValue()), 0);
41
- }
42
- } else {
43
- try {
44
- if ('getValue' in value) {
45
- resolvedValue = value.getValue();
46
- } else {
47
- resolvedValue = null;
48
- }
49
- } catch (error) {
50
- resolvedValue = null;
51
- }
52
- }
53
- return resolvedValue;
19
+ let resolvedValue;
20
+ if (value instanceof sass.SassList) {
21
+ resolvedValue = listToArray(value);
22
+ } else if (value instanceof sass.SassMap) {
23
+ resolvedValue = mapToObject(value);
24
+ } else if (value instanceof sass.SassColor) {
25
+ /** @type {[number, number, number]} */
26
+ const rgbValue = [value.red, value.green, value.blue];
27
+ const alphaValue = value.alpha;
28
+ if (alphaValue === 1) {
29
+ resolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);
30
+ } else {
31
+ resolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;
32
+ }
33
+ } else if (value instanceof sass.SassNumber) {
34
+ if (value.hasUnits) {
35
+ resolvedValue = String(value.value) + value.numeratorUnits.last();
36
+ } else {
37
+ resolvedValue = Number(value.value);
38
+ }
39
+ } else if (value instanceof sass.SassString) {
40
+ resolvedValue = String(value.text);
41
+ } else if (value instanceof sass.SassBoolean) {
42
+ resolvedValue = Boolean(value.value);
43
+ } else {
44
+ resolvedValue = null;
45
+ }
46
+ return resolvedValue;
54
47
  }
55
48
 
56
49
  /**
57
- * @param {sass.types.List} list
50
+ * @param {sass.SassList} list
58
51
  */
59
52
  function listToArray(list) {
60
- const length = list.getLength();
61
- /** @type {JsonArray} */
62
- const data = [];
63
- for (const index of Array.from({ length }).keys()) {
64
- const value = getJsonValueFromSassValue(list.getValue(index));
65
- data.push(value);
66
- }
67
- return data;
53
+ const length = list.asList.size;
54
+ /** @type {JsonArray} */
55
+ const data = [];
56
+ for (const index of Array.from({
57
+ length
58
+ }).keys()) {
59
+ const value = getJsonValueFromSassValue(list.get(index));
60
+ data.push(value);
61
+ }
62
+ return data;
68
63
  }
69
64
 
70
65
  /**
71
- * @param {sass.types.Map} map
66
+ * @param {sass.SassMap} map
72
67
  */
73
68
  function mapToObject(map) {
74
- const length = map.getLength();
75
- /** @type {JsonObject} */
76
- const data = {};
77
- for (const index of Array.from({ length }).keys()) {
78
- const key = String(map.getKey(index).getValue());
79
- const value = getJsonValueFromSassValue(map.getValue(index));
80
- data[key] = value;
81
- }
82
- return data;
69
+ const length = map.contents.size;
70
+ /** @type {JsonObject} */
71
+ const data = {};
72
+ for (const index of Array.from({
73
+ length
74
+ }).keys()) {
75
+ const resolvedValue = map.get(index);
76
+ if (typeof resolvedValue !== 'undefined') {
77
+ const key = String(resolvedValue.get(0));
78
+ const value = getJsonValueFromSassValue(resolvedValue.get(1));
79
+ data[key] = value;
80
+ }
81
+ }
82
+ return data;
83
83
  }
84
84
 
85
85
  /**
86
- * @typedef {import('../index').SassType} SassType
87
86
  * @typedef {import('../index').JsonValue} JsonValue
88
87
  * @typedef {import('../index').JsonObject} JsonObject
89
88
  * @typedef {import('../index').JsonArray} JsonArray
@@ -95,92 +94,94 @@ const unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];
95
94
  * @param {string} value
96
95
  */
97
96
  function isColor(value) {
98
- return typeof parseColor(value).rgba !== 'undefined';
97
+ return typeof parseColor(value).rgba !== 'undefined';
99
98
  }
100
99
 
101
100
  /**
102
101
  * @param {string} value
103
102
  */
104
103
  function parseValueToStringOrNumber(value) {
105
- let resolvedValue;
106
- try {
107
- const { value: parsedValue, unit, type } = parseUnit(value);
108
- if (unitTypes.includes(type)) {
109
- resolvedValue = new sass.types.Number(parsedValue, unit);
110
- } else if (type === 'percentage') {
111
- resolvedValue = new sass.types.Number(parsedValue, '%');
112
- } else {
113
- resolvedValue = new sass.types.String(value);
114
- }
115
- } catch (error) {
116
- resolvedValue = new sass.types.String(value);
117
- }
118
- return resolvedValue;
104
+ let resolvedValue;
105
+ try {
106
+ const {
107
+ value: parsedValue,
108
+ unit,
109
+ type
110
+ } = parseUnit(value);
111
+ if (unitTypes.includes(type)) {
112
+ resolvedValue = new sass.SassNumber(parsedValue, unit);
113
+ } else if (type === 'percentage') {
114
+ resolvedValue = new sass.SassNumber(parsedValue, '%');
115
+ } else {
116
+ resolvedValue = new sass.SassString(value);
117
+ }
118
+ } catch (error) {
119
+ resolvedValue = new sass.SassString(value);
120
+ }
121
+ return resolvedValue;
119
122
  }
120
123
 
121
124
  /**
122
125
  * @param {string} value
123
126
  */
124
127
  function parseValueToColor(value) {
125
- const [r, g, b, a] = parseColor(value).rgba;
126
- return new sass.types.Color(r, g, b, a);
128
+ const [red, green, blue, alpha] = parseColor(value).rgba;
129
+ return new sass.SassColor({
130
+ red,
131
+ green,
132
+ blue,
133
+ alpha
134
+ });
127
135
  }
128
136
 
129
137
  /**
130
138
  * @param {JsonValue} value
131
139
  */
132
140
  function setJsonValueToSassValue(value) {
133
- let resolvedValue;
134
- if (Array.isArray(value)) {
135
- resolvedValue = arrayToList(value);
136
- } else if (isPlainObject(value)) {
137
- resolvedValue = objectToMap(value);
138
- } else if (isColor(String(value))) {
139
- resolvedValue = parseValueToColor(String(value));
140
- } else if (typeof value === 'string') {
141
- resolvedValue = parseValueToStringOrNumber(value);
142
- } else if (typeof value === 'number') {
143
- resolvedValue = new sass.types.Number(value);
144
- } else if (typeof value === 'boolean') {
145
- resolvedValue = value
146
- ? sass.types.Boolean.TRUE
147
- : sass.types.Boolean.FALSE;
148
- } else {
149
- resolvedValue = sass.types.Null.NULL;
150
- }
151
- return resolvedValue;
141
+ let resolvedValue;
142
+ if (Array.isArray(value)) {
143
+ resolvedValue = arrayToList(value);
144
+ } else if (isPlainObject(value)) {
145
+ resolvedValue = objectToMap(value);
146
+ } else if (isColor(String(value))) {
147
+ resolvedValue = parseValueToColor(String(value));
148
+ } else if (typeof value === 'string') {
149
+ resolvedValue = parseValueToStringOrNumber(value);
150
+ } else if (typeof value === 'number') {
151
+ resolvedValue = new sass.SassNumber(value);
152
+ } else if (typeof value === 'boolean') {
153
+ resolvedValue = value ? sass.sassTrue : sass.sassFalse;
154
+ } else {
155
+ resolvedValue = sass.sassNull;
156
+ }
157
+ return resolvedValue;
152
158
  }
153
159
 
154
160
  /**
155
161
  * @param {JsonArray} array
156
162
  */
157
163
  function arrayToList(array) {
158
- const length = array.length;
159
- const data = new sass.types.List(length);
160
- for (const [index, item] of array.entries()) {
161
- data.setValue(index, setJsonValueToSassValue(item));
162
- }
163
- return data;
164
+ /** @type {sass.Value[]} */
165
+ const data = [];
166
+ for (const item of array) {
167
+ data.push(setJsonValueToSassValue(item));
168
+ }
169
+ return new sass.SassList(data);
164
170
  }
165
171
 
166
172
  /**
167
173
  * @param {JsonObject} object
168
174
  */
169
175
  function objectToMap(object) {
170
- const length = Object.keys(object).length;
171
- const data = new sass.types.Map(length);
172
- for (const [index, [property, value = null]] of Object.entries(
173
- object
174
- ).entries()) {
175
- data.setKey(index, setJsonValueToSassValue(property));
176
- data.setValue(index, setJsonValueToSassValue(value));
177
- }
178
- return data;
176
+ /** @type {[sass.Value, sass.Value][]} */
177
+ const data = [];
178
+ for (const [property, value = null] of Object.entries(object)) {
179
+ data.push([setJsonValueToSassValue(property), setJsonValueToSassValue(value)]);
180
+ }
181
+ // eslint-disable-next-line new-cap
182
+ return new sass.SassMap(OrderedMap(data));
179
183
  }
180
184
 
181
- /**
182
- * @typedef {sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map} SassType
183
- */
184
185
  /**
185
186
  * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue
186
187
  * @typedef {JsonValue[]} JsonArray
@@ -191,38 +192,47 @@ function objectToMap(object) {
191
192
  /**
192
193
  * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.
193
194
  *
194
- * @param {SassType} value Data to encode (stringify).
195
- * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.
195
+ * First argument: `sass.Value` - Data to encode (stringify).
196
+ *
197
+ * Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.
198
+ *
199
+ * @param {sass.Value[]} encodeArguments
196
200
  */
197
- function encode(value, quotes) {
198
- const shouldQuote = quotes.getValue();
199
- let resolvedValue = JSON.stringify(getJsonValueFromSassValue(value));
200
- if (shouldQuote) {
201
- resolvedValue = `'${resolvedValue}'`;
202
- }
203
- return new sass.types.String(resolvedValue);
201
+ function encode(encodeArguments) {
202
+ const [data, quotes_] = encodeArguments;
203
+ const quotes = quotes_.assertBoolean('quotes');
204
+ const shouldQuote = quotes.value;
205
+ let resolvedValue = JSON.stringify(getJsonValueFromSassValue(data));
206
+ if (shouldQuote) {
207
+ resolvedValue = `'${resolvedValue}'`;
208
+ }
209
+ return new sass.SassString(resolvedValue);
204
210
  }
205
211
 
206
212
  /**
207
213
  * Decodes (`JSON.parse`) string and returns one of available Sass types.
208
214
  *
209
- * @param {sass.types.String} value String to decode (parse).
215
+ * First argument: `sass.SassString` - String to decode (parse).
216
+ *
217
+ * @param {sass.Value[]} decodeArguments
210
218
  */
211
- function decode(value) {
212
- /** @type {JsonValue?} */
213
- let resolvedValue = {};
214
- try {
215
- resolvedValue = JSON.parse(value.getValue());
216
- } catch (error) {
217
- resolvedValue = null;
218
- }
219
- return setJsonValueToSassValue(resolvedValue);
219
+ function decode(decodeArguments) {
220
+ const [string_] = decodeArguments;
221
+ const string = string_.assertString('string');
222
+ /** @type {JsonValue?} */
223
+ let resolvedValue = {};
224
+ try {
225
+ resolvedValue = JSON.parse(string.text);
226
+ } catch (error) {
227
+ resolvedValue = null;
228
+ }
229
+ return setJsonValueToSassValue(resolvedValue);
220
230
  }
221
231
 
222
- /** @type {{ 'json-encode($value, $quotes: true)': typeof encode, 'json-decode($value)': typeof decode }} */
232
+ /** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
223
233
  const api = {
224
- 'json-encode($value, $quotes: true)': encode,
225
- 'json-decode($value)': decode
234
+ 'json-encode($data, $quotes: true)': encode,
235
+ 'json-decode($string)': decode
226
236
  };
227
237
 
228
238
  export { api as default };
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport round from 'round-to';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {import('../index').SassType} SassType\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\n/**\n * @param {SassType} value\n */\nfunction getJsonValueFromSassValue(value) {\n\tlet resolvedValue;\n\tif (value instanceof sass.types.List) {\n\t\tresolvedValue = listToArray(value);\n\t} else if (value instanceof sass.types.Map) {\n\t\tresolvedValue = mapToObject(value);\n\t} else if (value instanceof sass.types.Color) {\n\t\t/** @type {[number, number, number]} */\n\t\tconst rgbValue = [value.getR(), value.getG(), value.getB()];\n\t\tconst alphaValue = value.getA();\n\t\tif (alphaValue === 1) {\n\t\t\tresolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);\n\t\t} else {\n\t\t\tresolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;\n\t\t}\n\t} else if (value instanceof sass.types.Number) {\n\t\tif (value.getUnit() !== '') {\n\t\t\tresolvedValue = String(\n\t\t\t\tround(Number(value.getValue()), 0) + value.getUnit()\n\t\t\t);\n\t\t} else {\n\t\t\tresolvedValue = round(Number(value.getValue()), 0);\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tif ('getValue' in value) {\n\t\t\t\tresolvedValue = value.getValue();\n\t\t\t} else {\n\t\t\t\tresolvedValue = null;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tresolvedValue = null;\n\t\t}\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {sass.types.List} list\n */\nfunction listToArray(list) {\n\tconst length = list.getLength();\n\t/** @type {JsonArray} */\n\tconst data = [];\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst value = getJsonValueFromSassValue(list.getValue(index));\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.types.Map} map\n */\nfunction mapToObject(map) {\n\tconst length = map.getLength();\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst key = String(map.getKey(index).getValue());\n\t\tconst value = getJsonValueFromSassValue(map.getValue(index));\n\t\tdata[key] = value;\n\t}\n\treturn data;\n}\n\nexport default getJsonValueFromSassValue;\n","import sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\n\n/**\n * @typedef {import('../index').SassType} SassType\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\nconst unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];\n\n/**\n * @param {string} value\n */\nfunction isColor(value) {\n\treturn typeof parseColor(value).rgba !== 'undefined';\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToStringOrNumber(value) {\n\tlet resolvedValue;\n\ttry {\n\t\tconst { value: parsedValue, unit, type } = parseUnit(value);\n\t\tif (unitTypes.includes(type)) {\n\t\t\tresolvedValue = new sass.types.Number(parsedValue, unit);\n\t\t} else if (type === 'percentage') {\n\t\t\tresolvedValue = new sass.types.Number(parsedValue, '%');\n\t\t} else {\n\t\t\tresolvedValue = new sass.types.String(value);\n\t\t}\n\t} catch (error) {\n\t\tresolvedValue = new sass.types.String(value);\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToColor(value) {\n\tconst [r, g, b, a] = parseColor(value).rgba;\n\treturn new sass.types.Color(r, g, b, a);\n}\n\n/**\n * @param {JsonValue} value\n */\nfunction setJsonValueToSassValue(value) {\n\tlet resolvedValue;\n\tif (Array.isArray(value)) {\n\t\tresolvedValue = arrayToList(value);\n\t} else if (isPlainObject(value)) {\n\t\tresolvedValue = objectToMap(value);\n\t} else if (isColor(String(value))) {\n\t\tresolvedValue = parseValueToColor(String(value));\n\t} else if (typeof value === 'string') {\n\t\tresolvedValue = parseValueToStringOrNumber(value);\n\t} else if (typeof value === 'number') {\n\t\tresolvedValue = new sass.types.Number(value);\n\t} else if (typeof value === 'boolean') {\n\t\tresolvedValue = value\n\t\t\t? sass.types.Boolean.TRUE\n\t\t\t: sass.types.Boolean.FALSE;\n\t} else {\n\t\tresolvedValue = sass.types.Null.NULL;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {JsonArray} array\n */\nfunction arrayToList(array) {\n\tconst length = array.length;\n\tconst data = new sass.types.List(length);\n\tfor (const [index, item] of array.entries()) {\n\t\tdata.setValue(index, setJsonValueToSassValue(item));\n\t}\n\treturn data;\n}\n\n/**\n * @param {JsonObject} object\n */\nfunction objectToMap(object) {\n\tconst length = Object.keys(object).length;\n\tconst data = new sass.types.Map(length);\n\tfor (const [index, [property, value = null]] of Object.entries(\n\t\tobject\n\t).entries()) {\n\t\tdata.setKey(index, setJsonValueToSassValue(property));\n\t\tdata.setValue(index, setJsonValueToSassValue(value));\n\t}\n\treturn data;\n}\n\nexport default setJsonValueToSassValue;\n","import sass from 'sass';\nimport getJsonValueFromSassValue from './lib/sass-to-json';\nimport setJsonValueToSassValue from './lib/json-to-sass';\n\n/**\n * @typedef {sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map} SassType\n */\n/**\n * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue\n * @typedef {JsonValue[]} JsonArray\n * @typedef {string | number | boolean | null} JsonPrimitive\n * @typedef {{[Key in string]?: JsonValue}} JsonObject\n */\n\n/**\n * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.\n *\n * @param {SassType} value Data to encode (stringify).\n * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.\n */\nfunction encode(value, quotes) {\n\tconst shouldQuote = quotes.getValue();\n\tlet resolvedValue = JSON.stringify(getJsonValueFromSassValue(value));\n\tif (shouldQuote) {\n\t\tresolvedValue = `'${resolvedValue}'`;\n\t}\n\treturn new sass.types.String(resolvedValue);\n}\n\n/**\n * Decodes (`JSON.parse`) string and returns one of available Sass types.\n *\n * @param {sass.types.String} value String to decode (parse).\n */\nfunction decode(value) {\n\t/** @type {JsonValue?} */\n\tlet resolvedValue = {};\n\ttry {\n\t\tresolvedValue = JSON.parse(value.getValue());\n\t} catch (error) {\n\t\tresolvedValue = null;\n\t}\n\treturn setJsonValueToSassValue(resolvedValue);\n}\n\n/** @type {{ 'json-encode($value, $quotes: true)': typeof encode, 'json-decode($value)': typeof decode }} */\nconst api = {\n\t'json-encode($value, $quotes: true)': encode,\n\t'json-decode($value)': decode\n};\n\nexport default api;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\n/**\n * @param {sass.Value|undefined} value\n */\nfunction getJsonValueFromSassValue(value) {\n\tlet resolvedValue;\n\tif (value instanceof sass.SassList) {\n\t\tresolvedValue = listToArray(value);\n\t} else if (value instanceof sass.SassMap) {\n\t\tresolvedValue = mapToObject(value);\n\t} else if (value instanceof sass.SassColor) {\n\t\t/** @type {[number, number, number]} */\n\t\tconst rgbValue = [value.red, value.green, value.blue];\n\t\tconst alphaValue = value.alpha;\n\t\tif (alphaValue === 1) {\n\t\t\tresolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);\n\t\t} else {\n\t\t\tresolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;\n\t\t}\n\t} else if (value instanceof sass.SassNumber) {\n\t\tif (value.hasUnits) {\n\t\t\tresolvedValue = String(value.value) + value.numeratorUnits.last();\n\t\t} else {\n\t\t\tresolvedValue = Number(value.value);\n\t\t}\n\t} else if (value instanceof sass.SassString) {\n\t\tresolvedValue = String(value.text);\n\t} else if (value instanceof sass.SassBoolean) {\n\t\tresolvedValue = Boolean(value.value);\n\t} else {\n\t\tresolvedValue = null;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {sass.SassList} list\n */\nfunction listToArray(list) {\n\tconst length = list.asList.size;\n\t/** @type {JsonArray} */\n\tconst data = [];\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst value = getJsonValueFromSassValue(list.get(index));\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.SassMap} map\n */\nfunction mapToObject(map) {\n\tconst length = map.contents.size;\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst resolvedValue = map.get(index);\n\t\tif (typeof resolvedValue !== 'undefined') {\n\t\t\tconst key = String(resolvedValue.get(0));\n\t\t\tconst value = getJsonValueFromSassValue(resolvedValue.get(1));\n\t\t\tdata[key] = value;\n\t\t}\n\t}\n\treturn data;\n}\n\nexport default getJsonValueFromSassValue;\n","import sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\nimport { OrderedMap } from 'immutable';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\nconst unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];\n\n/**\n * @param {string} value\n */\nfunction isColor(value) {\n\treturn typeof parseColor(value).rgba !== 'undefined';\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToStringOrNumber(value) {\n\tlet resolvedValue;\n\ttry {\n\t\tconst { value: parsedValue, unit, type } = parseUnit(value);\n\t\tif (unitTypes.includes(type)) {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, unit);\n\t\t} else if (type === 'percentage') {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, '%');\n\t\t} else {\n\t\t\tresolvedValue = new sass.SassString(value);\n\t\t}\n\t} catch (error) {\n\t\tresolvedValue = new sass.SassString(value);\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToColor(value) {\n\tconst [red, green, blue, alpha] = parseColor(value).rgba;\n\treturn new sass.SassColor({\n\t\tred,\n\t\tgreen,\n\t\tblue,\n\t\talpha\n\t});\n}\n\n/**\n * @param {JsonValue} value\n */\nfunction setJsonValueToSassValue(value) {\n\tlet resolvedValue;\n\tif (Array.isArray(value)) {\n\t\tresolvedValue = arrayToList(value);\n\t} else if (isPlainObject(value)) {\n\t\tresolvedValue = objectToMap(value);\n\t} else if (isColor(String(value))) {\n\t\tresolvedValue = parseValueToColor(String(value));\n\t} else if (typeof value === 'string') {\n\t\tresolvedValue = parseValueToStringOrNumber(value);\n\t} else if (typeof value === 'number') {\n\t\tresolvedValue = new sass.SassNumber(value);\n\t} else if (typeof value === 'boolean') {\n\t\tresolvedValue = value ? sass.sassTrue : sass.sassFalse;\n\t} else {\n\t\tresolvedValue = sass.sassNull;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {JsonArray} array\n */\nfunction arrayToList(array) {\n\t/** @type {sass.Value[]} */\n\tconst data = [];\n\tfor (const item of array) {\n\t\tdata.push(setJsonValueToSassValue(item));\n\t}\n\treturn new sass.SassList(data);\n}\n\n/**\n * @param {JsonObject} object\n */\nfunction objectToMap(object) {\n\t/** @type {[sass.Value, sass.Value][]} */\n\tconst data = [];\n\tfor (const [property, value = null] of Object.entries(object)) {\n\t\tdata.push([\n\t\t\tsetJsonValueToSassValue(property),\n\t\t\tsetJsonValueToSassValue(value)\n\t\t]);\n\t}\n\t// eslint-disable-next-line new-cap\n\treturn new sass.SassMap(OrderedMap(data));\n}\n\nexport default setJsonValueToSassValue;\n","import sass from 'sass';\nimport getJsonValueFromSassValue from './lib/sass-to-json.js';\nimport setJsonValueToSassValue from './lib/json-to-sass.js';\n\n/**\n * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue\n * @typedef {JsonValue[]} JsonArray\n * @typedef {string | number | boolean | null} JsonPrimitive\n * @typedef {{[Key in string]?: JsonValue}} JsonObject\n */\n\n/**\n * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.\n *\n * First argument: `sass.Value` - Data to encode (stringify).\n *\n * Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.\n *\n * @param {sass.Value[]} encodeArguments\n */\nfunction encode(encodeArguments) {\n\tconst [data, quotes_] = encodeArguments;\n\tconst quotes = quotes_.assertBoolean('quotes');\n\tconst shouldQuote = quotes.value;\n\tlet resolvedValue = JSON.stringify(getJsonValueFromSassValue(data));\n\tif (shouldQuote) {\n\t\tresolvedValue = `'${resolvedValue}'`;\n\t}\n\treturn new sass.SassString(resolvedValue);\n}\n\n/**\n * Decodes (`JSON.parse`) string and returns one of available Sass types.\n *\n * First argument: `sass.SassString` - String to decode (parse).\n *\n * @param {sass.Value[]} decodeArguments\n */\nfunction decode(decodeArguments) {\n\tconst [string_] = decodeArguments;\n\tconst string = string_.assertString('string');\n\t/** @type {JsonValue?} */\n\tlet resolvedValue = {};\n\ttry {\n\t\tresolvedValue = JSON.parse(string.text);\n\t} catch (error) {\n\t\tresolvedValue = null;\n\t}\n\treturn setJsonValueToSassValue(resolvedValue);\n}\n\n/** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */\nconst api = {\n\t'json-encode($data, $quotes: true)': encode,\n\t'json-decode($string)': decode\n};\n\nexport default api;\n"],"names":["getJsonValueFromSassValue","value","resolvedValue","sass","SassList","listToArray","SassMap","mapToObject","SassColor","rgbValue","red","green","blue","alphaValue","alpha","shortHexColor","rgbHex","apply","join","SassNumber","hasUnits","String","numeratorUnits","last","Number","SassString","text","SassBoolean","Boolean","list","length","asList","size","data","index","Array","from","keys","get","push","map","contents","key","unitTypes","isColor","parseColor","rgba","parseValueToStringOrNumber","parsedValue","unit","type","parseUnit","includes","error","parseValueToColor","setJsonValueToSassValue","isArray","arrayToList","isPlainObject","objectToMap","sassTrue","sassFalse","sassNull","array","item","object","property","Object","entries","OrderedMap","encode","encodeArguments","quotes_","quotes","assertBoolean","shouldQuote","JSON","stringify","decode","decodeArguments","string_","string","assertString","parse","api"],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  export default setJsonValueToSassValue;
2
- export type SassType = import('../index').SassType;
3
2
  export type JsonValue = import('../index').JsonValue;
4
3
  export type JsonObject = import('../index').JsonObject;
5
4
  export type JsonArray = import('../index').JsonArray;
6
5
  /**
7
6
  * @param {JsonValue} value
8
7
  */
9
- declare function setJsonValueToSassValue(value: JsonValue): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Boolean<true> | sass.types.Boolean<false> | sass.types.Color | sass.types.List<sass.types.SassType> | sass.types.Map<sass.types.SassType, sass.types.SassType>;
8
+ declare function setJsonValueToSassValue(value: JsonValue): sass.Value;
10
9
  import sass from "sass";
11
10
  //# sourceMappingURL=json-to-sass.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";uBAMa,OAAO,UAAU,EAAE,QAAQ;wBAC3B,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAwCzC;;GAEG;AACH,gDAFW,SAAS,uOAsBnB"}
1
+ {"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";wBAOa,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AA6CzC;;GAEG;AACH,gDAFW,SAAS,cAoBnB"}