@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,54 @@
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 AttributeSelector to a Less-compatible Attribute
8
+ */
9
+ export function transformAttributeSelectorToLess(jessAttr, cache) {
10
+ return createLessProxy(jessAttr, cache, (prop, target) => {
11
+ const attr = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(attr.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'key' property (Less uses 'key', Jess uses 'name')
21
+ if (prop === 'key') {
22
+ const name = attr.value.name;
23
+ if (name instanceof Node) {
24
+ return toLessNode(name, { cache });
25
+ }
26
+ return name;
27
+ }
28
+ // Map 'op' property (operator)
29
+ if (prop === 'op') {
30
+ return attr.value.op || '';
31
+ }
32
+ // Map 'value' property
33
+ if (prop === 'value') {
34
+ const value = attr.value.value;
35
+ if (value instanceof Node) {
36
+ return toLessNode(value, { cache });
37
+ }
38
+ return value;
39
+ }
40
+ // Map 'accept' method for visitor traversal
41
+ if (prop === 'accept') {
42
+ return function (visitor) {
43
+ const lessAttr = transformAttributeSelectorToLess(attr, cache);
44
+ const result = visitor.visit(lessAttr);
45
+ if (result !== lessAttr) {
46
+ return fromLessNode(result, { cache });
47
+ }
48
+ return attr;
49
+ };
50
+ }
51
+ return undefined;
52
+ });
53
+ }
54
+ //# sourceMappingURL=attribute-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-selector.js","sourceRoot":"","sources":["../../src/nodes/attribute-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,IAAI,EAAE,MAAM,eAAe,CAAC;AACxD,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,gCAAgC,CAC9C,QAA2B,EAC3B,KAAyB;IAEzB,OAAO,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QACvD,MAAM,IAAI,GAAG,MAA2B,CAAC;QAEzC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,yDAAyD;QACzD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAC7B,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;gBACzB,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,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,QAAQ,GAAG,gCAAgC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Call } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Call to a Less-compatible Call or MixinCall
5
+ */
6
+ export declare function transformCallToLess(jessCall: Call, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,83 @@
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 Call to a Less-compatible Call or MixinCall
7
+ */
8
+ export function transformCallToLess(jessCall, cache) {
9
+ return createLessProxy(jessCall, cache, (prop, target) => {
10
+ const call = target;
11
+ // Map 'type' property
12
+ // Less distinguishes between Call and MixinCall, but Jess uses Call for both
13
+ // We'll default to Call, but this could be enhanced to detect mixin calls
14
+ if (prop === 'type') {
15
+ return mapJessTypeToLessType(call.type);
16
+ }
17
+ // Map 'typeIndex'
18
+ if (prop === 'typeIndex') {
19
+ return undefined;
20
+ }
21
+ // Map 'name' property
22
+ if (prop === 'name') {
23
+ return call.value.name;
24
+ }
25
+ // Map 'args' property
26
+ if (prop === 'args') {
27
+ const args = call.value.args;
28
+ if (args) {
29
+ return args.value.map((arg) => {
30
+ if (arg instanceof Node) {
31
+ return toLessNode(arg, { cache });
32
+ }
33
+ return arg;
34
+ });
35
+ }
36
+ return [];
37
+ }
38
+ // Map 'index' property
39
+ if (prop === 'index') {
40
+ const loc = call.location;
41
+ if (Array.isArray(loc) || !loc) {
42
+ return undefined;
43
+ }
44
+ return loc.index;
45
+ }
46
+ // Map 'accept' method for visitor traversal
47
+ if (prop === 'accept') {
48
+ return function (visitor) {
49
+ // Less Call's accept() should traverse args if they exist
50
+ // But we don't call visitor.visit() here to avoid infinite loops
51
+ // The visitor's visit() method will handle traversal
52
+ // If args exist, we should traverse them using visitArray
53
+ const args = call.value.args;
54
+ if (args && args.value.length > 0) {
55
+ const lessArgs = args.value
56
+ .map((arg) => {
57
+ if (arg instanceof Node) {
58
+ return toLessNode(arg, { cache });
59
+ }
60
+ return arg;
61
+ })
62
+ .filter((arg) => arg !== undefined && arg !== null); // Filter out undefined/null
63
+ if (lessArgs.length > 0) {
64
+ if (visitor.visitArray) {
65
+ visitor.visitArray(lessArgs);
66
+ }
67
+ else {
68
+ // Fallback: call accept on each arg if visitArray not available
69
+ for (const lessArg of lessArgs) {
70
+ if (lessArg && lessArg.accept) {
71
+ lessArg.accept(visitor);
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ return call;
78
+ };
79
+ }
80
+ return undefined;
81
+ });
82
+ }
83
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../src/nodes/call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Color } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Color to a Less-compatible Color
5
+ */
6
+ export declare function transformColorToLess(jessColor: Color, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,57 @@
1
+ import { createLessProxy } from '../transform/proxy.js';
2
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
3
+ /**
4
+ * Transform a Jess Color to a Less-compatible Color
5
+ */
6
+ export function transformColorToLess(jessColor, cache) {
7
+ return createLessProxy(jessColor, cache, (prop, target) => {
8
+ const color = target;
9
+ // Map 'type' property
10
+ if (prop === 'type') {
11
+ return mapJessTypeToLessType(color.type);
12
+ }
13
+ // Map 'typeIndex'
14
+ if (prop === 'typeIndex') {
15
+ return undefined;
16
+ }
17
+ // Map 'rgb' property
18
+ if (prop === 'rgb') {
19
+ return color.value.rgb || [0, 0, 0];
20
+ }
21
+ // Map 'alpha' property
22
+ if (prop === 'alpha') {
23
+ return color._alpha;
24
+ }
25
+ // Map 'value' property (Less expects string representation)
26
+ if (prop === 'value') {
27
+ // Convert color to string representation
28
+ // Less uses format like '#rrggbb' or 'rgba(r, g, b, a)'
29
+ const rgb = color.value.rgb;
30
+ const alpha = color._alpha;
31
+ if (rgb && alpha !== undefined && alpha < 1) {
32
+ return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${alpha})`;
33
+ }
34
+ if (rgb) {
35
+ // Convert to hex
36
+ const hex = rgb.map((v) => {
37
+ const numericValue = Array.isArray(v) ? v[0] : v;
38
+ const h = Math.round(numericValue).toString(16).padStart(2, '0');
39
+ return h;
40
+ }).join('');
41
+ return `#${hex}`;
42
+ }
43
+ return '';
44
+ }
45
+ // Map 'accept' method for visitor traversal
46
+ // Less's Visitor.visit() calls node.accept(this) to traverse children
47
+ // Color nodes typically don't have children to traverse, so this is a no-op
48
+ if (prop === 'accept') {
49
+ return function (visitor) {
50
+ // Color nodes don't have children to traverse
51
+ // The visitor.visit() was already called by our plugin wrapper
52
+ };
53
+ }
54
+ return undefined;
55
+ });
56
+ }
57
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/nodes/color.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE;;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,qBAAqB;QACrB,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,4DAA4D;QAC5D,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,yCAAyC;YACzC,wDAAwD;YACxD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;YAC3B,IAAI,GAAG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC5C,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;YAC3D,CAAC;YACD,IAAI,GAAG,EAAE,CAAC;gBACR,iBAAiB;gBACjB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACxB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACjE,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACZ,OAAO,IAAI,GAAG,EAAE,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,4CAA4C;QAC5C,sEAAsE;QACtE,4EAA4E;QAC5E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,8CAA8C;gBAC9C,+DAA+D;YACjE,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Combinator } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Combinator to a Less-compatible Combinator
5
+ */
6
+ export declare function transformCombinatorToLess(jessCombinator: Combinator, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,34 @@
1
+ import { createLessProxy } from '../transform/proxy.js';
2
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
3
+ /**
4
+ * Transform a Jess Combinator to a Less-compatible Combinator
5
+ */
6
+ export function transformCombinatorToLess(jessCombinator, cache) {
7
+ return createLessProxy(jessCombinator, cache, (prop, target) => {
8
+ const combinator = target;
9
+ // Map 'type' property
10
+ if (prop === 'type') {
11
+ return mapJessTypeToLessType(combinator.type);
12
+ }
13
+ // Map 'typeIndex'
14
+ if (prop === 'typeIndex') {
15
+ return undefined;
16
+ }
17
+ // Map 'value' property
18
+ if (prop === 'value') {
19
+ return combinator.value;
20
+ }
21
+ // Map 'accept' method for visitor traversal
22
+ if (prop === 'accept') {
23
+ return function (visitor) {
24
+ // Less Combinator has no children, so accept() should just return the combinator
25
+ // The visitor's visit() method will be called by the visitor itself
26
+ // We don't need to call visitor.visit() here - that would create a loop
27
+ // if the visitor's visit() method calls accept() again
28
+ return combinator;
29
+ };
30
+ }
31
+ return undefined;
32
+ });
33
+ }
34
+ //# sourceMappingURL=combinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combinator.js","sourceRoot":"","sources":["../../src/nodes/combinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,cAA0B,EAC1B,KAAyB;IAEzB,OAAO,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,UAAU,GAAG,MAAoB,CAAC;QAExC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChD,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,OAAO,UAAU,CAAC,KAAK,CAAC;QAC1B,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,iFAAiF;gBACjF,oEAAoE;gBACpE,wEAAwE;gBACxE,uDAAuD;gBACvD,OAAO,UAAU,CAAC;YACpB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Comment } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Comment to a Less-compatible Comment
5
+ */
6
+ export declare function transformCommentToLess(jessComment: Comment, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,41 @@
1
+ import { createLessProxy } from '../transform/proxy.js';
2
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
3
+ import { fromLessNode } from '../transform/from-less.js';
4
+ /**
5
+ * Transform a Jess Comment to a Less-compatible Comment
6
+ */
7
+ export function transformCommentToLess(jessComment, cache) {
8
+ return createLessProxy(jessComment, cache, (prop, target) => {
9
+ const comment = target;
10
+ // Map 'type' property
11
+ if (prop === 'type') {
12
+ return mapJessTypeToLessType(comment.type);
13
+ }
14
+ // Map 'typeIndex'
15
+ if (prop === 'typeIndex') {
16
+ return undefined;
17
+ }
18
+ // Map 'value' property
19
+ if (prop === 'value') {
20
+ return comment.value;
21
+ }
22
+ // Map 'silent' property (Less uses this for /* */ vs // comments)
23
+ if (prop === 'silent') {
24
+ // Jess doesn't distinguish, default to false (block comment)
25
+ return false;
26
+ }
27
+ // Map 'accept' method for visitor traversal
28
+ if (prop === 'accept') {
29
+ return function (visitor) {
30
+ const lessComment = transformCommentToLess(comment, cache);
31
+ const result = visitor.visit(lessComment);
32
+ if (result !== lessComment) {
33
+ return fromLessNode(result, { cache });
34
+ }
35
+ return comment;
36
+ };
37
+ }
38
+ return undefined;
39
+ });
40
+ }
41
+ //# sourceMappingURL=comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/nodes/comment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAoB,EACpB,KAAyB;IAEzB,OAAO,eAAe,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC1D,MAAM,OAAO,GAAG,MAAiB,CAAC;QAElC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,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,OAAO,OAAO,CAAC,KAAK,CAAC;QACvB,CAAC;QAED,kEAAkE;QAClE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,6DAA6D;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC3B,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Condition } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Condition to a Less-compatible Condition
5
+ */
6
+ export declare function transformConditionToLess(jessCondition: Condition, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,60 @@
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 Condition to a Less-compatible Condition
8
+ */
9
+ export function transformConditionToLess(jessCondition, cache) {
10
+ return createLessProxy(jessCondition, cache, (prop, target) => {
11
+ const condition = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(condition.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'op' property (operator)
21
+ // Condition.value is a tuple: [left, op?, right?]
22
+ if (prop === 'op') {
23
+ const [, op] = condition.value;
24
+ return op || '';
25
+ }
26
+ // Map 'lvalue' property (left value)
27
+ if (prop === 'lvalue') {
28
+ const [left] = condition.value;
29
+ if (left instanceof Node) {
30
+ return toLessNode(left, { cache });
31
+ }
32
+ return left;
33
+ }
34
+ // Map 'rvalue' property (right value)
35
+ if (prop === 'rvalue') {
36
+ const [, , right] = condition.value;
37
+ if (right instanceof Node) {
38
+ return toLessNode(right, { cache });
39
+ }
40
+ return right;
41
+ }
42
+ // Map 'negate' property
43
+ if (prop === 'negate') {
44
+ return condition.options?.negate === true;
45
+ }
46
+ // Map 'accept' method for visitor traversal
47
+ if (prop === 'accept') {
48
+ return function (visitor) {
49
+ const lessCondition = transformConditionToLess(condition, cache);
50
+ const result = visitor.visit(lessCondition);
51
+ if (result !== lessCondition) {
52
+ return fromLessNode(result, { cache });
53
+ }
54
+ return condition;
55
+ };
56
+ }
57
+ return undefined;
58
+ });
59
+ }
60
+ //# sourceMappingURL=condition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/nodes/condition.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,SAAS,GAAG,MAAmB,CAAC;QAEtC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+BAA+B;QAC/B,kDAAkD;QAClD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,CAAC;QAED,qCAAqC;QACrC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;gBACzB,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,CAAC,EAAE,AAAD,EAAG,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;YACpC,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,wBAAwB;QACxB,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAC5C,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,aAAa,GAAG,wBAAwB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACjE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC5C,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;oBAC7B,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Declaration } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Declaration to a Less-compatible Declaration
5
+ */
6
+ export declare function transformDeclarationToLess(jessDeclaration: Declaration, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,81 @@
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 Declaration to a Less-compatible Declaration
7
+ */
8
+ export function transformDeclarationToLess(jessDeclaration, cache) {
9
+ return createLessProxy(jessDeclaration, cache, (prop, target) => {
10
+ const decl = target;
11
+ // Map 'type' property
12
+ if (prop === 'type') {
13
+ return mapJessTypeToLessType(decl.type);
14
+ }
15
+ // typeIndex is handled automatically by the base proxy handler
16
+ // Map 'name' property
17
+ if (prop === 'name') {
18
+ return decl.value.name;
19
+ }
20
+ // Map 'value' property
21
+ if (prop === 'value') {
22
+ const value = decl.value.value;
23
+ if (value instanceof Node) {
24
+ return toLessNode(value, { cache });
25
+ }
26
+ return value;
27
+ }
28
+ // Map 'important' property
29
+ if (prop === 'important') {
30
+ return decl.value.important || false;
31
+ }
32
+ // Map 'variable' property (from options.assign)
33
+ // Jess uses AssignmentType enum, Less uses boolean
34
+ if (prop === 'variable') {
35
+ return decl.options?.assign !== undefined;
36
+ }
37
+ // Map 'merge' property (Less uses this for merging declarations)
38
+ if (prop === 'merge') {
39
+ return false; // Default, can be set by Less visitors
40
+ }
41
+ // Map 'accept' method for visitor traversal
42
+ // Less's Visitor.visit() calls node.accept(this) to traverse children
43
+ // Declaration's accept should ONLY traverse its value, NOT call visitor methods on itself
44
+ // The visitor's visit() method already called visitDeclaration() or visitRule() before calling accept()
45
+ if (prop === 'accept') {
46
+ return function (visitor) {
47
+ // Declaration's accept only traverses its value (children)
48
+ // Base Node.accept() pattern: visitor.visit(this.value)
49
+ const value = decl.value.value;
50
+ if (value instanceof Node) {
51
+ const lessValue = toLessNode(value, { cache });
52
+ if (lessValue && lessValue.accept) {
53
+ lessValue.accept(visitor);
54
+ }
55
+ else if (lessValue && visitor.visitArray) {
56
+ visitor.visitArray([lessValue]);
57
+ }
58
+ else if (lessValue && visitor.visit) {
59
+ visitor.visit(lessValue);
60
+ }
61
+ }
62
+ else if (value && Array.isArray(value)) {
63
+ // If value is an array, use visitArray
64
+ const lessValues = value.map((v) => {
65
+ if (v instanceof Node) {
66
+ return toLessNode(v, { cache });
67
+ }
68
+ return v;
69
+ });
70
+ if (visitor.visitArray) {
71
+ visitor.visitArray(lessValues);
72
+ }
73
+ }
74
+ // Return the declaration (accept doesn't return a replacement node)
75
+ return decl;
76
+ };
77
+ }
78
+ return undefined;
79
+ });
80
+ }
81
+ //# sourceMappingURL=declaration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration.js","sourceRoot":"","sources":["../../src/nodes/declaration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,eAA4B,EAC5B,KAAyB;IAEzB,OAAO,eAAe,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,MAAqB,CAAC;QAEnC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,+DAA+D;QAE/D,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACzB,CAAC;QAED,uBAAuB;QACvB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC/B,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,2BAA2B;QAC3B,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC;QACvC,CAAC;QAED,gDAAgD;QAChD,mDAAmD;QACnD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC;QAC5C,CAAC;QAED,iEAAiE;QACjE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC,CAAC,uCAAuC;QACvD,CAAC;QAED,4CAA4C;QAC5C,sEAAsE;QACtE,0FAA0F;QAC1F,wGAAwG;QACxG,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,2DAA2D;gBAC3D,wDAAwD;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC/B,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;oBAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC/C,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;wBAClC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC5B,CAAC;yBAAM,IAAI,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;wBAC3C,OAAO,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBAClC,CAAC;yBAAM,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBACtC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,uCAAuC;oBACvC,MAAM,UAAU,GAAI,KAAe,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;wBACjD,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;4BACtB,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;wBAClC,CAAC;wBACD,OAAO,CAAC,CAAC;oBACX,CAAC,CAAC,CAAC;oBACH,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;wBACvB,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;gBACD,oEAAoE;gBACpE,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Dimension, Num } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Dimension or Num to a Less-compatible Dimension
5
+ */
6
+ export declare function transformDimensionToLess(jessDimension: Dimension | Num, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,47 @@
1
+ import { Num } from '@jesscss/core';
2
+ import { createLessProxy } from '../transform/proxy.js';
3
+ import { mapJessTypeToLessType } from '../transform/type-map.js';
4
+ /**
5
+ * Transform a Jess Dimension or Num to a Less-compatible Dimension
6
+ */
7
+ export function transformDimensionToLess(jessDimension, cache) {
8
+ return createLessProxy(jessDimension, cache, (prop, target) => {
9
+ const dim = target;
10
+ // Map 'type' property
11
+ if (prop === 'type') {
12
+ return mapJessTypeToLessType(dim.type);
13
+ }
14
+ // Map 'typeIndex'
15
+ if (prop === 'typeIndex') {
16
+ return undefined;
17
+ }
18
+ // Map 'value' property
19
+ if (prop === 'value') {
20
+ if (dim instanceof Num) {
21
+ return dim.value;
22
+ }
23
+ return dim.value.number;
24
+ }
25
+ // Map 'unit' property
26
+ if (prop === 'unit') {
27
+ if (dim instanceof Num) {
28
+ // Num has no unit, return empty string or undefined
29
+ return '';
30
+ }
31
+ // Dimension has unit as string, Less expects Unit node
32
+ // For now, return the string and let Less handle conversion
33
+ return dim.value.unit || '';
34
+ }
35
+ // Map 'accept' method for visitor traversal
36
+ if (prop === 'accept') {
37
+ return function (visitor) {
38
+ // Less Dimension has no children, so accept() should just return the dimension
39
+ // The visitor's visit() method will handle traversal
40
+ // We don't call visitor.visit() here to avoid infinite loops
41
+ return dim;
42
+ };
43
+ }
44
+ return undefined;
45
+ });
46
+ }
47
+ //# sourceMappingURL=dimension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dimension.js","sourceRoot":"","sources":["../../src/nodes/dimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,GAAG,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA8B,EAC9B,KAAyB;IAEzB,OAAO,eAAe,CAAC,aAAa,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC5D,MAAM,GAAG,GAAG,MAAyB,CAAC;QAEtC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,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,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;gBACvB,OAAO,GAAG,CAAC,KAAK,CAAC;YACnB,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1B,CAAC;QAED,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,GAAG,YAAY,GAAG,EAAE,CAAC;gBACvB,oDAAoD;gBACpD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,uDAAuD;YACvD,4DAA4D;YAC5D,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,+EAA+E;gBAC/E,qDAAqD;gBACrD,6DAA6D;gBAC7D,OAAO,GAAG,CAAC;YACb,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Expression } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Expression to a Less-compatible Expression
5
+ */
6
+ export declare function transformExpressionToLess(jessExpression: Expression, cache?: WeakMap<any, any>): LessNode;
@@ -0,0 +1,44 @@
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 Expression to a Less-compatible Expression
8
+ */
9
+ export function transformExpressionToLess(jessExpression, cache) {
10
+ return createLessProxy(jessExpression, cache, (prop, target) => {
11
+ const expr = target;
12
+ // Map 'type' property
13
+ if (prop === 'type') {
14
+ return mapJessTypeToLessType(expr.type);
15
+ }
16
+ // Map 'typeIndex'
17
+ if (prop === 'typeIndex') {
18
+ return undefined;
19
+ }
20
+ // Map 'value' property (Less expects array)
21
+ if (prop === 'value') {
22
+ const value = expr.value;
23
+ if (value instanceof Node) {
24
+ // Single node - wrap in array
25
+ return [toLessNode(value, { cache })];
26
+ }
27
+ // Expression.value is always a Node, so this shouldn't happen
28
+ return [value];
29
+ }
30
+ // Map 'accept' method for visitor traversal
31
+ if (prop === 'accept') {
32
+ return function (visitor) {
33
+ const lessExpr = transformExpressionToLess(expr, cache);
34
+ const result = visitor.visit(lessExpr);
35
+ if (result !== lessExpr) {
36
+ return fromLessNode(result, { cache });
37
+ }
38
+ return expr;
39
+ };
40
+ }
41
+ return undefined;
42
+ });
43
+ }
44
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/nodes/expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,IAAI,EAAE,MAAM,eAAe,CAAC;AACjD,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,yBAAyB,CACvC,cAA0B,EAC1B,KAAyB;IAEzB,OAAO,eAAe,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,MAAoB,CAAC;QAElC,sBAAsB;QACtB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gBAC1B,8BAA8B;gBAC9B,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,CAAC;YACD,8DAA8D;YAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,4CAA4C;QAC5C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,UAAS,OAAY;gBAC1B,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxB,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Extend } from '@jesscss/core';
2
+ import type { LessNode } from '../types.js';
3
+ /**
4
+ * Transform a Jess Extend to a Less-compatible Extend
5
+ */
6
+ export declare function transformExtendToLess(jessExtend: Extend, cache?: WeakMap<any, any>): LessNode;