node-sass-json-functions 4.0.1 → 4.1.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/CHANGELOG.md +20 -9
- package/README.md +13 -4
- package/cjs/index.js +78 -4
- package/cjs/index.js.map +1 -1
- package/cjs/lib/json-to-sass.d.ts +5 -0
- package/cjs/lib/json-to-sass.d.ts.map +1 -1
- package/cjs/lib/sass-to-json.d.ts.map +1 -1
- package/esm/index.js +78 -4
- package/esm/index.js.map +1 -1
- package/esm/lib/json-to-sass.d.ts +5 -0
- package/esm/lib/json-to-sass.d.ts.map +1 -1
- package/esm/lib/sass-to-json.d.ts.map +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased][]
|
|
4
4
|
|
|
5
|
+
## [4.1.0][] - 2023-09-20
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Parse calc values to true values instead of null
|
|
10
|
+
([#7](https://github.com/niksy/node-sass-json-functions/issues/7))
|
|
11
|
+
|
|
12
|
+
## [4.0.2][] - 2023-08-16
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- Quoted strings for map keys
|
|
17
|
+
([#9](https://github.com/niksy/node-sass-json-functions/issues/9))
|
|
18
|
+
|
|
5
19
|
## [4.0.1][] - 2023-06-13
|
|
6
20
|
|
|
7
21
|
### Fixed
|
|
@@ -57,16 +71,13 @@
|
|
|
57
71
|
[3.0.0]: https://github.com/niksy/node-sass-json-functions/tree/v3.0.0
|
|
58
72
|
[3.1.0]: https://github.com/niksy/node-sass-json-functions/tree/v3.1.0
|
|
59
73
|
[3.2.0]: https://github.com/niksy/node-sass-json-functions/tree/v3.2.0
|
|
60
|
-
|
|
61
|
-
<!-- prettier-ignore-end -->
|
|
62
|
-
|
|
63
|
-
https://github.com/niksy/node-sass-json-functions/compare/v3.3.0...HEAD
|
|
64
|
-
|
|
65
74
|
[3.3.0]: https://github.com/niksy/node-sass-json-functions/tree/v3.3.0
|
|
66
|
-
[Unreleased]:
|
|
67
|
-
https://github.com/niksy/node-sass-json-functions/compare/v4.0.1...HEAD
|
|
68
75
|
[4.0.1]: https://github.com/niksy/node-sass-json-functions/tree/v4.0.1
|
|
76
|
+
[4.0.0]: https://github.com/niksy/node-sass-json-functions/tree/v4.0.0
|
|
77
|
+
[Unreleased]:
|
|
78
|
+
https://github.com/niksy/node-sass-json-functions/compare/v4.1.0...HEAD
|
|
79
|
+
[4.1.0]: https://github.com/niksy/node-sass-json-functions/tree/v4.1.0
|
|
69
80
|
|
|
70
|
-
https://github.com/niksy/node-sass-json-functions/compare/v4.0.
|
|
81
|
+
https://github.com/niksy/node-sass-json-functions/compare/v4.0.2...HEAD
|
|
71
82
|
|
|
72
|
-
[4.0.
|
|
83
|
+
[4.0.2]: https://github.com/niksy/node-sass-json-functions/tree/v4.0.2
|
package/README.md
CHANGED
|
@@ -55,7 +55,10 @@ $map: (
|
|
|
55
55
|
bag: 'foo bar'
|
|
56
56
|
),
|
|
57
57
|
qux: rgba(255, 255, 255, 0.5),
|
|
58
|
-
corgle: red
|
|
58
|
+
corgle: red,
|
|
59
|
+
george: calc(42px + 42%),
|
|
60
|
+
lexi: calc(42px / 2),
|
|
61
|
+
oliver: calc(42px + 10px + 10px)
|
|
59
62
|
);
|
|
60
63
|
|
|
61
64
|
body {
|
|
@@ -73,7 +76,7 @@ body {
|
|
|
73
76
|
content: '[1,2,"3",[4,5,6],{"foo":"bar baz"}]';
|
|
74
77
|
content: '{"foo":1,"bar":[2,3],"baz":"3 3 3","bad":{"foo":11,"bar":22,"baz":[5,4,6,null,1,"1.23457px"],"bag":"foo bar"},"qux":"rgba(255,255,255,0.5)","corgle":"#f00"}';
|
|
75
78
|
content: [1,2,"3",[4,5,6],{"foo":"bar baz"}];
|
|
76
|
-
content: {"foo":1,"bar":[2,3],"baz":"3 3 3","bad":{"foo":11,"bar":22,"baz":[5,4,6,null,1,"1.23457px"],"bag":"foo bar"},"qux":"rgba(255,255,255,0.5)","corgle":"#f00"};
|
|
79
|
+
content: {"foo":1,"bar":[2,3],"baz":"3 3 3","bad":{"foo":11,"bar":22,"baz":[5,4,6,null,1,"1.23457px"],"bag":"foo bar"},"qux":"rgba(255,255,255,0.5)","corgle":"#f00","george":"calc(42px + 42%)","lexi":"21px","oliver":"62px"};
|
|
77
80
|
}
|
|
78
81
|
```
|
|
79
82
|
|
|
@@ -83,7 +86,7 @@ Input:
|
|
|
83
86
|
|
|
84
87
|
```scss
|
|
85
88
|
$array: '[1,2,"3",[4,5,6],{"foo":"bar baz"}]';
|
|
86
|
-
$object: '{"foo":1,"bar":[2,3],"baz":"3 3 3","bad":{"foo":11,"bar":22,"baz":[5,4,6,null,1,"1.23456789px"],"bag":"foo bar"},"qux":"rgba(255,255,255,0.5)","corgle":"#f00"}';
|
|
89
|
+
$object: '{"foo":1,"bar":[2,3],"baz":"3 3 3","bad":{"foo":11,"bar":22,"baz":[5,4,6,null,1,"1.23456789px"],"bag":"foo bar"},"qux":"rgba(255,255,255,0.5)","corgle":"#f00","george":"calc(42px + 42%)","lexi":"21px","oliver":"calc(42px + 10px + 10px)"}';
|
|
87
90
|
|
|
88
91
|
@debug json-decode($array);
|
|
89
92
|
@debug json-decode($object);
|
|
@@ -93,7 +96,7 @@ Output:
|
|
|
93
96
|
|
|
94
97
|
```sh
|
|
95
98
|
DEBUG: 1, 2, 3, 4, 5, 6, (foo: bar baz)
|
|
96
|
-
DEBUG: (foo: 1, bar: 2, 3, baz: 3 3 3, bad: (foo: 11, bar: 22, baz: 5, 4, 6, null, 1, 1.23456789px, bag: foo bar), qux: rgba(255, 255, 255, 0.5), corgle: red)
|
|
99
|
+
DEBUG: (foo: 1, bar: 2, 3, baz: 3 3 3, bad: (foo: 11, bar: 22, baz: 5, 4, 6, null, 1, 1.23456789px, bag: foo bar), qux: rgba(255, 255, 255, 0.5), corgle: red, george: calc(42px + 42%), lexi: 21px, oliver: "calc(42px + 10px + 10px)")
|
|
97
100
|
```
|
|
98
101
|
|
|
99
102
|
## API
|
|
@@ -111,6 +114,8 @@ standard CSS values.
|
|
|
111
114
|
- [Sass colors][sass-color] are transformed to `rgba()` syntax if they have
|
|
112
115
|
alpha value, otherwise they are transformed to hex value (and it’s shorther
|
|
113
116
|
version if possible)
|
|
117
|
+
- [Sass calculations][sass-calculation] are transformed to values
|
|
118
|
+
corresponding to calculation result (string or number)
|
|
114
119
|
- [Sass strings][sass-string] are transformed to strings
|
|
115
120
|
- [Sass numbers][sass-number] are transformed to numbers
|
|
116
121
|
- [Sass booleans][sass-boolean] are transformed to booleans
|
|
@@ -141,6 +146,9 @@ types][sass-types].
|
|
|
141
146
|
- Objects are transformed to [Sass maps][sass-map]
|
|
142
147
|
- Anything properly parsed with [parse-color][parse-color] is transformed to
|
|
143
148
|
[Sass color][sass-color]
|
|
149
|
+
- Calculations (`calc()` values) are transformed to [Sass
|
|
150
|
+
calculations][sass-calculation] for simple operations and to [Sass
|
|
151
|
+
strings][sass-string] for everything else
|
|
144
152
|
- Strings are transformed to Sass numbers with units if they can be properly
|
|
145
153
|
parsed with [parse-css-dimension][parse-css-dimension], otherwise they are
|
|
146
154
|
transformed to [Sass strings][sass-string]
|
|
@@ -172,6 +180,7 @@ MIT © [Ivan Nikolić](http://ivannikolic.com)
|
|
|
172
180
|
[sass-string]: https://sass-lang.com/documentation/values/strings
|
|
173
181
|
[sass-null]: https://sass-lang.com/documentation/values/null
|
|
174
182
|
[sass-boolean]: https://sass-lang.com/documentation/values/booleans
|
|
183
|
+
[sass-calculation]: https://sass-lang.com/documentation/values/calculations
|
|
175
184
|
[parse-color]: https://github.com/substack/parse-color
|
|
176
185
|
[parse-css-dimension]: https://github.com/jedmao/parse-css-dimension
|
|
177
186
|
|
package/cjs/index.js
CHANGED
|
@@ -7,6 +7,7 @@ var isPlainObject = require('is-plain-obj');
|
|
|
7
7
|
var parseColor = require('parse-color');
|
|
8
8
|
var parseUnit = require('parse-css-dimension');
|
|
9
9
|
var immutable = require('immutable');
|
|
10
|
+
var postcssValuesParser = require('postcss-values-parser');
|
|
10
11
|
|
|
11
12
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
13
|
|
|
@@ -45,6 +46,7 @@ var parseUnit__default = /*#__PURE__*/_interopDefaultLegacy(parseUnit);
|
|
|
45
46
|
* @param {sass.Value|undefined} value
|
|
46
47
|
*/
|
|
47
48
|
function getJsonValueFromSassValue(value) {
|
|
49
|
+
var _resolvedValue;
|
|
48
50
|
let resolvedValue;
|
|
49
51
|
if (value instanceof sass__namespace.SassList) {
|
|
50
52
|
resolvedValue = listToArray(value);
|
|
@@ -69,10 +71,14 @@ function getJsonValueFromSassValue(value) {
|
|
|
69
71
|
resolvedValue = String(value.text);
|
|
70
72
|
} else if (value instanceof sass__namespace.SassBoolean) {
|
|
71
73
|
resolvedValue = Boolean(value.value);
|
|
72
|
-
} else {
|
|
74
|
+
} else if (typeof value === 'undefined') {
|
|
75
|
+
resolvedValue = null;
|
|
76
|
+
} else if (value.isTruthy) {
|
|
77
|
+
resolvedValue = value.toString();
|
|
78
|
+
} else if (value.realNull) {
|
|
73
79
|
resolvedValue = null;
|
|
74
80
|
}
|
|
75
|
-
return resolvedValue;
|
|
81
|
+
return (_resolvedValue = resolvedValue) !== null && _resolvedValue !== void 0 ? _resolvedValue : null;
|
|
76
82
|
}
|
|
77
83
|
|
|
78
84
|
/**
|
|
@@ -103,7 +109,7 @@ function mapToObject(map) {
|
|
|
103
109
|
}).keys()) {
|
|
104
110
|
const resolvedValue = map.get(index);
|
|
105
111
|
if (typeof resolvedValue !== 'undefined') {
|
|
106
|
-
const key = String(resolvedValue.get(0));
|
|
112
|
+
const key = String(getJsonValueFromSassValue(resolvedValue.get(0)));
|
|
107
113
|
const value = getJsonValueFromSassValue(resolvedValue.get(1));
|
|
108
114
|
data[key] = value;
|
|
109
115
|
}
|
|
@@ -129,7 +135,27 @@ function isColor(value) {
|
|
|
129
135
|
/**
|
|
130
136
|
* @param {string} value
|
|
131
137
|
*/
|
|
132
|
-
function
|
|
138
|
+
function isCalculation(value) {
|
|
139
|
+
if (!value.includes('calc')) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const root = postcssValuesParser.parse(value);
|
|
144
|
+
const node = root.first;
|
|
145
|
+
return (node === null || node === void 0 ? void 0 : node.type) === 'func' && node.name === 'calc';
|
|
146
|
+
} catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @param {string} value
|
|
153
|
+
* @param {{forceNumber: boolean}=} options
|
|
154
|
+
*/
|
|
155
|
+
function parseValueToStringOrNumber(value, options) {
|
|
156
|
+
const {
|
|
157
|
+
forceNumber = false
|
|
158
|
+
} = options !== null && options !== void 0 ? options : {};
|
|
133
159
|
let resolvedValue;
|
|
134
160
|
try {
|
|
135
161
|
const {
|
|
@@ -141,6 +167,8 @@ function parseValueToStringOrNumber(value) {
|
|
|
141
167
|
resolvedValue = new sass__namespace.SassNumber(parsedValue, unit);
|
|
142
168
|
} else if (type === 'percentage') {
|
|
143
169
|
resolvedValue = new sass__namespace.SassNumber(parsedValue, '%');
|
|
170
|
+
} else if (forceNumber && !Number.isNaN(Number(value))) {
|
|
171
|
+
resolvedValue = new sass__namespace.SassNumber(Number(value));
|
|
144
172
|
} else {
|
|
145
173
|
resolvedValue = new sass__namespace.SassString(value);
|
|
146
174
|
}
|
|
@@ -163,6 +191,50 @@ function parseValueToColor(value) {
|
|
|
163
191
|
});
|
|
164
192
|
}
|
|
165
193
|
|
|
194
|
+
/**
|
|
195
|
+
* @typedef {object} CalculationContainer
|
|
196
|
+
* @property {?sass.CalculationOperator} operator
|
|
197
|
+
* @property {?sass.CalculationValue} left
|
|
198
|
+
* @property {?sass.CalculationValue} right
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @param {string} value
|
|
203
|
+
*/
|
|
204
|
+
function parseValueToCalculation(value) {
|
|
205
|
+
const root = postcssValuesParser.parse(value);
|
|
206
|
+
const node = root.first;
|
|
207
|
+
let calc = /** @type {CalculationContainer} */{
|
|
208
|
+
operator: null,
|
|
209
|
+
left: null,
|
|
210
|
+
right: null
|
|
211
|
+
};
|
|
212
|
+
if ((node === null || node === void 0 ? void 0 : node.type) === 'func' && node.name === 'calc') {
|
|
213
|
+
if (node.nodes.length > 3) {
|
|
214
|
+
return parseValueToStringOrNumber(value);
|
|
215
|
+
}
|
|
216
|
+
node.nodes.forEach((node, index) => {
|
|
217
|
+
if (node.type === 'operator') {
|
|
218
|
+
calc.operator = /** @type {sass.CalculationOperator} */
|
|
219
|
+
node.value;
|
|
220
|
+
} else if (index === 0) {
|
|
221
|
+
calc.left = parseValueToStringOrNumber(node.toString());
|
|
222
|
+
} else {
|
|
223
|
+
calc.right = parseValueToStringOrNumber(node.toString(), {
|
|
224
|
+
forceNumber: true
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
try {
|
|
230
|
+
return sass__namespace.SassCalculation.calc(new sass__namespace.CalculationOperation(
|
|
231
|
+
// @ts-ignore
|
|
232
|
+
calc.operator, calc.left, calc.right));
|
|
233
|
+
} catch {
|
|
234
|
+
return parseValueToStringOrNumber(value);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
166
238
|
/**
|
|
167
239
|
* @param {JsonValue} value
|
|
168
240
|
*/
|
|
@@ -174,6 +246,8 @@ function setJsonValueToSassValue(value) {
|
|
|
174
246
|
resolvedValue = objectToMap(value);
|
|
175
247
|
} else if (isColor(String(value))) {
|
|
176
248
|
resolvedValue = parseValueToColor(String(value));
|
|
249
|
+
} else if (isCalculation(String(value))) {
|
|
250
|
+
resolvedValue = parseValueToCalculation(String(value));
|
|
177
251
|
} else if (typeof value === 'string') {
|
|
178
252
|
resolvedValue = parseValueToStringOrNumber(value);
|
|
179
253
|
} else if (typeof value === 'number') {
|
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 * as 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 * as 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 * as 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
|
+
{"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import * as 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 if (typeof value === 'undefined') {\n\t\tresolvedValue = null;\n\t} else if (value.isTruthy) {\n\t\tresolvedValue = value.toString();\n\t} else if (value.realNull) {\n\t\tresolvedValue = null;\n\t}\n\treturn resolvedValue ?? null;\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(getJsonValueFromSassValue(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 * as sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\nimport { OrderedMap } from 'immutable';\nimport { parse } from 'postcss-values-parser';\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 isCalculation(value) {\n\tif (!value.includes('calc')) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst root = parse(value);\n\t\tconst node = root.first;\n\t\treturn node?.type === 'func' && node.name === 'calc';\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * @param {string} value\n * @param {{forceNumber: boolean}=} options\n */\nfunction parseValueToStringOrNumber(value, options) {\n\tconst { forceNumber = false } = options ?? {};\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 if (forceNumber && !Number.isNaN(Number(value))) {\n\t\t\tresolvedValue = new sass.SassNumber(Number(value));\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 * @typedef {object} CalculationContainer\n * @property {?sass.CalculationOperator} operator\n * @property {?sass.CalculationValue} left\n * @property {?sass.CalculationValue} right\n */\n\n/**\n * @param {string} value\n */\nfunction parseValueToCalculation(value) {\n\tconst root = parse(value);\n\tconst node = root.first;\n\n\tlet calc = /** @type {CalculationContainer} */ ({\n\t\toperator: null,\n\t\tleft: null,\n\t\tright: null\n\t});\n\tif (node?.type === 'func' && node.name === 'calc') {\n\t\tif (node.nodes.length > 3) {\n\t\t\treturn parseValueToStringOrNumber(value);\n\t\t}\n\t\tnode.nodes.forEach((node, index) => {\n\t\t\tif (node.type === 'operator') {\n\t\t\t\tcalc.operator = /** @type {sass.CalculationOperator} */ (\n\t\t\t\t\tnode.value\n\t\t\t\t);\n\t\t\t} else if (index === 0) {\n\t\t\t\tcalc.left = parseValueToStringOrNumber(node.toString());\n\t\t\t} else {\n\t\t\t\tcalc.right = parseValueToStringOrNumber(node.toString(), {\n\t\t\t\t\tforceNumber: true\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\ttry {\n\t\treturn sass.SassCalculation.calc(\n\t\t\tnew sass.CalculationOperation(\n\t\t\t\t// @ts-ignore\n\t\t\t\tcalc.operator,\n\t\t\t\tcalc.left,\n\t\t\t\tcalc.right\n\t\t\t)\n\t\t);\n\t} catch {\n\t\treturn parseValueToStringOrNumber(value);\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 (isCalculation(String(value))) {\n\t\tresolvedValue = parseValueToCalculation(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 * as 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","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","isTruthy","toString","realNull","list","length","asList","size","data","index","Array","from","keys","get","push","map","contents","key","unitTypes","isColor","parseColor","rgba","isCalculation","includes","root","parse","node","first","type","name","parseValueToStringOrNumber","options","forceNumber","parsedValue","unit","parseUnit","isNaN","error","parseValueToColor","parseValueToCalculation","calc","operator","left","right","nodes","forEach","SassCalculation","CalculationOperation","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","api"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,yBAAyBA,CAACC,KAAK,EAAE;AAAA,EAAA,IAAAC,cAAA,CAAA;AACzC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAIF,KAAK,YAAYG,eAAI,CAACC,QAAQ,EAAE;AACnCF,IAAAA,aAAa,GAAGG,WAAW,CAACL,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYG,eAAI,CAACG,OAAO,EAAE;AACzCJ,IAAAA,aAAa,GAAGK,WAAW,CAACP,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYG,eAAI,CAACK,SAAS,EAAE;AAC3C;AACA,IAAA,MAAMC,QAAQ,GAAG,CAACT,KAAK,CAACU,GAAG,EAAEV,KAAK,CAACW,KAAK,EAAEX,KAAK,CAACY,IAAI,CAAC,CAAA;AACrD,IAAA,MAAMC,UAAU,GAAGb,KAAK,CAACc,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,IAAIb,KAAK,YAAYG,eAAI,CAACgB,UAAU,EAAE;IAC5C,IAAInB,KAAK,CAACoB,QAAQ,EAAE;AACnBlB,MAAAA,aAAa,GAAGmB,MAAM,CAACrB,KAAK,CAACA,KAAK,CAAC,GAAGA,KAAK,CAACsB,cAAc,CAACC,IAAI,EAAE,CAAA;AAClE,KAAC,MAAM;AACNrB,MAAAA,aAAa,GAAGsB,MAAM,CAACxB,KAAK,CAACA,KAAK,CAAC,CAAA;AACpC,KAAA;AACD,GAAC,MAAM,IAAIA,KAAK,YAAYG,eAAI,CAACsB,UAAU,EAAE;AAC5CvB,IAAAA,aAAa,GAAGmB,MAAM,CAACrB,KAAK,CAAC0B,IAAI,CAAC,CAAA;AACnC,GAAC,MAAM,IAAI1B,KAAK,YAAYG,eAAI,CAACwB,WAAW,EAAE;AAC7CzB,IAAAA,aAAa,GAAG0B,OAAO,CAAC5B,KAAK,CAACA,KAAK,CAAC,CAAA;AACrC,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,WAAW,EAAE;AACxCE,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAC,MAAM,IAAIF,KAAK,CAAC6B,QAAQ,EAAE;AAC1B3B,IAAAA,aAAa,GAAGF,KAAK,CAAC8B,QAAQ,EAAE,CAAA;AACjC,GAAC,MAAM,IAAI9B,KAAK,CAAC+B,QAAQ,EAAE;AAC1B7B,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;EACA,OAAAD,CAAAA,cAAA,GAAOC,aAAa,MAAA,IAAA,IAAAD,cAAA,KAAAA,KAAAA,CAAAA,GAAAA,cAAA,GAAI,IAAI,CAAA;AAC7B,CAAA;;AAEA;AACA;AACA;AACA,SAASI,WAAWA,CAAC2B,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,MAAMxC,KAAK,GAAGD,yBAAyB,CAACiC,IAAI,CAACS,GAAG,CAACJ,KAAK,CAAC,CAAC,CAAA;AACxDD,IAAAA,IAAI,CAACM,IAAI,CAAC1C,KAAK,CAAC,CAAA;AACjB,GAAA;AACA,EAAA,OAAOoC,IAAI,CAAA;AACZ,CAAA;;AAEA;AACA;AACA;AACA,SAAS7B,WAAWA,CAACoC,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,MAAMtC,aAAa,GAAGyC,GAAG,CAACF,GAAG,CAACJ,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,OAAOnC,aAAa,KAAK,WAAW,EAAE;AACzC,MAAA,MAAM2C,GAAG,GAAGxB,MAAM,CAACtB,yBAAyB,CAACG,aAAa,CAACuC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;MACnE,MAAMzC,KAAK,GAAGD,yBAAyB,CAACG,aAAa,CAACuC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7DL,MAAAA,IAAI,CAACS,GAAG,CAAC,GAAG7C,KAAK,CAAA;AAClB,KAAA;AACD,GAAA;AACA,EAAA,OAAOoC,IAAI,CAAA;AACZ;;ACvEA;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,CAAC/C,KAAK,EAAE;EACvB,OAAO,OAAOgD,8BAAU,CAAChD,KAAK,CAAC,CAACiD,IAAI,KAAK,WAAW,CAAA;AACrD,CAAA;;AAEA;AACA;AACA;AACA,SAASC,aAAaA,CAAClD,KAAK,EAAE;AAC7B,EAAA,IAAI,CAACA,KAAK,CAACmD,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,IAAA,OAAO,KAAK,CAAA;AACb,GAAA;EACA,IAAI;AACH,IAAA,MAAMC,IAAI,GAAGC,yBAAK,CAACrD,KAAK,CAAC,CAAA;AACzB,IAAA,MAAMsD,IAAI,GAAGF,IAAI,CAACG,KAAK,CAAA;AACvB,IAAA,OAAO,CAAAD,IAAI,KAAJA,IAAAA,IAAAA,IAAI,uBAAJA,IAAI,CAAEE,IAAI,MAAK,MAAM,IAAIF,IAAI,CAACG,IAAI,KAAK,MAAM,CAAA;AACrD,GAAC,CAAC,MAAM;AACP,IAAA,OAAO,KAAK,CAAA;AACb,GAAA;AACD,CAAA;;AAEA;AACA;AACA;AACA;AACA,SAASC,0BAA0BA,CAAC1D,KAAK,EAAE2D,OAAO,EAAE;EACnD,MAAM;AAAEC,IAAAA,WAAW,GAAG,KAAA;GAAO,GAAGD,OAAO,KAAPA,IAAAA,IAAAA,OAAO,cAAPA,OAAO,GAAI,EAAE,CAAA;AAC7C,EAAA,IAAIzD,aAAa,CAAA;EACjB,IAAI;IACH,MAAM;AAAEF,MAAAA,KAAK,EAAE6D,WAAW;MAAEC,IAAI;AAAEN,MAAAA,IAAAA;AAAK,KAAC,GAAGO,6BAAS,CAAC/D,KAAK,CAAC,CAAA;AAC3D,IAAA,IAAI8C,SAAS,CAACK,QAAQ,CAACK,IAAI,CAAC,EAAE;MAC7BtD,aAAa,GAAG,IAAIC,eAAI,CAACgB,UAAU,CAAC0C,WAAW,EAAEC,IAAI,CAAC,CAAA;AACvD,KAAC,MAAM,IAAIN,IAAI,KAAK,YAAY,EAAE;MACjCtD,aAAa,GAAG,IAAIC,eAAI,CAACgB,UAAU,CAAC0C,WAAW,EAAE,GAAG,CAAC,CAAA;AACtD,KAAC,MAAM,IAAID,WAAW,IAAI,CAACpC,MAAM,CAACwC,KAAK,CAACxC,MAAM,CAACxB,KAAK,CAAC,CAAC,EAAE;MACvDE,aAAa,GAAG,IAAIC,eAAI,CAACgB,UAAU,CAACK,MAAM,CAACxB,KAAK,CAAC,CAAC,CAAA;AACnD,KAAC,MAAM;AACNE,MAAAA,aAAa,GAAG,IAAIC,eAAI,CAACsB,UAAU,CAACzB,KAAK,CAAC,CAAA;AAC3C,KAAA;GACA,CAAC,OAAOiE,KAAK,EAAE;AACf/D,IAAAA,aAAa,GAAG,IAAIC,eAAI,CAACsB,UAAU,CAACzB,KAAK,CAAC,CAAA;AAC3C,GAAA;AACA,EAAA,OAAOE,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASgE,iBAAiBA,CAAClE,KAAK,EAAE;AACjC,EAAA,MAAM,CAACU,GAAG,EAAEC,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,GAAGkC,8BAAU,CAAChD,KAAK,CAAC,CAACiD,IAAI,CAAA;AACxD,EAAA,OAAO,IAAI9C,eAAI,CAACK,SAAS,CAAC;IACzBE,GAAG;IACHC,KAAK;IACLC,IAAI;AACJE,IAAAA,KAAAA;AACD,GAAC,CAAC,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASqD,uBAAuBA,CAACnE,KAAK,EAAE;AACvC,EAAA,MAAMoD,IAAI,GAAGC,yBAAK,CAACrD,KAAK,CAAC,CAAA;AACzB,EAAA,MAAMsD,IAAI,GAAGF,IAAI,CAACG,KAAK,CAAA;EAEvB,IAAIa,IAAI,sCAAwC;AAC/CC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,KAAK,EAAE,IAAA;GACN,CAAA;AACF,EAAA,IAAI,CAAAjB,IAAI,KAAA,IAAA,IAAJA,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJA,IAAI,CAAEE,IAAI,MAAK,MAAM,IAAIF,IAAI,CAACG,IAAI,KAAK,MAAM,EAAE;AAClD,IAAA,IAAIH,IAAI,CAACkB,KAAK,CAACvC,MAAM,GAAG,CAAC,EAAE;MAC1B,OAAOyB,0BAA0B,CAAC1D,KAAK,CAAC,CAAA;AACzC,KAAA;IACAsD,IAAI,CAACkB,KAAK,CAACC,OAAO,CAAC,CAACnB,IAAI,EAAEjB,KAAK,KAAK;AACnC,MAAA,IAAIiB,IAAI,CAACE,IAAI,KAAK,UAAU,EAAE;QAC7BY,IAAI,CAACC,QAAQ;AACZf,QAAAA,IAAI,CAACtD,KACL,CAAA;AACF,OAAC,MAAM,IAAIqC,KAAK,KAAK,CAAC,EAAE;QACvB+B,IAAI,CAACE,IAAI,GAAGZ,0BAA0B,CAACJ,IAAI,CAACxB,QAAQ,EAAE,CAAC,CAAA;AACxD,OAAC,MAAM;QACNsC,IAAI,CAACG,KAAK,GAAGb,0BAA0B,CAACJ,IAAI,CAACxB,QAAQ,EAAE,EAAE;AACxD8B,UAAAA,WAAW,EAAE,IAAA;AACd,SAAC,CAAC,CAAA;AACH,OAAA;AACD,KAAC,CAAC,CAAA;AACH,GAAA;EACA,IAAI;IACH,OAAOzD,eAAI,CAACuE,eAAe,CAACN,IAAI,CAC/B,IAAIjE,eAAI,CAACwE,oBAAoB;AAC5B;IACAP,IAAI,CAACC,QAAQ,EACbD,IAAI,CAACE,IAAI,EACTF,IAAI,CAACG,KACN,CACD,CAAC,CAAA;AACF,GAAC,CAAC,MAAM;IACP,OAAOb,0BAA0B,CAAC1D,KAAK,CAAC,CAAA;AACzC,GAAA;AACD,CAAA;;AAEA;AACA;AACA;AACA,SAAS4E,uBAAuBA,CAAC5E,KAAK,EAAE;AACvC,EAAA,IAAIE,aAAa,CAAA;AACjB,EAAA,IAAIoC,KAAK,CAACuC,OAAO,CAAC7E,KAAK,CAAC,EAAE;AACzBE,IAAAA,aAAa,GAAG4E,WAAW,CAAC9E,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAI+E,iCAAa,CAAC/E,KAAK,CAAC,EAAE;AAChCE,IAAAA,aAAa,GAAG8E,WAAW,CAAChF,KAAK,CAAC,CAAA;GAClC,MAAM,IAAI+C,OAAO,CAAC1B,MAAM,CAACrB,KAAK,CAAC,CAAC,EAAE;AAClCE,IAAAA,aAAa,GAAGgE,iBAAiB,CAAC7C,MAAM,CAACrB,KAAK,CAAC,CAAC,CAAA;GAChD,MAAM,IAAIkD,aAAa,CAAC7B,MAAM,CAACrB,KAAK,CAAC,CAAC,EAAE;AACxCE,IAAAA,aAAa,GAAGiE,uBAAuB,CAAC9C,MAAM,CAACrB,KAAK,CAAC,CAAC,CAAA;AACvD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCE,IAAAA,aAAa,GAAGwD,0BAA0B,CAAC1D,KAAK,CAAC,CAAA;AAClD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCE,IAAAA,aAAa,GAAG,IAAIC,eAAI,CAACgB,UAAU,CAACnB,KAAK,CAAC,CAAA;AAC3C,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IACtCE,aAAa,GAAGF,KAAK,GAAGG,eAAI,CAAC8E,QAAQ,GAAG9E,eAAI,CAAC+E,SAAS,CAAA;AACvD,GAAC,MAAM;IACNhF,aAAa,GAAGC,eAAI,CAACgF,QAAQ,CAAA;AAC9B,GAAA;AACA,EAAA,OAAOjF,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAAS4E,WAAWA,CAACM,KAAK,EAAE;AAC3B;EACA,MAAMhD,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAMiD,IAAI,IAAID,KAAK,EAAE;AACzBhD,IAAAA,IAAI,CAACM,IAAI,CAACkC,uBAAuB,CAACS,IAAI,CAAC,CAAC,CAAA;AACzC,GAAA;AACA,EAAA,OAAO,IAAIlF,eAAI,CAACC,QAAQ,CAACgC,IAAI,CAAC,CAAA;AAC/B,CAAA;;AAEA;AACA;AACA;AACA,SAAS4C,WAAWA,CAACM,MAAM,EAAE;AAC5B;EACA,MAAMlD,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAM,CAACmD,QAAQ,EAAEvF,KAAK,GAAG,IAAI,CAAC,IAAIwF,MAAM,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;AAC9DlD,IAAAA,IAAI,CAACM,IAAI,CAAC,CACTkC,uBAAuB,CAACW,QAAQ,CAAC,EACjCX,uBAAuB,CAAC5E,KAAK,CAAC,CAC9B,CAAC,CAAA;AACH,GAAA;AACA;EACA,OAAO,IAAIG,eAAI,CAACG,OAAO,CAACoF,oBAAU,CAACtD,IAAI,CAAC,CAAC,CAAA;AAC1C;;AC7KA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASuD,MAAMA,CAACC,eAAe,EAAE;AAChC,EAAA,MAAM,CAACxD,IAAI,EAAEyD,OAAO,CAAC,GAAGD,eAAe,CAAA;AACvC,EAAA,MAAME,MAAM,GAAGD,OAAO,CAACE,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC9C,EAAA,MAAMC,WAAW,GAAGF,MAAM,CAAC9F,KAAK,CAAA;EAChC,IAAIE,aAAa,GAAG+F,IAAI,CAACC,SAAS,CAACnG,yBAAyB,CAACqC,IAAI,CAAC,CAAC,CAAA;AACnE,EAAA,IAAI4D,WAAW,EAAE;IAChB9F,aAAa,GAAI,CAAGA,CAAAA,EAAAA,aAAc,CAAE,CAAA,CAAA,CAAA;AACrC,GAAA;AACA,EAAA,OAAO,IAAIC,eAAI,CAACsB,UAAU,CAACvB,aAAa,CAAC,CAAA;AAC1C,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASiG,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,IAAIrG,aAAa,GAAG,EAAE,CAAA;EACtB,IAAI;IACHA,aAAa,GAAG+F,IAAI,CAAC5C,KAAK,CAACiD,MAAM,CAAC5E,IAAI,CAAC,CAAA;GACvC,CAAC,OAAOuC,KAAK,EAAE;AACf/D,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;EACA,OAAO0E,uBAAuB,CAAC1E,aAAa,CAAC,CAAA;AAC9C,CAAA;;AAEA;AACA,MAAMsG,GAAG,GAAG;AACX,EAAA,mCAAmC,EAAEb,MAAM;AAC3C,EAAA,sBAAsB,EAAEQ,MAAAA;AACzB;;;;"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export default setJsonValueToSassValue;
|
|
2
|
+
export type CalculationContainer = {
|
|
3
|
+
operator: sass.CalculationOperator | null;
|
|
4
|
+
left: sass.CalculationValue | null;
|
|
5
|
+
right: sass.CalculationValue | null;
|
|
6
|
+
};
|
|
2
7
|
export type JsonValue = import('../index').JsonValue;
|
|
3
8
|
export type JsonObject = import('../index').JsonObject;
|
|
4
9
|
export type JsonArray = import('../index').JsonArray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";;cA6Ee,KAAK,mBAAmB;UACxB,KAAK,gBAAgB;WACrB,KAAK,gBAAgB;;wBAvEvB,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAoHzC;;GAEG;AACH,gDAFW,SAAS,cAsBnB"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,mGAmC9B"}
|
package/esm/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import isPlainObject from 'is-plain-obj';
|
|
|
5
5
|
import parseColor from 'parse-color';
|
|
6
6
|
import parseUnit from 'parse-css-dimension';
|
|
7
7
|
import { OrderedMap } from 'immutable';
|
|
8
|
+
import { parse } from 'postcss-values-parser';
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
11
|
* @typedef {import('../index').JsonValue} JsonValue
|
|
@@ -16,6 +17,7 @@ import { OrderedMap } from 'immutable';
|
|
|
16
17
|
* @param {sass.Value|undefined} value
|
|
17
18
|
*/
|
|
18
19
|
function getJsonValueFromSassValue(value) {
|
|
20
|
+
var _resolvedValue;
|
|
19
21
|
let resolvedValue;
|
|
20
22
|
if (value instanceof sass.SassList) {
|
|
21
23
|
resolvedValue = listToArray(value);
|
|
@@ -40,10 +42,14 @@ function getJsonValueFromSassValue(value) {
|
|
|
40
42
|
resolvedValue = String(value.text);
|
|
41
43
|
} else if (value instanceof sass.SassBoolean) {
|
|
42
44
|
resolvedValue = Boolean(value.value);
|
|
43
|
-
} else {
|
|
45
|
+
} else if (typeof value === 'undefined') {
|
|
46
|
+
resolvedValue = null;
|
|
47
|
+
} else if (value.isTruthy) {
|
|
48
|
+
resolvedValue = value.toString();
|
|
49
|
+
} else if (value.realNull) {
|
|
44
50
|
resolvedValue = null;
|
|
45
51
|
}
|
|
46
|
-
return resolvedValue;
|
|
52
|
+
return (_resolvedValue = resolvedValue) !== null && _resolvedValue !== void 0 ? _resolvedValue : null;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
/**
|
|
@@ -74,7 +80,7 @@ function mapToObject(map) {
|
|
|
74
80
|
}).keys()) {
|
|
75
81
|
const resolvedValue = map.get(index);
|
|
76
82
|
if (typeof resolvedValue !== 'undefined') {
|
|
77
|
-
const key = String(resolvedValue.get(0));
|
|
83
|
+
const key = String(getJsonValueFromSassValue(resolvedValue.get(0)));
|
|
78
84
|
const value = getJsonValueFromSassValue(resolvedValue.get(1));
|
|
79
85
|
data[key] = value;
|
|
80
86
|
}
|
|
@@ -100,7 +106,27 @@ function isColor(value) {
|
|
|
100
106
|
/**
|
|
101
107
|
* @param {string} value
|
|
102
108
|
*/
|
|
103
|
-
function
|
|
109
|
+
function isCalculation(value) {
|
|
110
|
+
if (!value.includes('calc')) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const root = parse(value);
|
|
115
|
+
const node = root.first;
|
|
116
|
+
return (node === null || node === void 0 ? void 0 : node.type) === 'func' && node.name === 'calc';
|
|
117
|
+
} catch {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param {string} value
|
|
124
|
+
* @param {{forceNumber: boolean}=} options
|
|
125
|
+
*/
|
|
126
|
+
function parseValueToStringOrNumber(value, options) {
|
|
127
|
+
const {
|
|
128
|
+
forceNumber = false
|
|
129
|
+
} = options !== null && options !== void 0 ? options : {};
|
|
104
130
|
let resolvedValue;
|
|
105
131
|
try {
|
|
106
132
|
const {
|
|
@@ -112,6 +138,8 @@ function parseValueToStringOrNumber(value) {
|
|
|
112
138
|
resolvedValue = new sass.SassNumber(parsedValue, unit);
|
|
113
139
|
} else if (type === 'percentage') {
|
|
114
140
|
resolvedValue = new sass.SassNumber(parsedValue, '%');
|
|
141
|
+
} else if (forceNumber && !Number.isNaN(Number(value))) {
|
|
142
|
+
resolvedValue = new sass.SassNumber(Number(value));
|
|
115
143
|
} else {
|
|
116
144
|
resolvedValue = new sass.SassString(value);
|
|
117
145
|
}
|
|
@@ -134,6 +162,50 @@ function parseValueToColor(value) {
|
|
|
134
162
|
});
|
|
135
163
|
}
|
|
136
164
|
|
|
165
|
+
/**
|
|
166
|
+
* @typedef {object} CalculationContainer
|
|
167
|
+
* @property {?sass.CalculationOperator} operator
|
|
168
|
+
* @property {?sass.CalculationValue} left
|
|
169
|
+
* @property {?sass.CalculationValue} right
|
|
170
|
+
*/
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* @param {string} value
|
|
174
|
+
*/
|
|
175
|
+
function parseValueToCalculation(value) {
|
|
176
|
+
const root = parse(value);
|
|
177
|
+
const node = root.first;
|
|
178
|
+
let calc = /** @type {CalculationContainer} */{
|
|
179
|
+
operator: null,
|
|
180
|
+
left: null,
|
|
181
|
+
right: null
|
|
182
|
+
};
|
|
183
|
+
if ((node === null || node === void 0 ? void 0 : node.type) === 'func' && node.name === 'calc') {
|
|
184
|
+
if (node.nodes.length > 3) {
|
|
185
|
+
return parseValueToStringOrNumber(value);
|
|
186
|
+
}
|
|
187
|
+
node.nodes.forEach((node, index) => {
|
|
188
|
+
if (node.type === 'operator') {
|
|
189
|
+
calc.operator = /** @type {sass.CalculationOperator} */
|
|
190
|
+
node.value;
|
|
191
|
+
} else if (index === 0) {
|
|
192
|
+
calc.left = parseValueToStringOrNumber(node.toString());
|
|
193
|
+
} else {
|
|
194
|
+
calc.right = parseValueToStringOrNumber(node.toString(), {
|
|
195
|
+
forceNumber: true
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
return sass.SassCalculation.calc(new sass.CalculationOperation(
|
|
202
|
+
// @ts-ignore
|
|
203
|
+
calc.operator, calc.left, calc.right));
|
|
204
|
+
} catch {
|
|
205
|
+
return parseValueToStringOrNumber(value);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
137
209
|
/**
|
|
138
210
|
* @param {JsonValue} value
|
|
139
211
|
*/
|
|
@@ -145,6 +217,8 @@ function setJsonValueToSassValue(value) {
|
|
|
145
217
|
resolvedValue = objectToMap(value);
|
|
146
218
|
} else if (isColor(String(value))) {
|
|
147
219
|
resolvedValue = parseValueToColor(String(value));
|
|
220
|
+
} else if (isCalculation(String(value))) {
|
|
221
|
+
resolvedValue = parseValueToCalculation(String(value));
|
|
148
222
|
} else if (typeof value === 'string') {
|
|
149
223
|
resolvedValue = parseValueToStringOrNumber(value);
|
|
150
224
|
} else if (typeof value === 'number') {
|
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 * as 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 * as 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 * as 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
|
+
{"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import * as 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 if (typeof value === 'undefined') {\n\t\tresolvedValue = null;\n\t} else if (value.isTruthy) {\n\t\tresolvedValue = value.toString();\n\t} else if (value.realNull) {\n\t\tresolvedValue = null;\n\t}\n\treturn resolvedValue ?? null;\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(getJsonValueFromSassValue(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 * as sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\nimport { OrderedMap } from 'immutable';\nimport { parse } from 'postcss-values-parser';\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 isCalculation(value) {\n\tif (!value.includes('calc')) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst root = parse(value);\n\t\tconst node = root.first;\n\t\treturn node?.type === 'func' && node.name === 'calc';\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * @param {string} value\n * @param {{forceNumber: boolean}=} options\n */\nfunction parseValueToStringOrNumber(value, options) {\n\tconst { forceNumber = false } = options ?? {};\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 if (forceNumber && !Number.isNaN(Number(value))) {\n\t\t\tresolvedValue = new sass.SassNumber(Number(value));\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 * @typedef {object} CalculationContainer\n * @property {?sass.CalculationOperator} operator\n * @property {?sass.CalculationValue} left\n * @property {?sass.CalculationValue} right\n */\n\n/**\n * @param {string} value\n */\nfunction parseValueToCalculation(value) {\n\tconst root = parse(value);\n\tconst node = root.first;\n\n\tlet calc = /** @type {CalculationContainer} */ ({\n\t\toperator: null,\n\t\tleft: null,\n\t\tright: null\n\t});\n\tif (node?.type === 'func' && node.name === 'calc') {\n\t\tif (node.nodes.length > 3) {\n\t\t\treturn parseValueToStringOrNumber(value);\n\t\t}\n\t\tnode.nodes.forEach((node, index) => {\n\t\t\tif (node.type === 'operator') {\n\t\t\t\tcalc.operator = /** @type {sass.CalculationOperator} */ (\n\t\t\t\t\tnode.value\n\t\t\t\t);\n\t\t\t} else if (index === 0) {\n\t\t\t\tcalc.left = parseValueToStringOrNumber(node.toString());\n\t\t\t} else {\n\t\t\t\tcalc.right = parseValueToStringOrNumber(node.toString(), {\n\t\t\t\t\tforceNumber: true\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\ttry {\n\t\treturn sass.SassCalculation.calc(\n\t\t\tnew sass.CalculationOperation(\n\t\t\t\t// @ts-ignore\n\t\t\t\tcalc.operator,\n\t\t\t\tcalc.left,\n\t\t\t\tcalc.right\n\t\t\t)\n\t\t);\n\t} catch {\n\t\treturn parseValueToStringOrNumber(value);\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 (isCalculation(String(value))) {\n\t\tresolvedValue = parseValueToCalculation(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 * as 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","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","isTruthy","toString","realNull","list","length","asList","size","data","index","Array","from","keys","get","push","map","contents","key","unitTypes","isColor","parseColor","rgba","isCalculation","includes","root","parse","node","first","type","name","parseValueToStringOrNumber","options","forceNumber","parsedValue","unit","parseUnit","isNaN","error","parseValueToColor","parseValueToCalculation","calc","operator","left","right","nodes","forEach","SassCalculation","CalculationOperation","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","api"],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
export default setJsonValueToSassValue;
|
|
2
|
+
export type CalculationContainer = {
|
|
3
|
+
operator: sass.CalculationOperator | null;
|
|
4
|
+
left: sass.CalculationValue | null;
|
|
5
|
+
right: sass.CalculationValue | null;
|
|
6
|
+
};
|
|
2
7
|
export type JsonValue = import('../index').JsonValue;
|
|
3
8
|
export type JsonObject = import('../index').JsonObject;
|
|
4
9
|
export type JsonArray = import('../index').JsonArray;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"json-to-sass.d.ts","sourceRoot":"","sources":["../../lib/json-to-sass.js"],"names":[],"mappings":";;cA6Ee,KAAK,mBAAmB;UACxB,KAAK,gBAAgB;WACrB,KAAK,gBAAgB;;wBAvEvB,OAAO,UAAU,EAAE,SAAS;yBAC5B,OAAO,UAAU,EAAE,UAAU;wBAC7B,OAAO,UAAU,EAAE,SAAS;AAoHzC;;GAEG;AACH,gDAFW,SAAS,cAsBnB"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,mGAmC9B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-sass-json-functions",
|
|
3
|
-
"version": "4.0
|
|
3
|
+
"version": "4.1.0",
|
|
4
4
|
"description": "JSON encode and decode functions for node-sass.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ivan Nikolić <niksy5@gmail.com> (http://ivannikolic.com)",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"prerelease": "npm run lint && npm run lint:types && npm run build && npm run module-check",
|
|
36
36
|
"release": "np --no-release-draft",
|
|
37
37
|
"test": "BABEL_ENV=test nyc mocha --require @babel/register --require esm 'test/**/*.js' && nyc check-coverage",
|
|
38
|
-
"test:watch": "nodemon --exec npm test",
|
|
38
|
+
"test:watch": "nodemon -e js,scss --exec npm test",
|
|
39
39
|
"version": "if [ $(git rev-parse --abbrev-ref HEAD) == 'master' ]; then sed -i '' '/\\[unreleased\\]:/d' CHANGELOG.md && version-changelog CHANGELOG.md && changelog-verify CHANGELOG.md && git add CHANGELOG.md; else echo; fi"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"is-plain-obj": "^3.0.0",
|
|
44
44
|
"parse-color": "^1.0.0",
|
|
45
45
|
"parse-css-dimension": "^1.1.0",
|
|
46
|
+
"postcss-values-parser": "^6.0.2",
|
|
46
47
|
"rgb-hex": "^3.0.0",
|
|
47
48
|
"round-to": "^5.0.0",
|
|
48
49
|
"shorten-css-hex": "^1.1.0"
|
|
@@ -76,13 +77,13 @@
|
|
|
76
77
|
"nyc": "^15.1.0",
|
|
77
78
|
"prettier": "^2.4.0",
|
|
78
79
|
"rollup": "^2.32.1",
|
|
79
|
-
"sass": "^1.
|
|
80
|
+
"sass": "^1.67.0",
|
|
80
81
|
"sass-true": "^6.0.1",
|
|
81
82
|
"typescript": "^4.3.5",
|
|
82
83
|
"version-changelog": "^3.1.1"
|
|
83
84
|
},
|
|
84
85
|
"peerDependencies": {
|
|
85
|
-
"sass": ">=1.
|
|
86
|
+
"sass": ">=1.64"
|
|
86
87
|
},
|
|
87
88
|
"engines": {
|
|
88
89
|
"node": ">=12.22"
|