@tbela99/css-parser 0.1.0 → 0.2.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.
@@ -1,88 +1,101 @@
1
- var NodeType;
2
- (function (NodeType) {
3
- NodeType[NodeType["CommentNodeType"] = 0] = "CommentNodeType";
4
- NodeType[NodeType["CDOCOMMNodeType"] = 1] = "CDOCOMMNodeType";
5
- NodeType[NodeType["StyleSheetNodeType"] = 2] = "StyleSheetNodeType";
6
- NodeType[NodeType["AtRuleNodeType"] = 3] = "AtRuleNodeType";
7
- NodeType[NodeType["RuleNodeType"] = 4] = "RuleNodeType";
8
- NodeType[NodeType["DeclarationNodeType"] = 5] = "DeclarationNodeType";
9
- })(NodeType || (NodeType = {}));
10
1
  var EnumToken;
11
2
  (function (EnumToken) {
12
3
  EnumToken[EnumToken["CommentTokenType"] = 0] = "CommentTokenType";
13
4
  EnumToken[EnumToken["CDOCOMMTokenType"] = 1] = "CDOCOMMTokenType";
14
- EnumToken[EnumToken["LiteralTokenType"] = 2] = "LiteralTokenType";
15
- EnumToken[EnumToken["IdenTokenType"] = 3] = "IdenTokenType";
16
- EnumToken[EnumToken["CommaTokenType"] = 4] = "CommaTokenType";
17
- EnumToken[EnumToken["ColonTokenType"] = 5] = "ColonTokenType";
18
- EnumToken[EnumToken["SemiColonTokenType"] = 6] = "SemiColonTokenType";
19
- EnumToken[EnumToken["NumberTokenType"] = 7] = "NumberTokenType";
20
- EnumToken[EnumToken["AtRuleTokenType"] = 8] = "AtRuleTokenType";
21
- EnumToken[EnumToken["PercentageTokenType"] = 9] = "PercentageTokenType";
22
- EnumToken[EnumToken["FunctionTokenType"] = 10] = "FunctionTokenType";
23
- EnumToken[EnumToken["UrlFunctionTokenType"] = 11] = "UrlFunctionTokenType";
24
- EnumToken[EnumToken["StringTokenType"] = 12] = "StringTokenType";
25
- EnumToken[EnumToken["UnclosedStringTokenType"] = 13] = "UnclosedStringTokenType";
26
- EnumToken[EnumToken["DimensionTokenType"] = 14] = "DimensionTokenType";
27
- EnumToken[EnumToken["LengthTokenType"] = 15] = "LengthTokenType";
28
- EnumToken[EnumToken["AngleTokenType"] = 16] = "AngleTokenType";
29
- EnumToken[EnumToken["TimeTokenType"] = 17] = "TimeTokenType";
30
- EnumToken[EnumToken["FrequencyTokenType"] = 18] = "FrequencyTokenType";
31
- EnumToken[EnumToken["ResolutionTokenType"] = 19] = "ResolutionTokenType";
32
- EnumToken[EnumToken["HashTokenType"] = 20] = "HashTokenType";
33
- EnumToken[EnumToken["BlockStartTokenType"] = 21] = "BlockStartTokenType";
34
- EnumToken[EnumToken["BlockEndTokenType"] = 22] = "BlockEndTokenType";
35
- EnumToken[EnumToken["AttrStartTokenType"] = 23] = "AttrStartTokenType";
36
- EnumToken[EnumToken["AttrEndTokenType"] = 24] = "AttrEndTokenType";
37
- EnumToken[EnumToken["StartParensTokenType"] = 25] = "StartParensTokenType";
38
- EnumToken[EnumToken["EndParensTokenType"] = 26] = "EndParensTokenType";
39
- EnumToken[EnumToken["ParensTokenType"] = 27] = "ParensTokenType";
40
- EnumToken[EnumToken["WhitespaceTokenType"] = 28] = "WhitespaceTokenType";
41
- EnumToken[EnumToken["IncludesTokenType"] = 29] = "IncludesTokenType";
42
- EnumToken[EnumToken["DashMatchTokenType"] = 30] = "DashMatchTokenType";
43
- EnumToken[EnumToken["LtTokenType"] = 31] = "LtTokenType";
44
- EnumToken[EnumToken["LteTokenType"] = 32] = "LteTokenType";
45
- EnumToken[EnumToken["GtTokenType"] = 33] = "GtTokenType";
46
- EnumToken[EnumToken["GteTokenType"] = 34] = "GteTokenType";
47
- EnumToken[EnumToken["PseudoClassTokenType"] = 35] = "PseudoClassTokenType";
48
- EnumToken[EnumToken["PseudoClassFuncTokenType"] = 36] = "PseudoClassFuncTokenType";
49
- EnumToken[EnumToken["DelimTokenType"] = 37] = "DelimTokenType";
50
- EnumToken[EnumToken["UrlTokenTokenType"] = 38] = "UrlTokenTokenType";
51
- EnumToken[EnumToken["EOFTokenType"] = 39] = "EOFTokenType";
52
- EnumToken[EnumToken["ImportantTokenType"] = 40] = "ImportantTokenType";
53
- EnumToken[EnumToken["ColorTokenType"] = 41] = "ColorTokenType";
54
- EnumToken[EnumToken["AttrTokenType"] = 42] = "AttrTokenType";
55
- EnumToken[EnumToken["BadCommentTokenType"] = 43] = "BadCommentTokenType";
56
- EnumToken[EnumToken["BadCdoTokenType"] = 44] = "BadCdoTokenType";
57
- EnumToken[EnumToken["BadUrlTokenType"] = 45] = "BadUrlTokenType";
58
- EnumToken[EnumToken["BadStringTokenType"] = 46] = "BadStringTokenType";
59
- EnumToken[EnumToken["BinaryExpressionTokenType"] = 47] = "BinaryExpressionTokenType";
60
- EnumToken[EnumToken["UnaryExpressionTokenType"] = 48] = "UnaryExpressionTokenType";
5
+ EnumToken[EnumToken["StyleSheetNodeType"] = 2] = "StyleSheetNodeType";
6
+ EnumToken[EnumToken["AtRuleNodeType"] = 3] = "AtRuleNodeType";
7
+ EnumToken[EnumToken["RuleNodeType"] = 4] = "RuleNodeType";
8
+ EnumToken[EnumToken["DeclarationNodeType"] = 5] = "DeclarationNodeType";
9
+ EnumToken[EnumToken["LiteralTokenType"] = 6] = "LiteralTokenType";
10
+ EnumToken[EnumToken["IdenTokenType"] = 7] = "IdenTokenType";
11
+ EnumToken[EnumToken["DashedIdenTokenType"] = 8] = "DashedIdenTokenType";
12
+ EnumToken[EnumToken["CommaTokenType"] = 9] = "CommaTokenType";
13
+ EnumToken[EnumToken["ColonTokenType"] = 10] = "ColonTokenType";
14
+ EnumToken[EnumToken["SemiColonTokenType"] = 11] = "SemiColonTokenType";
15
+ EnumToken[EnumToken["NumberTokenType"] = 12] = "NumberTokenType";
16
+ EnumToken[EnumToken["AtRuleTokenType"] = 13] = "AtRuleTokenType";
17
+ EnumToken[EnumToken["PercentageTokenType"] = 14] = "PercentageTokenType";
18
+ EnumToken[EnumToken["FunctionTokenType"] = 15] = "FunctionTokenType";
19
+ EnumToken[EnumToken["TimelineFunctionTokenType"] = 16] = "TimelineFunctionTokenType";
20
+ EnumToken[EnumToken["TimingFunctionTokenType"] = 17] = "TimingFunctionTokenType";
21
+ EnumToken[EnumToken["UrlFunctionTokenType"] = 18] = "UrlFunctionTokenType";
22
+ EnumToken[EnumToken["ImageFunctionTokenType"] = 19] = "ImageFunctionTokenType";
23
+ EnumToken[EnumToken["StringTokenType"] = 20] = "StringTokenType";
24
+ EnumToken[EnumToken["UnclosedStringTokenType"] = 21] = "UnclosedStringTokenType";
25
+ EnumToken[EnumToken["DimensionTokenType"] = 22] = "DimensionTokenType";
26
+ EnumToken[EnumToken["LengthTokenType"] = 23] = "LengthTokenType";
27
+ EnumToken[EnumToken["AngleTokenType"] = 24] = "AngleTokenType";
28
+ EnumToken[EnumToken["TimeTokenType"] = 25] = "TimeTokenType";
29
+ EnumToken[EnumToken["FrequencyTokenType"] = 26] = "FrequencyTokenType";
30
+ EnumToken[EnumToken["ResolutionTokenType"] = 27] = "ResolutionTokenType";
31
+ EnumToken[EnumToken["HashTokenType"] = 28] = "HashTokenType";
32
+ EnumToken[EnumToken["BlockStartTokenType"] = 29] = "BlockStartTokenType";
33
+ EnumToken[EnumToken["BlockEndTokenType"] = 30] = "BlockEndTokenType";
34
+ EnumToken[EnumToken["AttrStartTokenType"] = 31] = "AttrStartTokenType";
35
+ EnumToken[EnumToken["AttrEndTokenType"] = 32] = "AttrEndTokenType";
36
+ EnumToken[EnumToken["StartParensTokenType"] = 33] = "StartParensTokenType";
37
+ EnumToken[EnumToken["EndParensTokenType"] = 34] = "EndParensTokenType";
38
+ EnumToken[EnumToken["ParensTokenType"] = 35] = "ParensTokenType";
39
+ EnumToken[EnumToken["WhitespaceTokenType"] = 36] = "WhitespaceTokenType";
40
+ EnumToken[EnumToken["IncludeMatchTokenType"] = 37] = "IncludeMatchTokenType";
41
+ EnumToken[EnumToken["DashMatchTokenType"] = 38] = "DashMatchTokenType";
42
+ EnumToken[EnumToken["LtTokenType"] = 39] = "LtTokenType";
43
+ EnumToken[EnumToken["LteTokenType"] = 40] = "LteTokenType";
44
+ EnumToken[EnumToken["GtTokenType"] = 41] = "GtTokenType";
45
+ EnumToken[EnumToken["GteTokenType"] = 42] = "GteTokenType";
46
+ EnumToken[EnumToken["PseudoClassTokenType"] = 43] = "PseudoClassTokenType";
47
+ EnumToken[EnumToken["PseudoClassFuncTokenType"] = 44] = "PseudoClassFuncTokenType";
48
+ EnumToken[EnumToken["DelimTokenType"] = 45] = "DelimTokenType";
49
+ EnumToken[EnumToken["UrlTokenTokenType"] = 46] = "UrlTokenTokenType";
50
+ EnumToken[EnumToken["EOFTokenType"] = 47] = "EOFTokenType";
51
+ EnumToken[EnumToken["ImportantTokenType"] = 48] = "ImportantTokenType";
52
+ EnumToken[EnumToken["ColorTokenType"] = 49] = "ColorTokenType";
53
+ EnumToken[EnumToken["AttrTokenType"] = 50] = "AttrTokenType";
54
+ EnumToken[EnumToken["BadCommentTokenType"] = 51] = "BadCommentTokenType";
55
+ EnumToken[EnumToken["BadCdoTokenType"] = 52] = "BadCdoTokenType";
56
+ EnumToken[EnumToken["BadUrlTokenType"] = 53] = "BadUrlTokenType";
57
+ EnumToken[EnumToken["BadStringTokenType"] = 54] = "BadStringTokenType";
58
+ EnumToken[EnumToken["BinaryExpressionTokenType"] = 55] = "BinaryExpressionTokenType";
59
+ EnumToken[EnumToken["UnaryExpressionTokenType"] = 56] = "UnaryExpressionTokenType";
61
60
  /* catch all */
62
- EnumToken[EnumToken["ListToken"] = 49] = "ListToken";
61
+ EnumToken[EnumToken["ListToken"] = 57] = "ListToken";
63
62
  /* arithmetic tokens */
64
- EnumToken[EnumToken["Add"] = 50] = "Add";
65
- EnumToken[EnumToken["Mul"] = 51] = "Mul";
66
- EnumToken[EnumToken["Div"] = 52] = "Div";
67
- EnumToken[EnumToken["Sub"] = 53] = "Sub";
63
+ EnumToken[EnumToken["Add"] = 58] = "Add";
64
+ EnumToken[EnumToken["Mul"] = 59] = "Mul";
65
+ EnumToken[EnumToken["Div"] = 60] = "Div";
66
+ EnumToken[EnumToken["Sub"] = 61] = "Sub";
67
+ /* new tokens */
68
+ EnumToken[EnumToken["ColumnCombinatorTokenType"] = 62] = "ColumnCombinatorTokenType";
69
+ EnumToken[EnumToken["ContainMatchTokenType"] = 63] = "ContainMatchTokenType";
70
+ EnumToken[EnumToken["StartMatchTokenType"] = 64] = "StartMatchTokenType";
71
+ EnumToken[EnumToken["EndMatchTokenType"] = 65] = "EndMatchTokenType";
72
+ EnumToken[EnumToken["MatchExpressionTokenType"] = 66] = "MatchExpressionTokenType";
73
+ EnumToken[EnumToken["NameSpaceAttributeTokenType"] = 67] = "NameSpaceAttributeTokenType";
74
+ EnumToken[EnumToken["FractionTokenType"] = 68] = "FractionTokenType";
68
75
  /* aliases */
69
- EnumToken[EnumToken["Time"] = 17] = "Time";
70
- EnumToken[EnumToken["Iden"] = 3] = "Iden";
71
- EnumToken[EnumToken["Hash"] = 20] = "Hash";
72
- EnumToken[EnumToken["Angle"] = 16] = "Angle";
73
- EnumToken[EnumToken["Color"] = 41] = "Color";
74
- EnumToken[EnumToken["Comma"] = 4] = "Comma";
75
- EnumToken[EnumToken["String"] = 12] = "String";
76
- EnumToken[EnumToken["Length"] = 15] = "Length";
77
- EnumToken[EnumToken["Number"] = 7] = "Number";
78
- EnumToken[EnumToken["Perc"] = 9] = "Perc";
79
- EnumToken[EnumToken["Literal"] = 2] = "Literal";
76
+ EnumToken[EnumToken["Time"] = 25] = "Time";
77
+ EnumToken[EnumToken["Iden"] = 7] = "Iden";
78
+ EnumToken[EnumToken["Hash"] = 28] = "Hash";
79
+ EnumToken[EnumToken["Angle"] = 24] = "Angle";
80
+ EnumToken[EnumToken["Color"] = 49] = "Color";
81
+ EnumToken[EnumToken["Comma"] = 9] = "Comma";
82
+ EnumToken[EnumToken["String"] = 20] = "String";
83
+ EnumToken[EnumToken["Length"] = 23] = "Length";
84
+ EnumToken[EnumToken["Number"] = 12] = "Number";
85
+ EnumToken[EnumToken["Perc"] = 14] = "Perc";
86
+ EnumToken[EnumToken["Literal"] = 6] = "Literal";
80
87
  EnumToken[EnumToken["Comment"] = 0] = "Comment";
81
- EnumToken[EnumToken["UrlFunc"] = 11] = "UrlFunc";
82
- EnumToken[EnumToken["Dimension"] = 14] = "Dimension";
83
- EnumToken[EnumToken["Frequency"] = 18] = "Frequency";
84
- EnumToken[EnumToken["Resolution"] = 19] = "Resolution";
85
- EnumToken[EnumToken["Whitespace"] = 28] = "Whitespace";
88
+ EnumToken[EnumToken["UrlFunc"] = 18] = "UrlFunc";
89
+ EnumToken[EnumToken["Dimension"] = 22] = "Dimension";
90
+ EnumToken[EnumToken["Frequency"] = 26] = "Frequency";
91
+ EnumToken[EnumToken["Resolution"] = 27] = "Resolution";
92
+ EnumToken[EnumToken["Whitespace"] = 36] = "Whitespace";
93
+ EnumToken[EnumToken["DashedIden"] = 8] = "DashedIden";
94
+ EnumToken[EnumToken["ImageFunc"] = 19] = "ImageFunc";
95
+ EnumToken[EnumToken["CommentNodeType"] = 0] = "CommentNodeType";
96
+ EnumToken[EnumToken["CDOCOMMNodeType"] = 1] = "CDOCOMMNodeType";
97
+ EnumToken[EnumToken["TimingFunction"] = 17] = "TimingFunction";
98
+ EnumToken[EnumToken["TimelineFunction"] = 16] = "TimelineFunction";
86
99
  })(EnumToken || (EnumToken = {}));
87
100
 
88
- export { EnumToken, NodeType };
101
+ export { EnumToken };
@@ -1,16 +1,29 @@
1
- function* walk(node) {
1
+ function* walk(node, filter) {
2
2
  const parents = [node];
3
3
  const root = node;
4
4
  const weakMap = new WeakMap;
5
5
  while (parents.length > 0) {
6
6
  node = parents.shift();
7
+ let option = null;
8
+ if (filter != null) {
9
+ option = filter(node);
10
+ if (option === 'ignore') {
11
+ continue;
12
+ }
13
+ if (option === 'stop') {
14
+ break;
15
+ }
16
+ }
7
17
  // @ts-ignore
8
- yield { node, parent: weakMap.get(node), root };
9
- if ('chi' in node) {
10
- for (const child of node.chi) {
18
+ if (option !== 'children') {
19
+ // @ts-ignore
20
+ yield { node, parent: weakMap.get(node), root };
21
+ }
22
+ if (option !== 'ignore-children' && 'chi' in node) {
23
+ parents.unshift(...node.chi);
24
+ for (const child of node.chi.slice()) {
11
25
  weakMap.set(child, node);
12
26
  }
13
- parents.unshift(...node.chi);
14
27
  }
15
28
  }
16
29
  }
@@ -0,0 +1,48 @@
1
+ class IterableWeakSet {
2
+ #weakset = new WeakSet;
3
+ #set = new Set;
4
+ constructor(iterable) {
5
+ if (iterable) {
6
+ for (const value of iterable) {
7
+ const ref = new WeakRef(value);
8
+ this.#weakset.add(value);
9
+ this.#set.add(ref);
10
+ }
11
+ }
12
+ }
13
+ has(value) {
14
+ return this.#weakset.has(value);
15
+ }
16
+ delete(value) {
17
+ if (this.#weakset.has(value)) {
18
+ for (const ref of this.#set) {
19
+ if (ref.deref() === value) {
20
+ this.#set.delete(ref);
21
+ break;
22
+ }
23
+ }
24
+ return this.#weakset.delete(value);
25
+ }
26
+ return false;
27
+ }
28
+ add(value) {
29
+ if (!this.#weakset.has(value)) {
30
+ this.#weakset.add(value);
31
+ this.#set.add(new WeakRef(value));
32
+ }
33
+ return this;
34
+ }
35
+ *[Symbol.iterator]() {
36
+ for (const ref of new Set(this.#set)) {
37
+ const key = ref.deref();
38
+ if (key != null) {
39
+ yield key;
40
+ }
41
+ else {
42
+ this.#set.delete(ref);
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ export { IterableWeakSet };
@@ -0,0 +1,53 @@
1
+ class IterableWeakMap {
2
+ #map;
3
+ #set;
4
+ constructor(iterable) {
5
+ this.#map = new WeakMap;
6
+ this.#set = new Set;
7
+ if (iterable) {
8
+ for (const [key, value] of iterable) {
9
+ const ref = new WeakRef(key);
10
+ this.#set.add(ref);
11
+ this.#map.set(key, value);
12
+ }
13
+ }
14
+ }
15
+ has(key) {
16
+ return this.#map.has(key);
17
+ }
18
+ set(key, value) {
19
+ if (!this.#map.has(key)) {
20
+ this.#set.add(new WeakRef(key));
21
+ }
22
+ this.#map.set(key, value);
23
+ return this;
24
+ }
25
+ get(key) {
26
+ return this.#map.get(key);
27
+ }
28
+ delete(key) {
29
+ if (this.#map.has(key)) {
30
+ for (const ref of this.#set) {
31
+ if (ref.deref() === key) {
32
+ this.#set.delete(ref);
33
+ break;
34
+ }
35
+ }
36
+ return this.#map.delete(key);
37
+ }
38
+ return false;
39
+ }
40
+ *[Symbol.iterator]() {
41
+ for (const ref of new Set(this.#set)) {
42
+ const key = ref.deref();
43
+ if (key == null) {
44
+ this.#set.delete(ref);
45
+ continue;
46
+ }
47
+ // @ts-ignore
48
+ yield [key, this.#map.get(key)];
49
+ }
50
+ }
51
+ }
52
+
53
+ export { IterableWeakMap };
@@ -1,6 +1,6 @@
1
1
  import { PropertySet } from './set.js';
2
2
  import '../../renderer/utils/color.js';
3
- import '../../ast/types.js';
3
+ import { EnumToken } from '../../ast/types.js';
4
4
  import '../../ast/minify.js';
5
5
  import { parseString } from '../parse.js';
6
6
  import '../../renderer/sourcemap/lib/encode.js';
@@ -21,10 +21,10 @@ class PropertyList {
21
21
  this.declarations = new Map;
22
22
  }
23
23
  set(nam, value) {
24
- return this.add({ typ: 5 /* NodeType.DeclarationNodeType */, nam, val: Array.isArray(value) ? value : parseString(String(value)) });
24
+ return this.add({ typ: EnumToken.DeclarationNodeType, nam, val: Array.isArray(value) ? value : parseString(String(value)) });
25
25
  }
26
26
  add(declaration) {
27
- if (declaration.typ != 5 /* NodeType.DeclarationNodeType */ || !this.options.removeDuplicateDeclarations) {
27
+ if (declaration.typ != EnumToken.DeclarationNodeType || !this.options.removeDuplicateDeclarations) {
28
28
  this.declarations.set(Number(Math.random().toString().slice(2)).toString(36), declaration);
29
29
  return this;
30
30
  }
@@ -7,7 +7,9 @@ import { parseString } from '../parse.js';
7
7
  import { getConfig } from '../utils/config.js';
8
8
  import { matchType } from '../utils/type.js';
9
9
  import { PropertySet } from './set.js';
10
+ import { IterableWeakMap } from '../../iterable/weakmap.js';
10
11
 
12
+ const cache = new IterableWeakMap();
11
13
  const propertiesConfig = getConfig();
12
14
  class PropertyMap {
13
15
  config;
@@ -128,7 +130,7 @@ class PropertyMap {
128
130
  if (values.length == 0) {
129
131
  this.declarations = Object.entries(tokens).reduce((acc, curr) => {
130
132
  acc.set(curr[0], {
131
- typ: 5 /* NodeType.DeclarationNodeType */,
133
+ typ: EnumToken.DeclarationNodeType,
132
134
  nam: curr[0],
133
135
  val: curr[1].reduce((acc, curr) => {
134
136
  if (acc.length > 0) {
@@ -192,6 +194,44 @@ class PropertyMap {
192
194
  requiredCount = this.declarations.size;
193
195
  }
194
196
  if (!isShorthand || requiredCount < this.requiredCount) {
197
+ if (isShorthand && this.declarations.has(this.config.shorthand)) {
198
+ // console.debug(...this.declarations.values());
199
+ const removeDefaults = (declaration) => {
200
+ // const dec: AstDeclaration = {...declaration};
201
+ const config = this.config.shorthand == declaration.nam ? this.config : this.config.properties[declaration.nam];
202
+ declaration.val = declaration.val.filter((val) => {
203
+ if (!cache.has(val)) {
204
+ cache.set(val, renderToken(val, { minify: true }));
205
+ }
206
+ return !config.default.includes(cache.get(val));
207
+ })
208
+ .filter((val, index, array) => !(index > 0 &&
209
+ val.typ == EnumToken.WhitespaceTokenType &&
210
+ array[index - 1].typ == EnumToken.WhitespaceTokenType));
211
+ if (declaration.val.at(-1)?.typ == EnumToken.WhitespaceTokenType) {
212
+ declaration.val.pop();
213
+ }
214
+ return declaration;
215
+ };
216
+ const values = [...this.declarations.values()].reduce((acc, curr) => {
217
+ if (curr instanceof PropertySet) {
218
+ acc.push(...curr);
219
+ }
220
+ else {
221
+ acc.push(curr);
222
+ }
223
+ return acc;
224
+ }, []);
225
+ const filtered = values.map(removeDefaults).filter((x) => x.val.length > 0);
226
+ if (filtered.length == 0 && this.config.default.length > 0) {
227
+ filtered.push({
228
+ typ: EnumToken.DeclarationNodeType,
229
+ nam: this.config.shorthand,
230
+ val: parseString(this.config.default[0])
231
+ });
232
+ }
233
+ return (filtered.length > 0 ? filtered : values)[Symbol.iterator]();
234
+ }
195
235
  // @ts-ignore
196
236
  iterable = this.declarations.values();
197
237
  }
@@ -204,7 +244,6 @@ class PropertyMap {
204
244
  } : null;
205
245
  const tokens = {};
206
246
  // @ts-ignore
207
- /* const valid: string[] =*/
208
247
  Object.entries(this.config.properties).reduce((acc, curr) => {
209
248
  if (!this.declarations.has(curr[0])) {
210
249
  if (curr[1].required) {
@@ -270,7 +309,7 @@ class PropertyMap {
270
309
  iterable = this.declarations.values();
271
310
  }
272
311
  else {
273
- const values = Object.entries(tokens).reduce((acc, curr) => {
312
+ let values = Object.entries(tokens).reduce((acc, curr) => {
274
313
  const props = this.config.properties[curr[0]];
275
314
  for (let i = 0; i < curr[1].length; i++) {
276
315
  if (acc.length == i) {
@@ -287,6 +326,7 @@ class PropertyMap {
287
326
  if (props.default.includes(curr[1][i].reduce((acc, curr) => acc + renderToken(curr) + ' ', '').trimEnd())) {
288
327
  continue;
289
328
  }
329
+ // remove default values
290
330
  let doFilterDefault = true;
291
331
  if (curr[0] in propertiesConfig.properties) {
292
332
  for (let v of values) {
@@ -359,7 +399,7 @@ class PropertyMap {
359
399
  return acc;
360
400
  }, []);
361
401
  if (this.config.mapping != null) {
362
- const val = values.reduce((acc, curr) => acc + renderToken(curr, { removeComments: true }), '');
402
+ const val = values.reduce((acc, curr) => acc + renderToken(curr, { removeComments: true, minify: true }), '');
363
403
  if (val in this.config.mapping) {
364
404
  values.length = 0;
365
405
  values.push({
@@ -369,8 +409,16 @@ class PropertyMap {
369
409
  });
370
410
  }
371
411
  }
412
+ // @ts-ignore
413
+ if (values.length == 1 &&
414
+ typeof values[0].val == 'string' &&
415
+ this.config.default.includes(values[0].val.toLowerCase()) &&
416
+ this.config.default[0] != values[0].val.toLowerCase()) {
417
+ // @ts-ignore/
418
+ values = parseString(this.config.default[0]);
419
+ }
372
420
  iterable = [{
373
- typ: 5 /* NodeType.DeclarationNodeType */,
421
+ typ: EnumToken.DeclarationNodeType,
374
422
  nam: this.config.shorthand,
375
423
  val: values
376
424
  }][Symbol.iterator]();
@@ -60,7 +60,7 @@ class PropertySet {
60
60
  this.config.properties.forEach((property, index) => {
61
61
  if (!this.declarations.has(property)) {
62
62
  this.declarations.set(property, {
63
- typ: 5 /* NodeType.DeclarationNodeType */,
63
+ typ: EnumToken.DeclarationNodeType,
64
64
  nam: property,
65
65
  val: []
66
66
  });
@@ -139,7 +139,7 @@ class PropertySet {
139
139
  }
140
140
  }
141
141
  iterator = [{
142
- typ: 5 /* NodeType.DeclarationNodeType */,
142
+ typ: EnumToken.DeclarationNodeType,
143
143
  nam: this.config.shorthand,
144
144
  val: values.reduce((acc, curr) => {
145
145
  if (curr.length > 1) {