@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.
- package/LICENSE +21 -0
- package/README.md +139 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +10 -0
- package/lib/index.js.map +1 -0
- package/lib/less-compat-structures.d.ts +108 -0
- package/lib/less-compat-structures.js +519 -0
- package/lib/less-compat-structures.js.map +1 -0
- package/lib/nodes/at-rule.d.ts +6 -0
- package/lib/nodes/at-rule.js +72 -0
- package/lib/nodes/at-rule.js.map +1 -0
- package/lib/nodes/attribute-selector.d.ts +6 -0
- package/lib/nodes/attribute-selector.js +54 -0
- package/lib/nodes/attribute-selector.js.map +1 -0
- package/lib/nodes/call.d.ts +6 -0
- package/lib/nodes/call.js +83 -0
- package/lib/nodes/call.js.map +1 -0
- package/lib/nodes/color.d.ts +6 -0
- package/lib/nodes/color.js +57 -0
- package/lib/nodes/color.js.map +1 -0
- package/lib/nodes/combinator.d.ts +6 -0
- package/lib/nodes/combinator.js +34 -0
- package/lib/nodes/combinator.js.map +1 -0
- package/lib/nodes/comment.d.ts +6 -0
- package/lib/nodes/comment.js +41 -0
- package/lib/nodes/comment.js.map +1 -0
- package/lib/nodes/condition.d.ts +6 -0
- package/lib/nodes/condition.js +60 -0
- package/lib/nodes/condition.js.map +1 -0
- package/lib/nodes/declaration.d.ts +6 -0
- package/lib/nodes/declaration.js +81 -0
- package/lib/nodes/declaration.js.map +1 -0
- package/lib/nodes/dimension.d.ts +6 -0
- package/lib/nodes/dimension.js +47 -0
- package/lib/nodes/dimension.js.map +1 -0
- package/lib/nodes/expression.d.ts +6 -0
- package/lib/nodes/expression.js +44 -0
- package/lib/nodes/expression.js.map +1 -0
- package/lib/nodes/extend.d.ts +6 -0
- package/lib/nodes/extend.js +57 -0
- package/lib/nodes/extend.js.map +1 -0
- package/lib/nodes/import.d.ts +6 -0
- package/lib/nodes/import.js +63 -0
- package/lib/nodes/import.js.map +1 -0
- package/lib/nodes/index.d.ts +45 -0
- package/lib/nodes/index.js +308 -0
- package/lib/nodes/index.js.map +1 -0
- package/lib/nodes/keyword.d.ts +6 -0
- package/lib/nodes/keyword.js +36 -0
- package/lib/nodes/keyword.js.map +1 -0
- package/lib/nodes/list.d.ts +6 -0
- package/lib/nodes/list.js +150 -0
- package/lib/nodes/list.js.map +1 -0
- package/lib/nodes/mixin.d.ts +6 -0
- package/lib/nodes/mixin.js +62 -0
- package/lib/nodes/mixin.js.map +1 -0
- package/lib/nodes/negative.d.ts +6 -0
- package/lib/nodes/negative.js +42 -0
- package/lib/nodes/negative.js.map +1 -0
- package/lib/nodes/operation.d.ts +6 -0
- package/lib/nodes/operation.js +63 -0
- package/lib/nodes/operation.js.map +1 -0
- package/lib/nodes/paren.d.ts +6 -0
- package/lib/nodes/paren.js +42 -0
- package/lib/nodes/paren.js.map +1 -0
- package/lib/nodes/quoted.d.ts +6 -0
- package/lib/nodes/quoted.js +57 -0
- package/lib/nodes/quoted.js.map +1 -0
- package/lib/nodes/reference.d.ts +9 -0
- package/lib/nodes/reference.js +80 -0
- package/lib/nodes/reference.js.map +1 -0
- package/lib/nodes/ruleset.d.ts +6 -0
- package/lib/nodes/ruleset.js +108 -0
- package/lib/nodes/ruleset.js.map +1 -0
- package/lib/nodes/selector.d.ts +8 -0
- package/lib/nodes/selector.js +226 -0
- package/lib/nodes/selector.js.map +1 -0
- package/lib/nodes/sequence.d.ts +9 -0
- package/lib/nodes/sequence.js +75 -0
- package/lib/nodes/sequence.js.map +1 -0
- package/lib/nodes/url.d.ts +6 -0
- package/lib/nodes/url.js +42 -0
- package/lib/nodes/url.js.map +1 -0
- package/lib/nodes/var-declaration.d.ts +6 -0
- package/lib/nodes/var-declaration.js +60 -0
- package/lib/nodes/var-declaration.js.map +1 -0
- package/lib/plugin-utils.d.ts +20 -0
- package/lib/plugin-utils.js +100 -0
- package/lib/plugin-utils.js.map +1 -0
- package/lib/plugin.d.ts +92 -0
- package/lib/plugin.js +1027 -0
- package/lib/plugin.js.map +1 -0
- package/lib/transform/from-less.d.ts +30 -0
- package/lib/transform/from-less.js +170 -0
- package/lib/transform/from-less.js.map +1 -0
- package/lib/transform/index.d.ts +7 -0
- package/lib/transform/index.js +8 -0
- package/lib/transform/index.js.map +1 -0
- package/lib/transform/proxy.d.ts +32 -0
- package/lib/transform/proxy.js +138 -0
- package/lib/transform/proxy.js.map +1 -0
- package/lib/transform/to-less.d.ts +17 -0
- package/lib/transform/to-less.js +128 -0
- package/lib/transform/to-less.js.map +1 -0
- package/lib/transform/type-map.d.ts +27 -0
- package/lib/transform/type-map.js +105 -0
- package/lib/transform/type-map.js.map +1 -0
- package/lib/types.d.ts +33 -0
- package/lib/types.js +5 -0
- package/lib/types.js.map +1 -0
- 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,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,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,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":"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"}
|
|
@@ -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"}
|