@jesscss/plugin-less-compat 2.0.0-alpha.1

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.
Files changed (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +139 -0
  3. package/lib/index.d.ts +9 -0
  4. package/lib/index.js +10 -0
  5. package/lib/index.js.map +1 -0
  6. package/lib/less-compat-structures.d.ts +108 -0
  7. package/lib/less-compat-structures.js +519 -0
  8. package/lib/less-compat-structures.js.map +1 -0
  9. package/lib/nodes/at-rule.d.ts +6 -0
  10. package/lib/nodes/at-rule.js +72 -0
  11. package/lib/nodes/at-rule.js.map +1 -0
  12. package/lib/nodes/attribute-selector.d.ts +6 -0
  13. package/lib/nodes/attribute-selector.js +54 -0
  14. package/lib/nodes/attribute-selector.js.map +1 -0
  15. package/lib/nodes/call.d.ts +6 -0
  16. package/lib/nodes/call.js +83 -0
  17. package/lib/nodes/call.js.map +1 -0
  18. package/lib/nodes/color.d.ts +6 -0
  19. package/lib/nodes/color.js +57 -0
  20. package/lib/nodes/color.js.map +1 -0
  21. package/lib/nodes/combinator.d.ts +6 -0
  22. package/lib/nodes/combinator.js +34 -0
  23. package/lib/nodes/combinator.js.map +1 -0
  24. package/lib/nodes/comment.d.ts +6 -0
  25. package/lib/nodes/comment.js +41 -0
  26. package/lib/nodes/comment.js.map +1 -0
  27. package/lib/nodes/condition.d.ts +6 -0
  28. package/lib/nodes/condition.js +60 -0
  29. package/lib/nodes/condition.js.map +1 -0
  30. package/lib/nodes/declaration.d.ts +6 -0
  31. package/lib/nodes/declaration.js +81 -0
  32. package/lib/nodes/declaration.js.map +1 -0
  33. package/lib/nodes/dimension.d.ts +6 -0
  34. package/lib/nodes/dimension.js +47 -0
  35. package/lib/nodes/dimension.js.map +1 -0
  36. package/lib/nodes/expression.d.ts +6 -0
  37. package/lib/nodes/expression.js +44 -0
  38. package/lib/nodes/expression.js.map +1 -0
  39. package/lib/nodes/extend.d.ts +6 -0
  40. package/lib/nodes/extend.js +57 -0
  41. package/lib/nodes/extend.js.map +1 -0
  42. package/lib/nodes/import.d.ts +6 -0
  43. package/lib/nodes/import.js +63 -0
  44. package/lib/nodes/import.js.map +1 -0
  45. package/lib/nodes/index.d.ts +45 -0
  46. package/lib/nodes/index.js +308 -0
  47. package/lib/nodes/index.js.map +1 -0
  48. package/lib/nodes/keyword.d.ts +6 -0
  49. package/lib/nodes/keyword.js +36 -0
  50. package/lib/nodes/keyword.js.map +1 -0
  51. package/lib/nodes/list.d.ts +6 -0
  52. package/lib/nodes/list.js +150 -0
  53. package/lib/nodes/list.js.map +1 -0
  54. package/lib/nodes/mixin.d.ts +6 -0
  55. package/lib/nodes/mixin.js +62 -0
  56. package/lib/nodes/mixin.js.map +1 -0
  57. package/lib/nodes/negative.d.ts +6 -0
  58. package/lib/nodes/negative.js +42 -0
  59. package/lib/nodes/negative.js.map +1 -0
  60. package/lib/nodes/operation.d.ts +6 -0
  61. package/lib/nodes/operation.js +63 -0
  62. package/lib/nodes/operation.js.map +1 -0
  63. package/lib/nodes/paren.d.ts +6 -0
  64. package/lib/nodes/paren.js +42 -0
  65. package/lib/nodes/paren.js.map +1 -0
  66. package/lib/nodes/quoted.d.ts +6 -0
  67. package/lib/nodes/quoted.js +57 -0
  68. package/lib/nodes/quoted.js.map +1 -0
  69. package/lib/nodes/reference.d.ts +9 -0
  70. package/lib/nodes/reference.js +80 -0
  71. package/lib/nodes/reference.js.map +1 -0
  72. package/lib/nodes/ruleset.d.ts +6 -0
  73. package/lib/nodes/ruleset.js +108 -0
  74. package/lib/nodes/ruleset.js.map +1 -0
  75. package/lib/nodes/selector.d.ts +8 -0
  76. package/lib/nodes/selector.js +226 -0
  77. package/lib/nodes/selector.js.map +1 -0
  78. package/lib/nodes/sequence.d.ts +9 -0
  79. package/lib/nodes/sequence.js +75 -0
  80. package/lib/nodes/sequence.js.map +1 -0
  81. package/lib/nodes/url.d.ts +6 -0
  82. package/lib/nodes/url.js +42 -0
  83. package/lib/nodes/url.js.map +1 -0
  84. package/lib/nodes/var-declaration.d.ts +6 -0
  85. package/lib/nodes/var-declaration.js +60 -0
  86. package/lib/nodes/var-declaration.js.map +1 -0
  87. package/lib/plugin-utils.d.ts +20 -0
  88. package/lib/plugin-utils.js +100 -0
  89. package/lib/plugin-utils.js.map +1 -0
  90. package/lib/plugin.d.ts +92 -0
  91. package/lib/plugin.js +1027 -0
  92. package/lib/plugin.js.map +1 -0
  93. package/lib/transform/from-less.d.ts +30 -0
  94. package/lib/transform/from-less.js +170 -0
  95. package/lib/transform/from-less.js.map +1 -0
  96. package/lib/transform/index.d.ts +7 -0
  97. package/lib/transform/index.js +8 -0
  98. package/lib/transform/index.js.map +1 -0
  99. package/lib/transform/proxy.d.ts +32 -0
  100. package/lib/transform/proxy.js +138 -0
  101. package/lib/transform/proxy.js.map +1 -0
  102. package/lib/transform/to-less.d.ts +17 -0
  103. package/lib/transform/to-less.js +128 -0
  104. package/lib/transform/to-less.js.map +1 -0
  105. package/lib/transform/type-map.d.ts +27 -0
  106. package/lib/transform/type-map.js +105 -0
  107. package/lib/transform/type-map.js.map +1 -0
  108. package/lib/types.d.ts +33 -0
  109. package/lib/types.js +5 -0
  110. package/lib/types.js.map +1 -0
  111. package/package.json +56 -0
@@ -0,0 +1,150 @@
1
+ import { Node } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { toLessNode } from '../transform/to-less.js';
4
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
5
+ /**
6
+ * Transform a Jess List to a Less-compatible Value
7
+ */
8
+ export function transformListToLess(jessList, cache) {
9
+ return createLessProxy(jessList, cache, (prop, target) => {
10
+ const list = target;
11
+ // Map 'type' property
12
+ if (prop === 'type') {
13
+ return mapJessTypeToLessType(list.type);
14
+ }
15
+ // Map 'typeIndex'
16
+ if (prop === 'typeIndex') {
17
+ return undefined;
18
+ }
19
+ // Get filtered, converted value array (used by multiple properties)
20
+ const getFilteredValue = () => {
21
+ const value = list.value;
22
+ if (Array.isArray(value)) {
23
+ return value
24
+ .map((item) => {
25
+ if (!item) {
26
+ return null; // Mark null/undefined for filtering
27
+ }
28
+ if (item instanceof Node) {
29
+ const lessItem = toLessNode(item, { cache });
30
+ // If toLessNode returns undefined, skip it
31
+ return lessItem || null;
32
+ }
33
+ return item;
34
+ })
35
+ .filter((item) => item !== undefined && item !== null); // Filter out undefined/null
36
+ }
37
+ // Single value - wrap in array (if not undefined/null)
38
+ if (value !== undefined && value !== null) {
39
+ if (value && typeof value === 'object' && 'type' in value) {
40
+ // Check if it's a Node-like object
41
+ const lessValue = toLessNode(value, { cache });
42
+ return lessValue ? [lessValue] : [];
43
+ }
44
+ return [value];
45
+ }
46
+ return [];
47
+ };
48
+ // Map 'value' property (Less Value expects array)
49
+ if (prop === 'value') {
50
+ return getFilteredValue();
51
+ }
52
+ // Intercept 'length' property to return filtered array length
53
+ // Less visitor checks node.length to determine if it's array-like
54
+ if (prop === 'length') {
55
+ return getFilteredValue().length;
56
+ }
57
+ // Intercept numeric indices (array access like node[0], node[1])
58
+ // Less visitor may access node[i] directly when node.length exists
59
+ if (typeof prop === 'string' && /^\d+$/.test(prop)) {
60
+ const filtered = getFilteredValue();
61
+ const index = parseInt(prop, 10);
62
+ return filtered[index];
63
+ }
64
+ // Map 'children' method to return filtered, converted items
65
+ // This prevents undefined items from being accessed when Jess core's accept() calls children()
66
+ // children() is a generator function that yields Node instances
67
+ // CRITICAL: When Jess core's accept() calls children(), it uses getValues(this.value)
68
+ // We need to ensure the value property returns clean items, and children() filters them
69
+ if (prop === 'children') {
70
+ return function* (deep, reverse, includePrePost) {
71
+ // Use the filtered value from our value property getter
72
+ // This ensures we get the same filtered array that the value property returns
73
+ const filteredValue = list.value
74
+ .filter((item) => item !== undefined && item !== null)
75
+ .map((item) => {
76
+ if (item instanceof Node) {
77
+ const lessItem = toLessNode(item, { cache });
78
+ return lessItem || null;
79
+ }
80
+ return item;
81
+ })
82
+ .filter((item) => item !== undefined && item !== null);
83
+ // Handle reverse order if needed
84
+ const itemsToIterate = reverse ? [...filteredValue].reverse() : filteredValue;
85
+ for (const item of itemsToIterate) {
86
+ if (item === undefined || item === null) {
87
+ continue; // Skip undefined/null items (shouldn't happen after filtering, but be safe)
88
+ }
89
+ if (item instanceof Node || (item && typeof item === 'object' && 'type' in item)) {
90
+ // It's a node (either Jess node or Less proxy)
91
+ if (includePrePost) {
92
+ // For now, just yield the item (pre/post handling can be added later if needed)
93
+ yield item;
94
+ }
95
+ else {
96
+ yield item;
97
+ }
98
+ if (deep && item instanceof Node) {
99
+ // Recursively yield children if deep is true
100
+ if (item.children) {
101
+ yield* item.children(deep, reverse, includePrePost);
102
+ }
103
+ }
104
+ }
105
+ else {
106
+ yield item;
107
+ }
108
+ }
109
+ };
110
+ }
111
+ // Map 'accept' method for visitor traversal
112
+ if (prop === 'accept') {
113
+ return function (visitor) {
114
+ // Less List's accept() should traverse value items if they exist
115
+ // But we don't call visitor.visit() here to avoid infinite loops
116
+ // The visitor's visit() method will handle traversal
117
+ // If value exists, we should traverse items using visitArray
118
+ const value = list.value;
119
+ if (Array.isArray(value) && value.length > 0) {
120
+ const lessItems = value
121
+ .map((item) => {
122
+ if (item instanceof Node) {
123
+ return toLessNode(item, { cache });
124
+ }
125
+ return item;
126
+ })
127
+ .filter((item) => item !== undefined && item !== null); // Filter out undefined/null
128
+ if (lessItems.length > 0) {
129
+ if (visitor.visitArray) {
130
+ visitor.visitArray(lessItems);
131
+ }
132
+ else {
133
+ // Fallback: call accept on each item if visitArray not available
134
+ for (const lessItem of lessItems) {
135
+ if (lessItem && lessItem.accept) {
136
+ lessItem.accept(visitor);
137
+ }
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Return the proxy, not the underlying node, to prevent Less visitor from accessing raw Jess node
143
+ // Get the proxy from cache or create it
144
+ return cache && cache.has(list) ? cache.get(list) : transformListToLess(list, cache);
145
+ };
146
+ }
147
+ return undefined;
148
+ });
149
+ }
150
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/nodes/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Mixin } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Mixin to a Less-compatible MixinDefinition
5
+ */
6
+ export declare function transformMixinToLess(jessMixin: Mixin, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,62 @@
1
+ import { Node } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { toLessNode } from '../transform/to-less.js';
4
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
5
+ import { fromLessNode } from '../transform/from-less.js';
6
+ /**
7
+ * Transform a Jess Mixin to a Less-compatible MixinDefinition
8
+ */
9
+ export function transformMixinToLess(jessMixin, cache) {
10
+ return createLessProxy(jessMixin, cache, (prop, target) => {
11
+ const mixin = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(mixin.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'name' property
21
+ if (prop === 'name') {
22
+ return mixin.value.name;
23
+ }
24
+ // Map 'params' property
25
+ if (prop === 'params') {
26
+ const params = mixin.value.params;
27
+ if (params instanceof Node) {
28
+ return toLessNode(params, { cache });
29
+ }
30
+ return params;
31
+ }
32
+ // Map 'rules' property
33
+ if (prop === 'rules') {
34
+ const rules = mixin.value.rules;
35
+ if (rules && rules.value) {
36
+ return rules.value.map((r) => toLessNode(r, { cache }));
37
+ }
38
+ return [];
39
+ }
40
+ // Map 'condition' property (from guard)
41
+ if (prop === 'condition') {
42
+ const guard = mixin.value.guard;
43
+ if (guard instanceof Node) {
44
+ return toLessNode(guard, { cache });
45
+ }
46
+ return guard;
47
+ }
48
+ // Map 'accept' method for visitor traversal
49
+ if (prop === 'accept') {
50
+ return function (visitor) {
51
+ const lessMixin = transformMixinToLess(mixin, cache);
52
+ const result = visitor.visit(lessMixin);
53
+ if (result !== lessMixin) {
54
+ return fromLessNode(result, { cache });
55
+ }
56
+ return mixin;
57
+ };
58
+ }
59
+ return undefined;
60
+ });
61
+ }
62
+ //# sourceMappingURL=mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixin.js","sourceRoot":"","sources":["../../src/nodes/mixin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAgB,EAChB,KAAyB;IAEzB,OAAO,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,MAAe,CAAC;QAE9B,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,wBAAwB;QACxB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAClC,IAAI,MAAM,YAAY,IAAI,EAAE,CAAC;gBAC3B,OAAO,UAAU,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Negative } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Negative to a Less-compatible Negative
5
+ */
6
+ export declare function transformNegativeToLess(jessNegative: Negative, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,42 @@
1
+ import { Node } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { toLessNode } from '../transform/to-less.js';
4
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
5
+ import { fromLessNode } from '../transform/from-less.js';
6
+ /**
7
+ * Transform a Jess Negative to a Less-compatible Negative
8
+ */
9
+ export function transformNegativeToLess(jessNegative, cache) {
10
+ return createLessProxy(jessNegative, cache, (prop, target) => {
11
+ const negative = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(negative.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'value' property
21
+ if (prop === 'value') {
22
+ const value = negative.value;
23
+ if (value instanceof Node) {
24
+ return toLessNode(value, { cache });
25
+ }
26
+ return value;
27
+ }
28
+ // Map 'accept' method for visitor traversal
29
+ if (prop === 'accept') {
30
+ return function (visitor) {
31
+ const lessNegative = transformNegativeToLess(negative, cache);
32
+ const result = visitor.visit(lessNegative);
33
+ if (result !== lessNegative) {
34
+ return fromLessNode(result, { cache });
35
+ }
36
+ return negative;
37
+ };
38
+ }
39
+ return undefined;
40
+ });
41
+ }
42
+ //# sourceMappingURL=negative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negative.js","sourceRoot":"","sources":["../../src/nodes/negative.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,IAAI,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAsB,EACtB,KAAyB;IAEzB,OAAO,eAAe,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC3D,MAAM,QAAQ,GAAG,MAAkB,CAAC;QAEpC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,YAAY,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3C,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;oBAC5B,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Operation } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Operation to a Less-compatible Operation
5
+ */
6
+ export declare function transformOperationToLess(jessOperation: Operation, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,63 @@
1
+ import { Node } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { toLessNode } from '../transform/to-less.js';
4
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
5
+ import { fromLessNode } from '../transform/from-less.js';
6
+ /**
7
+ * Transform a Jess Operation to a Less-compatible Operation
8
+ */
9
+ export function transformOperationToLess(jessOperation, cache) {
10
+ return createLessProxy(jessOperation, cache, (prop, target) => {
11
+ const op = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(op.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'op' property (operator)
21
+ if (prop === 'op') {
22
+ // Jess stores as [left, op, right], extract op
23
+ const value = op.value;
24
+ if (Array.isArray(value) && value.length >= 2) {
25
+ return value[1]; // Operator is in the middle
26
+ }
27
+ return '';
28
+ }
29
+ // Map 'operands' property
30
+ if (prop === 'operands') {
31
+ const value = op.value;
32
+ if (Array.isArray(value)) {
33
+ // Extract left and right operands, skip operator
34
+ const operands = [];
35
+ for (let i = 0; i < value.length; i++) {
36
+ const item = value[i];
37
+ if (item instanceof Node) {
38
+ operands.push(item);
39
+ }
40
+ else if (typeof item === 'string' && i === 1) {
41
+ // Skip operator
42
+ continue;
43
+ }
44
+ }
45
+ return operands.map(o => toLessNode(o, { cache }));
46
+ }
47
+ return [];
48
+ }
49
+ // Map 'accept' method for visitor traversal
50
+ if (prop === 'accept') {
51
+ return function (visitor) {
52
+ const lessOp = transformOperationToLess(op, cache);
53
+ const result = visitor.visit(lessOp);
54
+ if (result !== lessOp) {
55
+ return fromLessNode(result, { cache });
56
+ }
57
+ return op;
58
+ };
59
+ }
60
+ return undefined;
61
+ });
62
+ }
63
+ //# sourceMappingURL=operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/nodes/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAwB,EACxB,KAAyB;IAEzB,OAAO,eAAe,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5D,MAAM,EAAE,GAAG,MAAmB,CAAC;QAE/B,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,+CAA+C;YAC/C,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;YAC/C,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,0BAA0B;QAC1B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;YACvB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,iDAAiD;gBACjD,MAAM,QAAQ,GAAW,EAAE,CAAC;gBAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;wBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;yBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC/C,gBAAgB;wBAChB,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,MAAM,GAAG,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Paren } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Paren to a Less-compatible Paren
5
+ */
6
+ export declare function transformParenToLess(jessParen: Paren, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,42 @@
1
+ import { Node } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { toLessNode } from '../transform/to-less.js';
4
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
5
+ import { fromLessNode } from '../transform/from-less.js';
6
+ /**
7
+ * Transform a Jess Paren to a Less-compatible Paren
8
+ */
9
+ export function transformParenToLess(jessParen, cache) {
10
+ return createLessProxy(jessParen, cache, (prop, target) => {
11
+ const paren = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(paren.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'value' property
21
+ if (prop === 'value') {
22
+ const value = paren.value;
23
+ if (value instanceof Node) {
24
+ return toLessNode(value, { cache });
25
+ }
26
+ return value;
27
+ }
28
+ // Map 'accept' method for visitor traversal
29
+ if (prop === 'accept') {
30
+ return function (visitor) {
31
+ const lessParen = transformParenToLess(paren, cache);
32
+ const result = visitor.visit(lessParen);
33
+ if (result !== lessParen) {
34
+ return fromLessNode(result, { cache });
35
+ }
36
+ return paren;
37
+ };
38
+ }
39
+ return undefined;
40
+ });
41
+ }
42
+ //# sourceMappingURL=paren.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paren.js","sourceRoot":"","sources":["../../src/nodes/paren.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,IAAI,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAgB,EAChB,KAAyB;IAEzB,OAAO,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,MAAe,CAAC;QAE9B,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC1B,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACxC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Quoted } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Quoted to a Less-compatible Quoted
5
+ */
6
+ export declare function transformQuotedToLess(jessQuoted: Quoted, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,57 @@
1
+ import { Any, Interpolated } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
4
+ import { fromLessNode } from '../transform/from-less.js';
5
+ /**
6
+ * Transform a Jess Quoted to a Less-compatible Quoted
7
+ */
8
+ export function transformQuotedToLess(jessQuoted, cache) {
9
+ return createLessProxy(jessQuoted, cache, (prop, target) => {
10
+ const quoted = target;
11
+ // Map 'type' property
12
+ if (prop === 'type') {
13
+ return mapJessTypeToLessType(quoted.type);
14
+ }
15
+ // Map 'typeIndex'
16
+ if (prop === 'typeIndex') {
17
+ return undefined;
18
+ }
19
+ // Map 'value' property
20
+ if (prop === 'value') {
21
+ const value = quoted.value;
22
+ if (typeof value === 'string') {
23
+ return value;
24
+ }
25
+ if (value instanceof Any) {
26
+ return value.value;
27
+ }
28
+ if (value instanceof Interpolated) {
29
+ // Convert interpolated to string representation
30
+ // Less handles interpolation differently, so we convert to string
31
+ return String(value.value);
32
+ }
33
+ return String(value);
34
+ }
35
+ // Map 'quote' property
36
+ if (prop === 'quote') {
37
+ return quoted.options?.quote || '"';
38
+ }
39
+ // Map 'escaped' property
40
+ if (prop === 'escaped') {
41
+ return quoted.options?.escaped === true;
42
+ }
43
+ // Map 'accept' method for visitor traversal
44
+ if (prop === 'accept') {
45
+ return function (visitor) {
46
+ const lessQuoted = transformQuotedToLess(quoted, cache);
47
+ const result = visitor.visit(lessQuoted);
48
+ if (result !== lessQuoted) {
49
+ return fromLessNode(result, { cache });
50
+ }
51
+ return quoted;
52
+ };
53
+ }
54
+ return undefined;
55
+ });
56
+ }
57
+ //# sourceMappingURL=quoted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quoted.js","sourceRoot":"","sources":["../../src/nodes/quoted.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,KAAyB;IAEzB,OAAO,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAgB,CAAC;QAEhC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC,KAAK,CAAC;YACrB,CAAC;YACD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,gDAAgD;gBAChD,kEAAkE;gBAClE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;QACtC,CAAC;QAED,yBAAyB;QACzB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;QAC1C,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,UAAU,GAAG,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;oBAC1B,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Reference } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Reference to a Less-compatible Variable, Property, or VariableCall
5
+ *
6
+ * Jess has unified Reference with options.type
7
+ * Less has separate Variable, Property, and VariableCall nodes
8
+ */
9
+ export declare function transformReferenceToLess(jessReference: Reference, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,80 @@
1
+ import { createLessProxy } from '../transform/proxy.js';
2
+ /**
3
+ * Transform a Jess Reference to a Less-compatible Variable, Property, or VariableCall
4
+ *
5
+ * Jess has unified Reference with options.type
6
+ * Less has separate Variable, Property, and VariableCall nodes
7
+ */
8
+ export function transformReferenceToLess(jessReference, cache) {
9
+ const refType = jessReference.options?.type || 'variable';
10
+ // Determine Less node type based on Jess reference type
11
+ let lessType;
12
+ if (refType === 'property') {
13
+ lessType = 'Property';
14
+ }
15
+ else if (refType === 'function' || refType === 'mixin') {
16
+ lessType = 'VariableCall';
17
+ }
18
+ else {
19
+ lessType = 'Variable'; // Default to Variable
20
+ }
21
+ return createLessProxy(jessReference, cache, (prop, target) => {
22
+ const ref = target;
23
+ // Map 'type' property
24
+ if (prop === 'type') {
25
+ return lessType;
26
+ }
27
+ // Map 'typeIndex'
28
+ if (prop === 'typeIndex') {
29
+ return undefined;
30
+ }
31
+ // Map 'name' property (for Variable and Property)
32
+ if (prop === 'name') {
33
+ // Less Variable/Property expects name as string
34
+ // Jess Reference has value.key which might be string, number, or Node
35
+ const key = ref.value.key;
36
+ if (typeof key === 'string') {
37
+ // Less variables include the leading "@"
38
+ if (lessType === 'Variable' && !key.startsWith('@')) {
39
+ return `@${key}`;
40
+ }
41
+ return key;
42
+ }
43
+ if (typeof key === 'number') {
44
+ return String(key);
45
+ }
46
+ // For other types, convert to string representation
47
+ return String(key);
48
+ }
49
+ // Map 'value' property (for VariableCall - it's the call expression)
50
+ if (prop === 'value' && lessType === 'VariableCall') {
51
+ // VariableCall has value as the call expression
52
+ // This is complex - for now, return the reference itself
53
+ // Less VariableCall structure might need special handling
54
+ return ref;
55
+ }
56
+ // Map 'index' property
57
+ if (prop === 'index') {
58
+ const loc = ref.location;
59
+ if (Array.isArray(loc) || !loc) {
60
+ return undefined;
61
+ }
62
+ return loc.index;
63
+ }
64
+ // Map 'currentFileInfo' property
65
+ if (prop === 'currentFileInfo') {
66
+ return ref.location || {};
67
+ }
68
+ // Map 'accept' method for visitor traversal
69
+ // Less's Visitor.visit() calls node.accept(this) to traverse children
70
+ // Reference nodes typically don't have children to traverse
71
+ if (prop === 'accept') {
72
+ return function (visitor) {
73
+ // Reference nodes don't have children to traverse
74
+ // The visitor.visit() was already called by our plugin wrapper
75
+ };
76
+ }
77
+ return undefined;
78
+ });
79
+ }
80
+ //# sourceMappingURL=reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/nodes/reference.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAwB,EACxB,KAAyB;IAEzB,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,IAAI,UAAU,CAAC;IAE1D,wDAAwD;IACxD,IAAI,QAAgB,CAAC;IACrB,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,QAAQ,GAAG,UAAU,CAAC;IACxB,CAAC;SAAM,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACzD,QAAQ,GAAG,cAAc,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,UAAU,CAAC,CAAC,sBAAsB;IAC/C,CAAC;IAED,OAAO,eAAe,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAmB,CAAC;QAEhC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,kDAAkD;QAClD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,gDAAgD;YAChD,sEAAsE;YACtE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,yCAAyC;gBACzC,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,OAAO,IAAI,GAAG,EAAE,CAAC;gBACnB,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;YACD,oDAAoD;YACpD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,KAAK,OAAO,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;YACpD,gDAAgD;YAChD,yDAAyD;YACzD,0DAA0D;YAC1D,OAAO,GAAG,CAAC;QACb,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;YACzB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAQ,GAAW,CAAC,KAAK,CAAC;QAC5B,CAAC;QAED,iCAAiC;QACjC,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC5B,CAAC;QAED,4CAA4C;QAC5C,sEAAsE;QACtE,4DAA4D;QAC5D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,kDAAkD;gBAClD,+DAA+D;YACjE,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Ruleset } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Ruleset to a Less-compatible Ruleset
5
+ */
6
+ export declare function transformRulesetToLess(jessRuleset: Ruleset, cache?: WeakMap<any, any>): LessNode;