node-sass-json-functions 3.3.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.
@@ -5,6 +5,6 @@ export type JsonArray = import('../index').JsonArray;
5
5
  /**
6
6
  * @param {JsonValue} value
7
7
  */
8
- declare function setJsonValueToSassValue(value: JsonValue): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Color | sass.types.List | sass.types.Map | sass.types.Boolean<true> | sass.types.Boolean<false>;
8
+ declare function setJsonValueToSassValue(value: JsonValue): sass.Value;
9
9
  import sass from "sass";
10
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":";wBAMa,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAwCzC;;GAEG;AACH,gDAFW,SAAS,wKAsBnB"}
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,26 +1,15 @@
1
1
  export default getJsonValueFromSassValue;
2
- export type Options = {
3
- /**
4
- * Number of digits after the decimal.
5
- */
6
- precision: number;
7
- };
8
2
  export type JsonValue = import('../index').JsonValue;
9
3
  export type JsonObject = import('../index').JsonObject;
10
4
  export type JsonArray = import('../index').JsonArray;
11
- /**
12
- * @typedef {object} Options
13
- * @property {number} precision Number of digits after the decimal.
14
- */
15
5
  /**
16
6
  * @typedef {import('../index').JsonValue} JsonValue
17
7
  * @typedef {import('../index').JsonObject} JsonObject
18
8
  * @typedef {import('../index').JsonArray} JsonArray
19
9
  */
20
10
  /**
21
- * @param {sass.LegacyValue|undefined} value
22
- * @param {Options} options
11
+ * @param {sass.Value|undefined} value
23
12
  */
24
- declare function getJsonValueFromSassValue(value: sass.LegacyValue | undefined, options: Options): 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;
25
14
  import sass from "sass";
26
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":";;;;;eAOc,MAAM;;wBAIP,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AARzC;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,kDAHW,KAAK,WAAW,GAAC,SAAS,WAC1B,OAAO,mGAsCjB"}
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
@@ -5,10 +5,10 @@ export type JsonPrimitive = string | number | boolean | null;
5
5
  export type JsonObject = {
6
6
  [x: string]: JsonValue | undefined;
7
7
  };
8
- /** @type {{ 'json-encode($value, $quotes: true, $precision: 5)': typeof encode, 'json-decode($value)': typeof decode }} */
8
+ /** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
9
9
  declare const api: {
10
- 'json-encode($value, $quotes: true, $precision: 5)': typeof encode;
11
- 'json-decode($value)': typeof decode;
10
+ 'json-encode($data, $quotes: true)': typeof encode;
11
+ 'json-decode($string)': typeof decode;
12
12
  };
13
13
  /**
14
14
  * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue
@@ -19,16 +19,20 @@ declare const api: {
19
19
  /**
20
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.
21
21
  *
22
- * @param {sass.LegacyValue} value Data to encode (stringify).
23
- * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.
24
- * @param {sass.types.Number} precision Number of digits after the decimal.
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
25
27
  */
26
- declare function encode(value: sass.LegacyValue, quotes: sass.types.Boolean, precision: sass.types.Number): sass.types.String;
28
+ declare function encode(encodeArguments: sass.Value[]): sass.SassString;
27
29
  /**
28
30
  * Decodes (`JSON.parse`) string and returns one of available Sass types.
29
31
  *
30
- * @param {sass.types.String} value String to decode (parse).
32
+ * First argument: `sass.SassString` - String to decode (parse).
33
+ *
34
+ * @param {sass.Value[]} decodeArguments
31
35
  */
32
- declare function decode(value: sass.types.String): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Color | sass.types.List | sass.types.Map | sass.types.Boolean<true> | sass.types.Boolean<false>;
36
+ declare function decode(decodeArguments: sass.Value[]): sass.Value;
33
37
  import sass from "sass";
34
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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;;;;AAsC7C,2HAA2H;AAC3H,mBADW;IAAE,mDAAmD,EAAE,aAAa,CAAC;IAAC,qBAAqB,EAAE,aAAa,CAAA;CAAE,CAIrH;AA7CF;;;;;GAKG;AAEH;;;;;;GAMG;AACH,+BAJW,KAAK,WAAW,UAChB,KAAK,KAAK,QAAQ,aAClB,KAAK,KAAK,OAAO,qBAW3B;AAED;;;;GAIG;AACH,+BAFW,KAAK,KAAK,OAAO,wKAW3B"}
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,15 +1,10 @@
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';
8
-
9
- /**
10
- * @typedef {object} Options
11
- * @property {number} precision Number of digits after the decimal.
12
- */
7
+ import { OrderedMap } from 'immutable';
13
8
 
14
9
  /**
15
10
  * @typedef {import('../index').JsonValue} JsonValue
@@ -18,77 +13,73 @@ import parseUnit from 'parse-css-dimension';
18
13
  */
19
14
 
20
15
  /**
21
- * @param {sass.LegacyValue|undefined} value
22
- * @param {Options} options
16
+ * @param {sass.Value|undefined} value
23
17
  */
24
- function getJsonValueFromSassValue(value, options) {
25
- let resolvedValue;
26
- if (value instanceof sass.types.List) {
27
- resolvedValue = listToArray(value, options);
28
- } else if (value instanceof sass.types.Map) {
29
- resolvedValue = mapToObject(value, options);
30
- } else if (value instanceof sass.types.Color) {
31
- /** @type {[number, number, number]} */
32
- const rgbValue = [value.getR(), value.getG(), value.getB()];
33
- const alphaValue = value.getA();
34
- if (alphaValue === 1) {
35
- resolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);
36
- } else {
37
- resolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;
38
- }
39
- } else if (value instanceof sass.types.Number) {
40
- if (value.getUnit() !== '') {
41
- resolvedValue = String(
42
- round(Number(value.getValue()), options.precision) +
43
- value.getUnit()
44
- );
45
- } else {
46
- resolvedValue = round(Number(value.getValue()), options.precision);
47
- }
48
- } else {
49
- try {
50
- if (typeof value !== 'undefined' && 'getValue' in value) {
51
- resolvedValue = value.getValue();
52
- } else {
53
- resolvedValue = null;
54
- }
55
- } catch (error) {
56
- resolvedValue = null;
57
- }
58
- }
59
- return resolvedValue;
18
+ function getJsonValueFromSassValue(value) {
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;
60
47
  }
61
48
 
62
49
  /**
63
- * @param {sass.types.List} list
64
- * @param {Options} options
50
+ * @param {sass.SassList} list
65
51
  */
66
- function listToArray(list, options) {
67
- const length = list.getLength();
68
- /** @type {JsonArray} */
69
- const data = [];
70
- for (const index of Array.from({ length }).keys()) {
71
- const value = getJsonValueFromSassValue(list.getValue(index), options);
72
- data.push(value);
73
- }
74
- return data;
52
+ function listToArray(list) {
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;
75
63
  }
76
64
 
77
65
  /**
78
- * @param {sass.types.Map} map
79
- * @param {Options} options
66
+ * @param {sass.SassMap} map
80
67
  */
81
- function mapToObject(map, options) {
82
- const length = map.getLength();
83
- /** @type {JsonObject} */
84
- const data = {};
85
- for (const index of Array.from({ length }).keys()) {
86
- // @ts-ignore
87
- const key = String(map.getKey(index).getValue());
88
- const value = getJsonValueFromSassValue(map.getValue(index), options);
89
- data[key] = value;
90
- }
91
- return data;
68
+ function mapToObject(map) {
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;
92
83
  }
93
84
 
94
85
  /**
@@ -103,87 +94,92 @@ const unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];
103
94
  * @param {string} value
104
95
  */
105
96
  function isColor(value) {
106
- return typeof parseColor(value).rgba !== 'undefined';
97
+ return typeof parseColor(value).rgba !== 'undefined';
107
98
  }
108
99
 
109
100
  /**
110
101
  * @param {string} value
111
102
  */
112
103
  function parseValueToStringOrNumber(value) {
113
- let resolvedValue;
114
- try {
115
- const { value: parsedValue, unit, type } = parseUnit(value);
116
- if (unitTypes.includes(type)) {
117
- resolvedValue = new sass.types.Number(parsedValue, unit);
118
- } else if (type === 'percentage') {
119
- resolvedValue = new sass.types.Number(parsedValue, '%');
120
- } else {
121
- resolvedValue = new sass.types.String(value);
122
- }
123
- } catch (error) {
124
- resolvedValue = new sass.types.String(value);
125
- }
126
- 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;
127
122
  }
128
123
 
129
124
  /**
130
125
  * @param {string} value
131
126
  */
132
127
  function parseValueToColor(value) {
133
- const [r, g, b, a] = parseColor(value).rgba;
134
- 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
+ });
135
135
  }
136
136
 
137
137
  /**
138
138
  * @param {JsonValue} value
139
139
  */
140
140
  function setJsonValueToSassValue(value) {
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.types.Number(value);
152
- } else if (typeof value === 'boolean') {
153
- resolvedValue = value
154
- ? sass.types.Boolean.TRUE
155
- : sass.types.Boolean.FALSE;
156
- } else {
157
- resolvedValue = sass.types.Null.NULL;
158
- }
159
- 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;
160
158
  }
161
159
 
162
160
  /**
163
161
  * @param {JsonArray} array
164
162
  */
165
163
  function arrayToList(array) {
166
- const length = array.length;
167
- const data = new sass.types.List(length);
168
- for (const [index, item] of array.entries()) {
169
- data.setValue(index, setJsonValueToSassValue(item));
170
- }
171
- 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);
172
170
  }
173
171
 
174
172
  /**
175
173
  * @param {JsonObject} object
176
174
  */
177
175
  function objectToMap(object) {
178
- const length = Object.keys(object).length;
179
- const data = new sass.types.Map(length);
180
- for (const [index, [property, value = null]] of Object.entries(
181
- object
182
- ).entries()) {
183
- data.setKey(index, setJsonValueToSassValue(property));
184
- data.setValue(index, setJsonValueToSassValue(value));
185
- }
186
- 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));
187
183
  }
188
184
 
189
185
  /**
@@ -196,41 +192,47 @@ function objectToMap(object) {
196
192
  /**
197
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.
198
194
  *
199
- * @param {sass.LegacyValue} value Data to encode (stringify).
200
- * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.
201
- * @param {sass.types.Number} precision Number of digits after the decimal.
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
202
200
  */
203
- function encode(value, quotes, precision) {
204
- const shouldQuote = quotes.getValue();
205
- let resolvedValue = JSON.stringify(
206
- getJsonValueFromSassValue(value, { precision: precision.getValue() })
207
- );
208
- if (shouldQuote) {
209
- resolvedValue = `'${resolvedValue}'`;
210
- }
211
- 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);
212
210
  }
213
211
 
214
212
  /**
215
213
  * Decodes (`JSON.parse`) string and returns one of available Sass types.
216
214
  *
217
- * @param {sass.types.String} value String to decode (parse).
215
+ * First argument: `sass.SassString` - String to decode (parse).
216
+ *
217
+ * @param {sass.Value[]} decodeArguments
218
218
  */
219
- function decode(value) {
220
- /** @type {JsonValue?} */
221
- let resolvedValue = {};
222
- try {
223
- resolvedValue = JSON.parse(value.getValue());
224
- } catch (error) {
225
- resolvedValue = null;
226
- }
227
- 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);
228
230
  }
229
231
 
230
- /** @type {{ 'json-encode($value, $quotes: true, $precision: 5)': typeof encode, 'json-decode($value)': typeof decode }} */
232
+ /** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
231
233
  const api = {
232
- 'json-encode($value, $quotes: true, $precision: 5)': encode,
233
- 'json-decode($value)': decode
234
+ 'json-encode($data, $quotes: true)': encode,
235
+ 'json-decode($string)': decode
234
236
  };
235
237
 
236
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 {object} Options\n * @property {number} precision Number of digits after the decimal.\n */\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.LegacyValue|undefined} value\n * @param {Options} options\n */\nfunction getJsonValueFromSassValue(value, options) {\n\tlet resolvedValue;\n\tif (value instanceof sass.types.List) {\n\t\tresolvedValue = listToArray(value, options);\n\t} else if (value instanceof sass.types.Map) {\n\t\tresolvedValue = mapToObject(value, options);\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()), options.precision) +\n\t\t\t\t\tvalue.getUnit()\n\t\t\t);\n\t\t} else {\n\t\t\tresolvedValue = round(Number(value.getValue()), options.precision);\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tif (typeof value !== 'undefined' && '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 * @param {Options} options\n */\nfunction listToArray(list, options) {\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), options);\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.types.Map} map\n * @param {Options} options\n */\nfunction mapToObject(map, options) {\n\tconst length = map.getLength();\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\t// @ts-ignore\n\t\tconst key = String(map.getKey(index).getValue());\n\t\tconst value = getJsonValueFromSassValue(map.getValue(index), options);\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').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 {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 {sass.LegacyValue} value Data to encode (stringify).\n * @param {sass.types.Boolean} quotes Should output string be quoted with single quotes.\n * @param {sass.types.Number} precision Number of digits after the decimal.\n */\nfunction encode(value, quotes, precision) {\n\tconst shouldQuote = quotes.getValue();\n\tlet resolvedValue = JSON.stringify(\n\t\tgetJsonValueFromSassValue(value, { precision: precision.getValue() })\n\t);\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, $precision: 5)': typeof encode, 'json-decode($value)': typeof decode }} */\nconst api = {\n\t'json-encode($value, $quotes: true, $precision: 5)': 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":";;;;;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,yBAAyBA,CAACC,KAAK,EAAE;AACzC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAID,KAAK,YAAYE,IAAI,CAACC,QAAQ,EAAE;AACnCF,IAAAA,aAAa,GAAGG,WAAW,CAACJ,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,IAAI,CAACG,OAAO,EAAE;AACzCJ,IAAAA,aAAa,GAAGK,WAAW,CAACN,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,IAAI,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,aAAa,CAAE,CAAA,CAAA,EAAGC,MAAM,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,IAAI,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,IAAI,CAACsB,UAAU,EAAE;AAC5CvB,IAAAA,aAAa,GAAGmB,MAAM,CAACpB,KAAK,CAACyB,IAAI,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIzB,KAAK,YAAYE,IAAI,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,UAAU,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,SAAS,CAAClD,KAAK,CAAC,CAAA;AAC3D,IAAA,IAAI0C,SAAS,CAACS,QAAQ,CAACF,IAAI,CAAC,EAAE;MAC7BhD,aAAa,GAAG,IAAIC,IAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAEC,IAAI,CAAC,CAAA;AACvD,KAAC,MAAM,IAAIC,IAAI,KAAK,YAAY,EAAE;MACjChD,aAAa,GAAG,IAAIC,IAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAE,GAAG,CAAC,CAAA;AACtD,KAAC,MAAM;AACN9C,MAAAA,aAAa,GAAG,IAAIC,IAAI,CAACsB,UAAU,CAACxB,KAAK,CAAC,CAAA;AAC3C,KAAA;GACA,CAAC,OAAOoD,KAAK,EAAE;AACfnD,IAAAA,aAAa,GAAG,IAAIC,IAAI,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,UAAU,CAAC5C,KAAK,CAAC,CAAC6C,IAAI,CAAA;AACxD,EAAA,OAAO,IAAI3C,IAAI,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,aAAa,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,IAAI,CAACgB,UAAU,CAAClB,KAAK,CAAC,CAAA;AAC3C,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IACtCC,aAAa,GAAGD,KAAK,GAAGE,IAAI,CAACyD,QAAQ,GAAGzD,IAAI,CAAC0D,SAAS,CAAA;AACvD,GAAC,MAAM;IACN3D,aAAa,GAAGC,IAAI,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,IAAI,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,IAAI,CAACG,OAAO,CAAC+D,UAAU,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,IAAI,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;;;;"}
@@ -5,6 +5,6 @@ export type JsonArray = import('../index').JsonArray;
5
5
  /**
6
6
  * @param {JsonValue} value
7
7
  */
8
- declare function setJsonValueToSassValue(value: JsonValue): sass.types.Null | sass.types.Number | sass.types.String | sass.types.Color | sass.types.List | sass.types.Map | sass.types.Boolean<true> | sass.types.Boolean<false>;
8
+ declare function setJsonValueToSassValue(value: JsonValue): sass.Value;
9
9
  import sass from "sass";
10
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":";wBAMa,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAwCzC;;GAEG;AACH,gDAFW,SAAS,wKAsBnB"}
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,26 +1,15 @@
1
1
  export default getJsonValueFromSassValue;
2
- export type Options = {
3
- /**
4
- * Number of digits after the decimal.
5
- */
6
- precision: number;
7
- };
8
2
  export type JsonValue = import('../index').JsonValue;
9
3
  export type JsonObject = import('../index').JsonObject;
10
4
  export type JsonArray = import('../index').JsonArray;
11
- /**
12
- * @typedef {object} Options
13
- * @property {number} precision Number of digits after the decimal.
14
- */
15
5
  /**
16
6
  * @typedef {import('../index').JsonValue} JsonValue
17
7
  * @typedef {import('../index').JsonObject} JsonObject
18
8
  * @typedef {import('../index').JsonArray} JsonArray
19
9
  */
20
10
  /**
21
- * @param {sass.LegacyValue|undefined} value
22
- * @param {Options} options
11
+ * @param {sass.Value|undefined} value
23
12
  */
24
- declare function getJsonValueFromSassValue(value: sass.LegacyValue | undefined, options: Options): 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;
25
14
  import sass from "sass";
26
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":";;;;;eAOc,MAAM;;wBAIP,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AARzC;;;GAGG;AAEH;;;;GAIG;AAEH;;;GAGG;AACH,kDAHW,KAAK,WAAW,GAAC,SAAS,WAC1B,OAAO,mGAsCjB"}
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"}