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.
- package/CHANGELOG.md +18 -2
- package/README.md +30 -35
- package/cjs/index.d.ts +13 -9
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +146 -145
- package/cjs/index.js.map +1 -1
- package/cjs/lib/json-to-sass.d.ts +1 -1
- package/cjs/lib/json-to-sass.d.ts.map +1 -1
- package/cjs/lib/sass-to-json.d.ts +2 -13
- package/cjs/lib/sass-to-json.d.ts.map +1 -1
- package/esm/index.d.ts +13 -9
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +146 -144
- package/esm/index.js.map +1 -1
- package/esm/lib/json-to-sass.d.ts +1 -1
- package/esm/lib/json-to-sass.d.ts.map +1 -1
- package/esm/lib/sass-to-json.d.ts +2 -13
- package/esm/lib/sass-to-json.d.ts.map +1 -1
- package/package.json +20 -17
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased][]
|
|
4
4
|
|
|
5
|
+
## [4.0.0][] - 2023-05-01
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Use [new Sass API](https://sass-lang.com/documentation/js-api)
|
|
10
|
+
|
|
11
|
+
### Removed
|
|
12
|
+
|
|
13
|
+
- **Node 10 support, lowest version is 12.22**
|
|
14
|
+
- **Legacy Sass support, lowest version is 1.45**
|
|
15
|
+
- Precision option; Dart Sass defaults to a sufficiently high precision for
|
|
16
|
+
all existing browsers
|
|
17
|
+
|
|
5
18
|
## [3.3.0][] - 2022-01-11
|
|
6
19
|
|
|
7
20
|
### Added
|
|
@@ -41,6 +54,9 @@
|
|
|
41
54
|
|
|
42
55
|
<!-- prettier-ignore-end -->
|
|
43
56
|
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
https://github.com/niksy/node-sass-json-functions/compare/v3.3.0...HEAD
|
|
58
|
+
|
|
46
59
|
[3.3.0]: https://github.com/niksy/node-sass-json-functions/tree/v3.3.0
|
|
60
|
+
[Unreleased]:
|
|
61
|
+
https://github.com/niksy/node-sass-json-functions/compare/v4.0.0...HEAD
|
|
62
|
+
[4.0.0]: https://github.com/niksy/node-sass-json-functions/tree/v4.0.0
|
package/README.md
CHANGED
|
@@ -16,15 +16,12 @@ npm install sass node-sass-json-functions --save
|
|
|
16
16
|
import sass from 'sass';
|
|
17
17
|
import jsonFns from 'node-sass-json-functions';
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
{
|
|
21
|
-
file: './index.scss',
|
|
19
|
+
(async () => {
|
|
20
|
+
const result = await sass.compileAsync('./index.scss', {
|
|
22
21
|
functions: { ...jsonFns }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
);
|
|
22
|
+
});
|
|
23
|
+
// ...
|
|
24
|
+
})();
|
|
28
25
|
```
|
|
29
26
|
|
|
30
27
|
Module exports object with prepared functions `json-encode` and `json-decode`.
|
|
@@ -101,9 +98,9 @@ DEBUG: (foo: 1, bar: 2, 3, baz: 3 3 3, bad: (foo: 11, bar: 22, baz: 5, 4, 6, nul
|
|
|
101
98
|
|
|
102
99
|
## API
|
|
103
100
|
|
|
104
|
-
### json-encode(data[, quotes
|
|
101
|
+
### json-encode(data[, quotes])
|
|
105
102
|
|
|
106
|
-
Returns: `sass.
|
|
103
|
+
Returns: `sass.SassString`
|
|
107
104
|
|
|
108
105
|
Encodes (`JSON.stringify`) data and returns [Sass string][sass-string]. By
|
|
109
106
|
default, string is quoted with single quotes so that it can be easily used in
|
|
@@ -115,34 +112,27 @@ standard CSS values.
|
|
|
115
112
|
alpha value, otherwise they are transformed to hex value (and it’s shorther
|
|
116
113
|
version if possible)
|
|
117
114
|
- [Sass strings][sass-string] are transformed to strings
|
|
118
|
-
- Sass numbers are transformed to numbers
|
|
119
|
-
- Sass
|
|
115
|
+
- [Sass numbers][sass-number] are transformed to numbers
|
|
116
|
+
- [Sass booleans][sass-boolean] are transformed to booleans
|
|
117
|
+
- [Sass null][sass-null] values and anything unresolved is transformed to null
|
|
118
|
+
values
|
|
120
119
|
|
|
121
120
|
#### data
|
|
122
121
|
|
|
123
|
-
Type:
|
|
124
|
-
`sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map`
|
|
122
|
+
Type: `sass.Value`
|
|
125
123
|
|
|
126
124
|
Data to encode (stringify).
|
|
127
125
|
|
|
128
126
|
#### quotes
|
|
129
127
|
|
|
130
|
-
Type: `sass.
|
|
131
|
-
Default: `
|
|
128
|
+
Type: `sass.SassBoolean`
|
|
129
|
+
Default: `sass.sassTrue`
|
|
132
130
|
|
|
133
131
|
Should output string be quoted with single quotes.
|
|
134
132
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
Type: `sass.types.Number`
|
|
138
|
-
Default: `5`
|
|
139
|
-
|
|
140
|
-
Number of digits after the decimal.
|
|
133
|
+
### json-decode(string)
|
|
141
134
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Returns:
|
|
145
|
-
`sass.types.Null|sass.types.Number|sass.types.String|sass.types.Boolean|sass.types.Color|sass.types.List|sass.types.Map`
|
|
135
|
+
Returns: `sass.Value`
|
|
146
136
|
|
|
147
137
|
Decodes (`JSON.parse`) string and returns one of [available Sass
|
|
148
138
|
types][sass-types].
|
|
@@ -154,12 +144,14 @@ types][sass-types].
|
|
|
154
144
|
- Strings are transformed to Sass numbers with units if they can be properly
|
|
155
145
|
parsed with [parse-css-dimension][parse-css-dimension], otherwise they are
|
|
156
146
|
transformed to [Sass strings][sass-string]
|
|
157
|
-
- Numbers are transformed to Sass numbers
|
|
158
|
-
-
|
|
147
|
+
- Numbers are transformed to [Sass numbers][sass-number]
|
|
148
|
+
- Booleans are transformed to [Sass booleans][sass-boolean]
|
|
149
|
+
- Null values and anything unresolved is transformed to [Sass null][sass-null]
|
|
150
|
+
values
|
|
159
151
|
|
|
160
|
-
####
|
|
152
|
+
#### string
|
|
161
153
|
|
|
162
|
-
Type: `sass.
|
|
154
|
+
Type: `sass.SassString`
|
|
163
155
|
|
|
164
156
|
String to decode (parse).
|
|
165
157
|
|
|
@@ -172,11 +164,14 @@ MIT © [Ivan Nikolić](http://ivannikolic.com)
|
|
|
172
164
|
[ci]: https://github.com/niksy/node-sass-json-functions/actions?query=workflow%3ACI
|
|
173
165
|
[ci-img]: https://github.com/niksy/node-sass-json-functions/workflows/CI/badge.svg?branch=master
|
|
174
166
|
[sass]: https://github.com/sass/dart-sass
|
|
175
|
-
[sass-types]: https://
|
|
176
|
-
[sass-list]:
|
|
177
|
-
[sass-map]:
|
|
178
|
-
[sass-color]:
|
|
179
|
-
[sass-
|
|
167
|
+
[sass-types]: https://sass-lang.com/documentation/js-api/classes/Value
|
|
168
|
+
[sass-list]: https://sass-lang.com/documentation/values/lists
|
|
169
|
+
[sass-map]: https://sass-lang.com/documentation/values/maps
|
|
170
|
+
[sass-color]: https://sass-lang.com/documentation/values/colors
|
|
171
|
+
[sass-number]: https://sass-lang.com/documentation/values/numbers
|
|
172
|
+
[sass-string]: https://sass-lang.com/documentation/values/strings
|
|
173
|
+
[sass-null]: https://sass-lang.com/documentation/values/null
|
|
174
|
+
[sass-boolean]: https://sass-lang.com/documentation/values/booleans
|
|
180
175
|
[parse-color]: https://github.com/substack/parse-color
|
|
181
176
|
[parse-css-dimension]: https://github.com/jedmao/parse-css-dimension
|
|
182
177
|
|
package/cjs/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($
|
|
8
|
+
/** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
|
|
9
9
|
declare const api: {
|
|
10
|
-
'json-encode($
|
|
11
|
-
'json-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
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
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(
|
|
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
|
-
*
|
|
32
|
+
* First argument: `sass.SassString` - String to decode (parse).
|
|
33
|
+
*
|
|
34
|
+
* @param {sass.Value[]} decodeArguments
|
|
31
35
|
*/
|
|
32
|
-
declare function decode(
|
|
36
|
+
declare function decode(decodeArguments: sass.Value[]): sass.Value;
|
|
33
37
|
import sass from "sass";
|
|
34
38
|
//# sourceMappingURL=index.d.ts.map
|
package/cjs/index.d.ts.map
CHANGED
|
@@ -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;;;;
|
|
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/cjs/index.js
CHANGED
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var sass = require('sass');
|
|
4
|
-
var round = require('round-to');
|
|
5
4
|
var rgbHex = require('rgb-hex');
|
|
6
5
|
var shortHexColor = require('shorten-css-hex');
|
|
7
6
|
var isPlainObject = require('is-plain-obj');
|
|
8
7
|
var parseColor = require('parse-color');
|
|
9
8
|
var parseUnit = require('parse-css-dimension');
|
|
9
|
+
var immutable = require('immutable');
|
|
10
10
|
|
|
11
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
12
|
|
|
13
13
|
var sass__default = /*#__PURE__*/_interopDefaultLegacy(sass);
|
|
14
|
-
var round__default = /*#__PURE__*/_interopDefaultLegacy(round);
|
|
15
14
|
var rgbHex__default = /*#__PURE__*/_interopDefaultLegacy(rgbHex);
|
|
16
15
|
var shortHexColor__default = /*#__PURE__*/_interopDefaultLegacy(shortHexColor);
|
|
17
16
|
var isPlainObject__default = /*#__PURE__*/_interopDefaultLegacy(isPlainObject);
|
|
18
17
|
var parseColor__default = /*#__PURE__*/_interopDefaultLegacy(parseColor);
|
|
19
18
|
var parseUnit__default = /*#__PURE__*/_interopDefaultLegacy(parseUnit);
|
|
20
19
|
|
|
21
|
-
/**
|
|
22
|
-
* @typedef {object} Options
|
|
23
|
-
* @property {number} precision Number of digits after the decimal.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
20
|
/**
|
|
27
21
|
* @typedef {import('../index').JsonValue} JsonValue
|
|
28
22
|
* @typedef {import('../index').JsonObject} JsonObject
|
|
@@ -30,77 +24,73 @@ var parseUnit__default = /*#__PURE__*/_interopDefaultLegacy(parseUnit);
|
|
|
30
24
|
*/
|
|
31
25
|
|
|
32
26
|
/**
|
|
33
|
-
* @param {sass.
|
|
34
|
-
* @param {Options} options
|
|
27
|
+
* @param {sass.Value|undefined} value
|
|
35
28
|
*/
|
|
36
|
-
function getJsonValueFromSassValue(value
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
resolvedValue = null;
|
|
66
|
-
}
|
|
67
|
-
} catch (error) {
|
|
68
|
-
resolvedValue = null;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return resolvedValue;
|
|
29
|
+
function getJsonValueFromSassValue(value) {
|
|
30
|
+
let resolvedValue;
|
|
31
|
+
if (value instanceof sass__default["default"].SassList) {
|
|
32
|
+
resolvedValue = listToArray(value);
|
|
33
|
+
} else if (value instanceof sass__default["default"].SassMap) {
|
|
34
|
+
resolvedValue = mapToObject(value);
|
|
35
|
+
} else if (value instanceof sass__default["default"].SassColor) {
|
|
36
|
+
/** @type {[number, number, number]} */
|
|
37
|
+
const rgbValue = [value.red, value.green, value.blue];
|
|
38
|
+
const alphaValue = value.alpha;
|
|
39
|
+
if (alphaValue === 1) {
|
|
40
|
+
resolvedValue = shortHexColor__default["default"](`#${rgbHex__default["default"].apply(null, rgbValue)}`);
|
|
41
|
+
} else {
|
|
42
|
+
resolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;
|
|
43
|
+
}
|
|
44
|
+
} else if (value instanceof sass__default["default"].SassNumber) {
|
|
45
|
+
if (value.hasUnits) {
|
|
46
|
+
resolvedValue = String(value.value) + value.numeratorUnits.last();
|
|
47
|
+
} else {
|
|
48
|
+
resolvedValue = Number(value.value);
|
|
49
|
+
}
|
|
50
|
+
} else if (value instanceof sass__default["default"].SassString) {
|
|
51
|
+
resolvedValue = String(value.text);
|
|
52
|
+
} else if (value instanceof sass__default["default"].SassBoolean) {
|
|
53
|
+
resolvedValue = Boolean(value.value);
|
|
54
|
+
} else {
|
|
55
|
+
resolvedValue = null;
|
|
56
|
+
}
|
|
57
|
+
return resolvedValue;
|
|
72
58
|
}
|
|
73
59
|
|
|
74
60
|
/**
|
|
75
|
-
* @param {sass.
|
|
76
|
-
* @param {Options} options
|
|
61
|
+
* @param {sass.SassList} list
|
|
77
62
|
*/
|
|
78
|
-
function listToArray(list
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
63
|
+
function listToArray(list) {
|
|
64
|
+
const length = list.asList.size;
|
|
65
|
+
/** @type {JsonArray} */
|
|
66
|
+
const data = [];
|
|
67
|
+
for (const index of Array.from({
|
|
68
|
+
length
|
|
69
|
+
}).keys()) {
|
|
70
|
+
const value = getJsonValueFromSassValue(list.get(index));
|
|
71
|
+
data.push(value);
|
|
72
|
+
}
|
|
73
|
+
return data;
|
|
87
74
|
}
|
|
88
75
|
|
|
89
76
|
/**
|
|
90
|
-
* @param {sass.
|
|
91
|
-
* @param {Options} options
|
|
77
|
+
* @param {sass.SassMap} map
|
|
92
78
|
*/
|
|
93
|
-
function mapToObject(map
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
79
|
+
function mapToObject(map) {
|
|
80
|
+
const length = map.contents.size;
|
|
81
|
+
/** @type {JsonObject} */
|
|
82
|
+
const data = {};
|
|
83
|
+
for (const index of Array.from({
|
|
84
|
+
length
|
|
85
|
+
}).keys()) {
|
|
86
|
+
const resolvedValue = map.get(index);
|
|
87
|
+
if (typeof resolvedValue !== 'undefined') {
|
|
88
|
+
const key = String(resolvedValue.get(0));
|
|
89
|
+
const value = getJsonValueFromSassValue(resolvedValue.get(1));
|
|
90
|
+
data[key] = value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return data;
|
|
104
94
|
}
|
|
105
95
|
|
|
106
96
|
/**
|
|
@@ -115,87 +105,92 @@ const unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];
|
|
|
115
105
|
* @param {string} value
|
|
116
106
|
*/
|
|
117
107
|
function isColor(value) {
|
|
118
|
-
|
|
108
|
+
return typeof parseColor__default["default"](value).rgba !== 'undefined';
|
|
119
109
|
}
|
|
120
110
|
|
|
121
111
|
/**
|
|
122
112
|
* @param {string} value
|
|
123
113
|
*/
|
|
124
114
|
function parseValueToStringOrNumber(value) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
115
|
+
let resolvedValue;
|
|
116
|
+
try {
|
|
117
|
+
const {
|
|
118
|
+
value: parsedValue,
|
|
119
|
+
unit,
|
|
120
|
+
type
|
|
121
|
+
} = parseUnit__default["default"](value);
|
|
122
|
+
if (unitTypes.includes(type)) {
|
|
123
|
+
resolvedValue = new sass__default["default"].SassNumber(parsedValue, unit);
|
|
124
|
+
} else if (type === 'percentage') {
|
|
125
|
+
resolvedValue = new sass__default["default"].SassNumber(parsedValue, '%');
|
|
126
|
+
} else {
|
|
127
|
+
resolvedValue = new sass__default["default"].SassString(value);
|
|
128
|
+
}
|
|
129
|
+
} catch (error) {
|
|
130
|
+
resolvedValue = new sass__default["default"].SassString(value);
|
|
131
|
+
}
|
|
132
|
+
return resolvedValue;
|
|
139
133
|
}
|
|
140
134
|
|
|
141
135
|
/**
|
|
142
136
|
* @param {string} value
|
|
143
137
|
*/
|
|
144
138
|
function parseValueToColor(value) {
|
|
145
|
-
|
|
146
|
-
|
|
139
|
+
const [red, green, blue, alpha] = parseColor__default["default"](value).rgba;
|
|
140
|
+
return new sass__default["default"].SassColor({
|
|
141
|
+
red,
|
|
142
|
+
green,
|
|
143
|
+
blue,
|
|
144
|
+
alpha
|
|
145
|
+
});
|
|
147
146
|
}
|
|
148
147
|
|
|
149
148
|
/**
|
|
150
149
|
* @param {JsonValue} value
|
|
151
150
|
*/
|
|
152
151
|
function setJsonValueToSassValue(value) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
}
|
|
171
|
-
return resolvedValue;
|
|
152
|
+
let resolvedValue;
|
|
153
|
+
if (Array.isArray(value)) {
|
|
154
|
+
resolvedValue = arrayToList(value);
|
|
155
|
+
} else if (isPlainObject__default["default"](value)) {
|
|
156
|
+
resolvedValue = objectToMap(value);
|
|
157
|
+
} else if (isColor(String(value))) {
|
|
158
|
+
resolvedValue = parseValueToColor(String(value));
|
|
159
|
+
} else if (typeof value === 'string') {
|
|
160
|
+
resolvedValue = parseValueToStringOrNumber(value);
|
|
161
|
+
} else if (typeof value === 'number') {
|
|
162
|
+
resolvedValue = new sass__default["default"].SassNumber(value);
|
|
163
|
+
} else if (typeof value === 'boolean') {
|
|
164
|
+
resolvedValue = value ? sass__default["default"].sassTrue : sass__default["default"].sassFalse;
|
|
165
|
+
} else {
|
|
166
|
+
resolvedValue = sass__default["default"].sassNull;
|
|
167
|
+
}
|
|
168
|
+
return resolvedValue;
|
|
172
169
|
}
|
|
173
170
|
|
|
174
171
|
/**
|
|
175
172
|
* @param {JsonArray} array
|
|
176
173
|
*/
|
|
177
174
|
function arrayToList(array) {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
175
|
+
/** @type {sass.Value[]} */
|
|
176
|
+
const data = [];
|
|
177
|
+
for (const item of array) {
|
|
178
|
+
data.push(setJsonValueToSassValue(item));
|
|
179
|
+
}
|
|
180
|
+
return new sass__default["default"].SassList(data);
|
|
184
181
|
}
|
|
185
182
|
|
|
186
183
|
/**
|
|
187
184
|
* @param {JsonObject} object
|
|
188
185
|
*/
|
|
189
186
|
function objectToMap(object) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
-
return data;
|
|
187
|
+
/** @type {[sass.Value, sass.Value][]} */
|
|
188
|
+
const data = [];
|
|
189
|
+
for (const [property, value = null] of Object.entries(object)) {
|
|
190
|
+
data.push([setJsonValueToSassValue(property), setJsonValueToSassValue(value)]);
|
|
191
|
+
}
|
|
192
|
+
// eslint-disable-next-line new-cap
|
|
193
|
+
return new sass__default["default"].SassMap(immutable.OrderedMap(data));
|
|
199
194
|
}
|
|
200
195
|
|
|
201
196
|
/**
|
|
@@ -208,41 +203,47 @@ function objectToMap(object) {
|
|
|
208
203
|
/**
|
|
209
204
|
* 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.
|
|
210
205
|
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
206
|
+
* First argument: `sass.Value` - Data to encode (stringify).
|
|
207
|
+
*
|
|
208
|
+
* Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.
|
|
209
|
+
*
|
|
210
|
+
* @param {sass.Value[]} encodeArguments
|
|
214
211
|
*/
|
|
215
|
-
function encode(
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
212
|
+
function encode(encodeArguments) {
|
|
213
|
+
const [data, quotes_] = encodeArguments;
|
|
214
|
+
const quotes = quotes_.assertBoolean('quotes');
|
|
215
|
+
const shouldQuote = quotes.value;
|
|
216
|
+
let resolvedValue = JSON.stringify(getJsonValueFromSassValue(data));
|
|
217
|
+
if (shouldQuote) {
|
|
218
|
+
resolvedValue = `'${resolvedValue}'`;
|
|
219
|
+
}
|
|
220
|
+
return new sass__default["default"].SassString(resolvedValue);
|
|
224
221
|
}
|
|
225
222
|
|
|
226
223
|
/**
|
|
227
224
|
* Decodes (`JSON.parse`) string and returns one of available Sass types.
|
|
228
225
|
*
|
|
229
|
-
*
|
|
226
|
+
* First argument: `sass.SassString` - String to decode (parse).
|
|
227
|
+
*
|
|
228
|
+
* @param {sass.Value[]} decodeArguments
|
|
230
229
|
*/
|
|
231
|
-
function decode(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
230
|
+
function decode(decodeArguments) {
|
|
231
|
+
const [string_] = decodeArguments;
|
|
232
|
+
const string = string_.assertString('string');
|
|
233
|
+
/** @type {JsonValue?} */
|
|
234
|
+
let resolvedValue = {};
|
|
235
|
+
try {
|
|
236
|
+
resolvedValue = JSON.parse(string.text);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
resolvedValue = null;
|
|
239
|
+
}
|
|
240
|
+
return setJsonValueToSassValue(resolvedValue);
|
|
240
241
|
}
|
|
241
242
|
|
|
242
|
-
/** @type {{ 'json-encode($
|
|
243
|
+
/** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */
|
|
243
244
|
const api = {
|
|
244
|
-
|
|
245
|
-
|
|
245
|
+
'json-encode($data, $quotes: true)': encode,
|
|
246
|
+
'json-decode($string)': decode
|
|
246
247
|
};
|
|
247
248
|
|
|
248
249
|
module.exports = api;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport round from 'round-to';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {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":["sass","shortHexColor","rgbHex","round","parseColor","parseUnit","isPlainObject"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../lib/sass-to-json.js","../lib/json-to-sass.js","../index.js"],"sourcesContent":["import sass from 'sass';\nimport rgbHex from 'rgb-hex';\nimport shortHexColor from 'shorten-css-hex';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\n/**\n * @param {sass.Value|undefined} value\n */\nfunction getJsonValueFromSassValue(value) {\n\tlet resolvedValue;\n\tif (value instanceof sass.SassList) {\n\t\tresolvedValue = listToArray(value);\n\t} else if (value instanceof sass.SassMap) {\n\t\tresolvedValue = mapToObject(value);\n\t} else if (value instanceof sass.SassColor) {\n\t\t/** @type {[number, number, number]} */\n\t\tconst rgbValue = [value.red, value.green, value.blue];\n\t\tconst alphaValue = value.alpha;\n\t\tif (alphaValue === 1) {\n\t\t\tresolvedValue = shortHexColor(`#${rgbHex.apply(null, rgbValue)}`);\n\t\t} else {\n\t\t\tresolvedValue = `rgba(${rgbValue.join(',')},${alphaValue})`;\n\t\t}\n\t} else if (value instanceof sass.SassNumber) {\n\t\tif (value.hasUnits) {\n\t\t\tresolvedValue = String(value.value) + value.numeratorUnits.last();\n\t\t} else {\n\t\t\tresolvedValue = Number(value.value);\n\t\t}\n\t} else if (value instanceof sass.SassString) {\n\t\tresolvedValue = String(value.text);\n\t} else if (value instanceof sass.SassBoolean) {\n\t\tresolvedValue = Boolean(value.value);\n\t} else {\n\t\tresolvedValue = null;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {sass.SassList} list\n */\nfunction listToArray(list) {\n\tconst length = list.asList.size;\n\t/** @type {JsonArray} */\n\tconst data = [];\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst value = getJsonValueFromSassValue(list.get(index));\n\t\tdata.push(value);\n\t}\n\treturn data;\n}\n\n/**\n * @param {sass.SassMap} map\n */\nfunction mapToObject(map) {\n\tconst length = map.contents.size;\n\t/** @type {JsonObject} */\n\tconst data = {};\n\tfor (const index of Array.from({ length }).keys()) {\n\t\tconst resolvedValue = map.get(index);\n\t\tif (typeof resolvedValue !== 'undefined') {\n\t\t\tconst key = String(resolvedValue.get(0));\n\t\t\tconst value = getJsonValueFromSassValue(resolvedValue.get(1));\n\t\t\tdata[key] = value;\n\t\t}\n\t}\n\treturn data;\n}\n\nexport default getJsonValueFromSassValue;\n","import sass from 'sass';\nimport isPlainObject from 'is-plain-obj';\nimport parseColor from 'parse-color';\nimport parseUnit from 'parse-css-dimension';\nimport { OrderedMap } from 'immutable';\n\n/**\n * @typedef {import('../index').JsonValue} JsonValue\n * @typedef {import('../index').JsonObject} JsonObject\n * @typedef {import('../index').JsonArray} JsonArray\n */\n\nconst unitTypes = ['length', 'angle', 'resolution', 'frequency', 'time'];\n\n/**\n * @param {string} value\n */\nfunction isColor(value) {\n\treturn typeof parseColor(value).rgba !== 'undefined';\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToStringOrNumber(value) {\n\tlet resolvedValue;\n\ttry {\n\t\tconst { value: parsedValue, unit, type } = parseUnit(value);\n\t\tif (unitTypes.includes(type)) {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, unit);\n\t\t} else if (type === 'percentage') {\n\t\t\tresolvedValue = new sass.SassNumber(parsedValue, '%');\n\t\t} else {\n\t\t\tresolvedValue = new sass.SassString(value);\n\t\t}\n\t} catch (error) {\n\t\tresolvedValue = new sass.SassString(value);\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {string} value\n */\nfunction parseValueToColor(value) {\n\tconst [red, green, blue, alpha] = parseColor(value).rgba;\n\treturn new sass.SassColor({\n\t\tred,\n\t\tgreen,\n\t\tblue,\n\t\talpha\n\t});\n}\n\n/**\n * @param {JsonValue} value\n */\nfunction setJsonValueToSassValue(value) {\n\tlet resolvedValue;\n\tif (Array.isArray(value)) {\n\t\tresolvedValue = arrayToList(value);\n\t} else if (isPlainObject(value)) {\n\t\tresolvedValue = objectToMap(value);\n\t} else if (isColor(String(value))) {\n\t\tresolvedValue = parseValueToColor(String(value));\n\t} else if (typeof value === 'string') {\n\t\tresolvedValue = parseValueToStringOrNumber(value);\n\t} else if (typeof value === 'number') {\n\t\tresolvedValue = new sass.SassNumber(value);\n\t} else if (typeof value === 'boolean') {\n\t\tresolvedValue = value ? sass.sassTrue : sass.sassFalse;\n\t} else {\n\t\tresolvedValue = sass.sassNull;\n\t}\n\treturn resolvedValue;\n}\n\n/**\n * @param {JsonArray} array\n */\nfunction arrayToList(array) {\n\t/** @type {sass.Value[]} */\n\tconst data = [];\n\tfor (const item of array) {\n\t\tdata.push(setJsonValueToSassValue(item));\n\t}\n\treturn new sass.SassList(data);\n}\n\n/**\n * @param {JsonObject} object\n */\nfunction objectToMap(object) {\n\t/** @type {[sass.Value, sass.Value][]} */\n\tconst data = [];\n\tfor (const [property, value = null] of Object.entries(object)) {\n\t\tdata.push([\n\t\t\tsetJsonValueToSassValue(property),\n\t\t\tsetJsonValueToSassValue(value)\n\t\t]);\n\t}\n\t// eslint-disable-next-line new-cap\n\treturn new sass.SassMap(OrderedMap(data));\n}\n\nexport default setJsonValueToSassValue;\n","import sass from 'sass';\nimport getJsonValueFromSassValue from './lib/sass-to-json.js';\nimport setJsonValueToSassValue from './lib/json-to-sass.js';\n\n/**\n * @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue\n * @typedef {JsonValue[]} JsonArray\n * @typedef {string | number | boolean | null} JsonPrimitive\n * @typedef {{[Key in string]?: JsonValue}} JsonObject\n */\n\n/**\n * Encodes (`JSON.stringify`) data and returns Sass string. By default, string is quoted with single quotes so that it can be easily used in standard CSS values.\n *\n * First argument: `sass.Value` - Data to encode (stringify).\n *\n * Second argument: `sass.SassBoolean` - Should output string be quoted with single quotes.\n *\n * @param {sass.Value[]} encodeArguments\n */\nfunction encode(encodeArguments) {\n\tconst [data, quotes_] = encodeArguments;\n\tconst quotes = quotes_.assertBoolean('quotes');\n\tconst shouldQuote = quotes.value;\n\tlet resolvedValue = JSON.stringify(getJsonValueFromSassValue(data));\n\tif (shouldQuote) {\n\t\tresolvedValue = `'${resolvedValue}'`;\n\t}\n\treturn new sass.SassString(resolvedValue);\n}\n\n/**\n * Decodes (`JSON.parse`) string and returns one of available Sass types.\n *\n * First argument: `sass.SassString` - String to decode (parse).\n *\n * @param {sass.Value[]} decodeArguments\n */\nfunction decode(decodeArguments) {\n\tconst [string_] = decodeArguments;\n\tconst string = string_.assertString('string');\n\t/** @type {JsonValue?} */\n\tlet resolvedValue = {};\n\ttry {\n\t\tresolvedValue = JSON.parse(string.text);\n\t} catch (error) {\n\t\tresolvedValue = null;\n\t}\n\treturn setJsonValueToSassValue(resolvedValue);\n}\n\n/** @type {{ 'json-encode($data, $quotes: true)': typeof encode, 'json-decode($string)': typeof decode }} */\nconst api = {\n\t'json-encode($data, $quotes: true)': encode,\n\t'json-decode($string)': decode\n};\n\nexport default api;\n"],"names":["getJsonValueFromSassValue","value","resolvedValue","sass","SassList","listToArray","SassMap","mapToObject","SassColor","rgbValue","red","green","blue","alphaValue","alpha","shortHexColor","rgbHex","apply","join","SassNumber","hasUnits","String","numeratorUnits","last","Number","SassString","text","SassBoolean","Boolean","list","length","asList","size","data","index","Array","from","keys","get","push","map","contents","key","unitTypes","isColor","parseColor","rgba","parseValueToStringOrNumber","parsedValue","unit","type","parseUnit","includes","error","parseValueToColor","setJsonValueToSassValue","isArray","arrayToList","isPlainObject","objectToMap","sassTrue","sassFalse","sassNull","array","item","object","property","Object","entries","OrderedMap","encode","encodeArguments","quotes_","quotes","assertBoolean","shouldQuote","JSON","stringify","decode","decodeArguments","string_","string","assertString","parse","api"],"mappings":";;;;;;;;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAASA,yBAAyBA,CAACC,KAAK,EAAE;AACzC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAID,KAAK,YAAYE,wBAAI,CAACC,QAAQ,EAAE;AACnCF,IAAAA,aAAa,GAAGG,WAAW,CAACJ,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACG,OAAO,EAAE;AACzCJ,IAAAA,aAAa,GAAGK,WAAW,CAACN,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACK,SAAS,EAAE;AAC3C;AACA,IAAA,MAAMC,QAAQ,GAAG,CAACR,KAAK,CAACS,GAAG,EAAET,KAAK,CAACU,KAAK,EAAEV,KAAK,CAACW,IAAI,CAAC,CAAA;AACrD,IAAA,MAAMC,UAAU,GAAGZ,KAAK,CAACa,KAAK,CAAA;IAC9B,IAAID,UAAU,KAAK,CAAC,EAAE;AACrBX,MAAAA,aAAa,GAAGa,iCAAa,CAAE,CAAA,CAAA,EAAGC,0BAAM,CAACC,KAAK,CAAC,IAAI,EAAER,QAAQ,CAAE,EAAC,CAAC,CAAA;AAClE,KAAC,MAAM;MACNP,aAAa,GAAI,CAAOO,KAAAA,EAAAA,QAAQ,CAACS,IAAI,CAAC,GAAG,CAAE,CAAGL,CAAAA,EAAAA,UAAW,CAAE,CAAA,CAAA,CAAA;AAC5D,KAAA;AACD,GAAC,MAAM,IAAIZ,KAAK,YAAYE,wBAAI,CAACgB,UAAU,EAAE;IAC5C,IAAIlB,KAAK,CAACmB,QAAQ,EAAE;AACnBlB,MAAAA,aAAa,GAAGmB,MAAM,CAACpB,KAAK,CAACA,KAAK,CAAC,GAAGA,KAAK,CAACqB,cAAc,CAACC,IAAI,EAAE,CAAA;AAClE,KAAC,MAAM;AACNrB,MAAAA,aAAa,GAAGsB,MAAM,CAACvB,KAAK,CAACA,KAAK,CAAC,CAAA;AACpC,KAAA;AACD,GAAC,MAAM,IAAIA,KAAK,YAAYE,wBAAI,CAACsB,UAAU,EAAE;AAC5CvB,IAAAA,aAAa,GAAGmB,MAAM,CAACpB,KAAK,CAACyB,IAAI,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIzB,KAAK,YAAYE,wBAAI,CAACwB,WAAW,EAAE;AAC7CzB,IAAAA,aAAa,GAAG0B,OAAO,CAAC3B,KAAK,CAACA,KAAK,CAAC,CAAA;AACrC,GAAC,MAAM;AACNC,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;AACA,EAAA,OAAOA,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASG,WAAWA,CAACwB,IAAI,EAAE;AAC1B,EAAA,MAAMC,MAAM,GAAGD,IAAI,CAACE,MAAM,CAACC,IAAI,CAAA;AAC/B;EACA,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAMC,KAAK,IAAIC,KAAK,CAACC,IAAI,CAAC;AAAEN,IAAAA,MAAAA;AAAO,GAAC,CAAC,CAACO,IAAI,EAAE,EAAE;IAClD,MAAMpC,KAAK,GAAGD,yBAAyB,CAAC6B,IAAI,CAACS,GAAG,CAACJ,KAAK,CAAC,CAAC,CAAA;AACxDD,IAAAA,IAAI,CAACM,IAAI,CAACtC,KAAK,CAAC,CAAA;AACjB,GAAA;AACA,EAAA,OAAOgC,IAAI,CAAA;AACZ,CAAA;;AAEA;AACA;AACA;AACA,SAAS1B,WAAWA,CAACiC,GAAG,EAAE;AACzB,EAAA,MAAMV,MAAM,GAAGU,GAAG,CAACC,QAAQ,CAACT,IAAI,CAAA;AAChC;EACA,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAMC,KAAK,IAAIC,KAAK,CAACC,IAAI,CAAC;AAAEN,IAAAA,MAAAA;AAAO,GAAC,CAAC,CAACO,IAAI,EAAE,EAAE;AAClD,IAAA,MAAMnC,aAAa,GAAGsC,GAAG,CAACF,GAAG,CAACJ,KAAK,CAAC,CAAA;AACpC,IAAA,IAAI,OAAOhC,aAAa,KAAK,WAAW,EAAE;MACzC,MAAMwC,GAAG,GAAGrB,MAAM,CAACnB,aAAa,CAACoC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;MACxC,MAAMrC,KAAK,GAAGD,yBAAyB,CAACE,aAAa,CAACoC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7DL,MAAAA,IAAI,CAACS,GAAG,CAAC,GAAGzC,KAAK,CAAA;AAClB,KAAA;AACD,GAAA;AACA,EAAA,OAAOgC,IAAI,CAAA;AACZ;;ACpEA;AACA;AACA;AACA;AACA;;AAEA,MAAMU,SAAS,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;;AAExE;AACA;AACA;AACA,SAASC,OAAOA,CAAC3C,KAAK,EAAE;EACvB,OAAO,OAAO4C,8BAAU,CAAC5C,KAAK,CAAC,CAAC6C,IAAI,KAAK,WAAW,CAAA;AACrD,CAAA;;AAEA;AACA;AACA;AACA,SAASC,0BAA0BA,CAAC9C,KAAK,EAAE;AAC1C,EAAA,IAAIC,aAAa,CAAA;EACjB,IAAI;IACH,MAAM;AAAED,MAAAA,KAAK,EAAE+C,WAAW;MAAEC,IAAI;AAAEC,MAAAA,IAAAA;AAAK,KAAC,GAAGC,6BAAS,CAAClD,KAAK,CAAC,CAAA;AAC3D,IAAA,IAAI0C,SAAS,CAACS,QAAQ,CAACF,IAAI,CAAC,EAAE;MAC7BhD,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAEC,IAAI,CAAC,CAAA;AACvD,KAAC,MAAM,IAAIC,IAAI,KAAK,YAAY,EAAE;MACjChD,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAC6B,WAAW,EAAE,GAAG,CAAC,CAAA;AACtD,KAAC,MAAM;AACN9C,MAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACsB,UAAU,CAACxB,KAAK,CAAC,CAAA;AAC3C,KAAA;GACA,CAAC,OAAOoD,KAAK,EAAE;AACfnD,IAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACsB,UAAU,CAACxB,KAAK,CAAC,CAAA;AAC3C,GAAA;AACA,EAAA,OAAOC,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASoD,iBAAiBA,CAACrD,KAAK,EAAE;AACjC,EAAA,MAAM,CAACS,GAAG,EAAEC,KAAK,EAAEC,IAAI,EAAEE,KAAK,CAAC,GAAG+B,8BAAU,CAAC5C,KAAK,CAAC,CAAC6C,IAAI,CAAA;AACxD,EAAA,OAAO,IAAI3C,wBAAI,CAACK,SAAS,CAAC;IACzBE,GAAG;IACHC,KAAK;IACLC,IAAI;AACJE,IAAAA,KAAAA;AACD,GAAC,CAAC,CAAA;AACH,CAAA;;AAEA;AACA;AACA;AACA,SAASyC,uBAAuBA,CAACtD,KAAK,EAAE;AACvC,EAAA,IAAIC,aAAa,CAAA;AACjB,EAAA,IAAIiC,KAAK,CAACqB,OAAO,CAACvD,KAAK,CAAC,EAAE;AACzBC,IAAAA,aAAa,GAAGuD,WAAW,CAACxD,KAAK,CAAC,CAAA;AACnC,GAAC,MAAM,IAAIyD,iCAAa,CAACzD,KAAK,CAAC,EAAE;AAChCC,IAAAA,aAAa,GAAGyD,WAAW,CAAC1D,KAAK,CAAC,CAAA;GAClC,MAAM,IAAI2C,OAAO,CAACvB,MAAM,CAACpB,KAAK,CAAC,CAAC,EAAE;AAClCC,IAAAA,aAAa,GAAGoD,iBAAiB,CAACjC,MAAM,CAACpB,KAAK,CAAC,CAAC,CAAA;AACjD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCC,IAAAA,aAAa,GAAG6C,0BAA0B,CAAC9C,KAAK,CAAC,CAAA;AAClD,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AACrCC,IAAAA,aAAa,GAAG,IAAIC,wBAAI,CAACgB,UAAU,CAAClB,KAAK,CAAC,CAAA;AAC3C,GAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAE;IACtCC,aAAa,GAAGD,KAAK,GAAGE,wBAAI,CAACyD,QAAQ,GAAGzD,wBAAI,CAAC0D,SAAS,CAAA;AACvD,GAAC,MAAM;IACN3D,aAAa,GAAGC,wBAAI,CAAC2D,QAAQ,CAAA;AAC9B,GAAA;AACA,EAAA,OAAO5D,aAAa,CAAA;AACrB,CAAA;;AAEA;AACA;AACA;AACA,SAASuD,WAAWA,CAACM,KAAK,EAAE;AAC3B;EACA,MAAM9B,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAM+B,IAAI,IAAID,KAAK,EAAE;AACzB9B,IAAAA,IAAI,CAACM,IAAI,CAACgB,uBAAuB,CAACS,IAAI,CAAC,CAAC,CAAA;AACzC,GAAA;AACA,EAAA,OAAO,IAAI7D,wBAAI,CAACC,QAAQ,CAAC6B,IAAI,CAAC,CAAA;AAC/B,CAAA;;AAEA;AACA;AACA;AACA,SAAS0B,WAAWA,CAACM,MAAM,EAAE;AAC5B;EACA,MAAMhC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,KAAK,MAAM,CAACiC,QAAQ,EAAEjE,KAAK,GAAG,IAAI,CAAC,IAAIkE,MAAM,CAACC,OAAO,CAACH,MAAM,CAAC,EAAE;AAC9DhC,IAAAA,IAAI,CAACM,IAAI,CAAC,CACTgB,uBAAuB,CAACW,QAAQ,CAAC,EACjCX,uBAAuB,CAACtD,KAAK,CAAC,CAC9B,CAAC,CAAA;AACH,GAAA;AACA;EACA,OAAO,IAAIE,wBAAI,CAACG,OAAO,CAAC+D,oBAAU,CAACpC,IAAI,CAAC,CAAC,CAAA;AAC1C;;ACnGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASqC,MAAMA,CAACC,eAAe,EAAE;AAChC,EAAA,MAAM,CAACtC,IAAI,EAAEuC,OAAO,CAAC,GAAGD,eAAe,CAAA;AACvC,EAAA,MAAME,MAAM,GAAGD,OAAO,CAACE,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC9C,EAAA,MAAMC,WAAW,GAAGF,MAAM,CAACxE,KAAK,CAAA;EAChC,IAAIC,aAAa,GAAG0E,IAAI,CAACC,SAAS,CAAC7E,yBAAyB,CAACiC,IAAI,CAAC,CAAC,CAAA;AACnE,EAAA,IAAI0C,WAAW,EAAE;IAChBzE,aAAa,GAAI,CAAGA,CAAAA,EAAAA,aAAc,CAAE,CAAA,CAAA,CAAA;AACrC,GAAA;AACA,EAAA,OAAO,IAAIC,wBAAI,CAACsB,UAAU,CAACvB,aAAa,CAAC,CAAA;AAC1C,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS4E,MAAMA,CAACC,eAAe,EAAE;AAChC,EAAA,MAAM,CAACC,OAAO,CAAC,GAAGD,eAAe,CAAA;AACjC,EAAA,MAAME,MAAM,GAAGD,OAAO,CAACE,YAAY,CAAC,QAAQ,CAAC,CAAA;AAC7C;EACA,IAAIhF,aAAa,GAAG,EAAE,CAAA;EACtB,IAAI;IACHA,aAAa,GAAG0E,IAAI,CAACO,KAAK,CAACF,MAAM,CAACvD,IAAI,CAAC,CAAA;GACvC,CAAC,OAAO2B,KAAK,EAAE;AACfnD,IAAAA,aAAa,GAAG,IAAI,CAAA;AACrB,GAAA;EACA,OAAOqD,uBAAuB,CAACrD,aAAa,CAAC,CAAA;AAC9C,CAAA;;AAEA;AACA,MAAMkF,GAAG,GAAG;AACX,EAAA,mCAAmC,EAAEd,MAAM;AAC3C,EAAA,sBAAsB,EAAEQ,MAAAA;AACzB;;;;"}
|