@jesscss/plugin-less-compat 2.0.0-alpha.5 → 2.0.0-alpha.7
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/README.md +3 -2
- package/lib/index.cjs +844 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +800 -9
- package/lib/less-adapter.cjs +216 -0
- package/lib/less-adapter.js +181 -0
- package/lib/less-compat-structures.cjs +378 -0
- package/lib/less-compat-structures.d.ts +2 -2
- package/lib/less-compat-structures.js +367 -512
- package/lib/nodes/at-rule.d.ts +2 -6
- package/lib/nodes/attribute-selector.d.ts +2 -6
- package/lib/nodes/call.d.ts +2 -6
- package/lib/nodes/color.d.ts +1 -5
- package/lib/nodes/combinator.d.ts +1 -5
- package/lib/nodes/comment.d.ts +1 -5
- package/lib/nodes/condition.d.ts +2 -6
- package/lib/nodes/declaration.d.ts +2 -6
- package/lib/nodes/dimension.d.ts +1 -5
- package/lib/nodes/expression.d.ts +2 -6
- package/lib/nodes/extend.d.ts +1 -5
- package/lib/nodes/import.d.ts +2 -6
- package/lib/nodes/keyword.d.ts +1 -5
- package/lib/nodes/list.d.ts +2 -5
- package/lib/nodes/mixin.d.ts +2 -6
- package/lib/nodes/negative.d.ts +2 -6
- package/lib/nodes/operation.d.ts +2 -6
- package/lib/nodes/paren.d.ts +2 -6
- package/lib/nodes/quoted.d.ts +1 -5
- package/lib/nodes/reference.d.ts +1 -8
- package/lib/nodes/ruleset.d.ts +2 -6
- package/lib/nodes/selector.d.ts +2 -7
- package/lib/nodes/sequence.d.ts +2 -9
- package/lib/nodes/url.d.ts +1 -5
- package/lib/nodes/var-declaration.d.ts +2 -6
- package/lib/plugin.d.ts +44 -16
- package/lib/transform/adapter.d.ts +31 -0
- package/lib/transform/index.cjs +13 -0
- package/lib/transform/index.d.ts +1 -1
- package/lib/transform/index.js +3 -8
- package/lib/transform/less-adapter.d.ts +29 -0
- package/lib/transform.cjs +1045 -0
- package/lib/transform.js +1015 -0
- package/lib/types.d.ts +153 -28
- package/package.json +13 -12
- package/lib/index.js.map +0 -1
- package/lib/less-compat-structures.js.map +0 -1
- package/lib/nodes/at-rule.js +0 -72
- package/lib/nodes/at-rule.js.map +0 -1
- package/lib/nodes/attribute-selector.js +0 -54
- package/lib/nodes/attribute-selector.js.map +0 -1
- package/lib/nodes/call.js +0 -83
- package/lib/nodes/call.js.map +0 -1
- package/lib/nodes/color.js +0 -57
- package/lib/nodes/color.js.map +0 -1
- package/lib/nodes/combinator.js +0 -34
- package/lib/nodes/combinator.js.map +0 -1
- package/lib/nodes/comment.js +0 -41
- package/lib/nodes/comment.js.map +0 -1
- package/lib/nodes/condition.js +0 -60
- package/lib/nodes/condition.js.map +0 -1
- package/lib/nodes/declaration.js +0 -81
- package/lib/nodes/declaration.js.map +0 -1
- package/lib/nodes/dimension.js +0 -47
- package/lib/nodes/dimension.js.map +0 -1
- package/lib/nodes/expression.js +0 -44
- package/lib/nodes/expression.js.map +0 -1
- package/lib/nodes/extend.js +0 -57
- package/lib/nodes/extend.js.map +0 -1
- package/lib/nodes/import.js +0 -63
- package/lib/nodes/import.js.map +0 -1
- package/lib/nodes/index.js +0 -308
- package/lib/nodes/index.js.map +0 -1
- package/lib/nodes/keyword.js +0 -36
- package/lib/nodes/keyword.js.map +0 -1
- package/lib/nodes/list.js +0 -150
- package/lib/nodes/list.js.map +0 -1
- package/lib/nodes/mixin.js +0 -62
- package/lib/nodes/mixin.js.map +0 -1
- package/lib/nodes/negative.js +0 -42
- package/lib/nodes/negative.js.map +0 -1
- package/lib/nodes/operation.js +0 -63
- package/lib/nodes/operation.js.map +0 -1
- package/lib/nodes/paren.js +0 -42
- package/lib/nodes/paren.js.map +0 -1
- package/lib/nodes/quoted.js +0 -57
- package/lib/nodes/quoted.js.map +0 -1
- package/lib/nodes/reference.js +0 -80
- package/lib/nodes/reference.js.map +0 -1
- package/lib/nodes/ruleset.js +0 -108
- package/lib/nodes/ruleset.js.map +0 -1
- package/lib/nodes/selector.js +0 -226
- package/lib/nodes/selector.js.map +0 -1
- package/lib/nodes/sequence.js +0 -75
- package/lib/nodes/sequence.js.map +0 -1
- package/lib/nodes/url.js +0 -42
- package/lib/nodes/url.js.map +0 -1
- package/lib/nodes/var-declaration.js +0 -60
- package/lib/nodes/var-declaration.js.map +0 -1
- package/lib/plugin-utils.js +0 -100
- package/lib/plugin-utils.js.map +0 -1
- package/lib/plugin.js +0 -1027
- package/lib/plugin.js.map +0 -1
- package/lib/transform/from-less.js +0 -170
- package/lib/transform/from-less.js.map +0 -1
- package/lib/transform/index.js.map +0 -1
- package/lib/transform/proxy.d.ts +0 -32
- package/lib/transform/proxy.js +0 -138
- package/lib/transform/proxy.js.map +0 -1
- package/lib/transform/to-less.js +0 -128
- package/lib/transform/to-less.js.map +0 -1
- package/lib/transform/type-map.js +0 -105
- package/lib/transform/type-map.js.map +0 -1
- package/lib/types.js +0 -5
- package/lib/types.js.map +0 -1
package/lib/nodes/operation.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/nodes/paren.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
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
|
package/lib/nodes/paren.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/nodes/quoted.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
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
|
package/lib/nodes/quoted.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/nodes/reference.js
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/lib/nodes/ruleset.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { Nil, SelectorList } 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 Ruleset to a Less-compatible Ruleset
|
|
7
|
-
*/
|
|
8
|
-
export function transformRulesetToLess(jessRuleset, cache) {
|
|
9
|
-
return createLessProxy(jessRuleset, cache, (prop, target) => {
|
|
10
|
-
const ruleset = target;
|
|
11
|
-
// Map 'type' property
|
|
12
|
-
if (prop === 'type') {
|
|
13
|
-
return mapJessTypeToLessType(ruleset.type);
|
|
14
|
-
}
|
|
15
|
-
// typeIndex is handled automatically by the base proxy handler
|
|
16
|
-
// Map 'selectors' property (Less expects array, Jess has single Selector | Nil)
|
|
17
|
-
if (prop === 'selectors') {
|
|
18
|
-
const selector = ruleset.value.selector;
|
|
19
|
-
// Handle Nil selector
|
|
20
|
-
if (selector instanceof Nil) {
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
// Handle SelectorList - convert to array
|
|
24
|
-
if (selector instanceof SelectorList) {
|
|
25
|
-
return selector.value.map((s) => toLessNode(s, { cache }));
|
|
26
|
-
}
|
|
27
|
-
// Single selector - wrap in array
|
|
28
|
-
return [toLessNode(selector, { cache })];
|
|
29
|
-
}
|
|
30
|
-
// Map 'rules' property (Less expects array, Jess has Rules container)
|
|
31
|
-
if (prop === 'rules') {
|
|
32
|
-
const rules = ruleset.value.rules;
|
|
33
|
-
// Rules has a value array of nodes
|
|
34
|
-
return rules.value.map((r) => toLessNode(r, { cache }));
|
|
35
|
-
}
|
|
36
|
-
// Map 'accept' method for visitor traversal
|
|
37
|
-
// Less's Visitor.visit() calls node.accept(this) to traverse children
|
|
38
|
-
// The accept method should traverse children, NOT call visitor.visit again
|
|
39
|
-
if (prop === 'accept') {
|
|
40
|
-
return function (visitor) {
|
|
41
|
-
// CRITICAL: The visitor passed here is the Less visitor, not the plugin visitor
|
|
42
|
-
// Less's Ruleset.accept() traverses selectors and rules
|
|
43
|
-
// Use visitArray which handles the traversal correctly
|
|
44
|
-
const selector = ruleset.value.selector;
|
|
45
|
-
const rules = ruleset.value.rules;
|
|
46
|
-
// Traverse selectors using visitArray (Less's pattern)
|
|
47
|
-
if (selector && !(selector instanceof Nil)) {
|
|
48
|
-
if (selector instanceof SelectorList) {
|
|
49
|
-
// Convert all selectors to Less format BEFORE calling visitArray
|
|
50
|
-
// This ensures visitArray receives Less proxies, not Jess nodes
|
|
51
|
-
const lessSelectors = selector.value.map((s) => {
|
|
52
|
-
const lessSel = toLessNode(s, { cache });
|
|
53
|
-
// Ensure we have a Less proxy, not a Jess node
|
|
54
|
-
return lessSel;
|
|
55
|
-
});
|
|
56
|
-
if (visitor.visitArray) {
|
|
57
|
-
visitor.visitArray(lessSelectors);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// Fallback: call accept on each selector if visitArray not available
|
|
61
|
-
for (const lessSel of lessSelectors) {
|
|
62
|
-
if (lessSel && lessSel.accept) {
|
|
63
|
-
lessSel.accept(visitor);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
// Single selector - convert to Less format BEFORE calling visitArray
|
|
70
|
-
const lessSelector = toLessNode(selector, { cache });
|
|
71
|
-
if (lessSelector) {
|
|
72
|
-
if (visitor.visitArray) {
|
|
73
|
-
visitor.visitArray([lessSelector]);
|
|
74
|
-
}
|
|
75
|
-
else if (lessSelector.accept) {
|
|
76
|
-
lessSelector.accept(visitor);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// Traverse rules using visitArray (Less's pattern)
|
|
82
|
-
if (rules && rules.value && rules.value.length > 0) {
|
|
83
|
-
// Convert all rules to Less format BEFORE calling visitArray
|
|
84
|
-
// This ensures visitArray receives Less proxies, not Jess nodes
|
|
85
|
-
const lessRules = rules.value.map((r) => {
|
|
86
|
-
const lessRule = toLessNode(r, { cache });
|
|
87
|
-
// Ensure we have a Less proxy, not a Jess node
|
|
88
|
-
return lessRule;
|
|
89
|
-
});
|
|
90
|
-
if (visitor.visitArray) {
|
|
91
|
-
visitor.visitArray(lessRules);
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
// Fallback: call accept on each rule if visitArray not available
|
|
95
|
-
for (const lessRule of lessRules) {
|
|
96
|
-
if (lessRule && lessRule.accept) {
|
|
97
|
-
lessRule.accept(visitor);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
// Pass through other properties
|
|
105
|
-
return undefined;
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
//# sourceMappingURL=ruleset.js.map
|
package/lib/nodes/ruleset.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ruleset.js","sourceRoot":"","sources":["../../src/nodes/ruleset.ts"],"names":[],"mappings":"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"}
|
package/lib/nodes/selector.js
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { ComplexSelector, CompoundSelector, BasicSelector, SelectorList, Combinator } from '@jesscss/core';
|
|
2
|
-
import { createLessProxy } from '../transform/proxy.js';
|
|
3
|
-
import { toLessNode } from '../transform/to-less.js';
|
|
4
|
-
/**
|
|
5
|
-
* Flatten a hierarchical Jess selector into Less's flat Element array
|
|
6
|
-
*
|
|
7
|
-
* Less expects: Element[] where each Element has { combinator, value }
|
|
8
|
-
* Jess has: ComplexSelector → CompoundSelector[] → BasicSelector[]
|
|
9
|
-
*/
|
|
10
|
-
function flattenSelectorToElements(selector, cache) {
|
|
11
|
-
const elements = [];
|
|
12
|
-
if (selector instanceof SelectorList) {
|
|
13
|
-
// SelectorList contains multiple selectors - Less expects a single Selector
|
|
14
|
-
// For now, we'll take the first selector, but this might need special handling
|
|
15
|
-
if (selector.value.length > 0) {
|
|
16
|
-
const first = selector.value[0];
|
|
17
|
-
if (first) {
|
|
18
|
-
return flattenSelectorToElements(first, cache);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
if (selector instanceof ComplexSelector) {
|
|
24
|
-
// ComplexSelector contains CompoundSelector[] with Combinators between them
|
|
25
|
-
const compounds = selector.value;
|
|
26
|
-
for (let i = 0; i < compounds.length; i++) {
|
|
27
|
-
const compound = compounds[i];
|
|
28
|
-
// Get combinator (default to ' ' for space)
|
|
29
|
-
let combinator;
|
|
30
|
-
if (i > 0) {
|
|
31
|
-
// Combinator is between compounds
|
|
32
|
-
// Less's Element includes the combinator, so we need to find it
|
|
33
|
-
// For now, default to space combinator
|
|
34
|
-
combinator = new Combinator(' ');
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
// First element has no combinator (or empty combinator)
|
|
38
|
-
// Use space as default for Less compatibility
|
|
39
|
-
combinator = new Combinator(' ');
|
|
40
|
-
}
|
|
41
|
-
// Flatten compound selector
|
|
42
|
-
if (compound instanceof CompoundSelector) {
|
|
43
|
-
const basicSelectors = compound.value;
|
|
44
|
-
for (let j = 0; j < basicSelectors.length; j++) {
|
|
45
|
-
const basic = basicSelectors[j];
|
|
46
|
-
if (!basic) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
// Use combinator only for first element of compound
|
|
50
|
-
const elementCombinator = j === 0 ? combinator : new Combinator(' ');
|
|
51
|
-
// Create Less Element structure
|
|
52
|
-
// Less Element: { combinator, value, isVariable }
|
|
53
|
-
const element = createLessProxy(basic, cache, (prop, target) => {
|
|
54
|
-
const basicSel = target;
|
|
55
|
-
if (prop === 'type') {
|
|
56
|
-
return 'Element';
|
|
57
|
-
}
|
|
58
|
-
if (prop === 'combinator') {
|
|
59
|
-
return toLessNode(elementCombinator, { cache });
|
|
60
|
-
}
|
|
61
|
-
if (prop === 'value') {
|
|
62
|
-
return basicSel.value;
|
|
63
|
-
}
|
|
64
|
-
if (prop === 'isVariable') {
|
|
65
|
-
return false; // BasicSelector is not a variable
|
|
66
|
-
}
|
|
67
|
-
if (prop === 'accept') {
|
|
68
|
-
return function (visitor) {
|
|
69
|
-
// Less Element's accept() ONLY traverses children (combinator and value)
|
|
70
|
-
// It does NOT call visitor.visit() on itself - that's already been done
|
|
71
|
-
// Less.js Element.accept() pattern: visitor.visit(this.combinator) and visitor.visit(this.value)
|
|
72
|
-
const lessCombinator = toLessNode(elementCombinator, { cache });
|
|
73
|
-
if (lessCombinator && visitor.visit) {
|
|
74
|
-
visitor.visit(lessCombinator);
|
|
75
|
-
}
|
|
76
|
-
// Visit value if it's an object/node
|
|
77
|
-
const value = basicSel.value;
|
|
78
|
-
if (value && typeof value === 'object') {
|
|
79
|
-
const lessValue = toLessNode(value, { cache });
|
|
80
|
-
if (lessValue && visitor.visit) {
|
|
81
|
-
visitor.visit(lessValue);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return basicSel;
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
return undefined;
|
|
88
|
-
});
|
|
89
|
-
elements.push(element);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else if (compound instanceof BasicSelector) {
|
|
93
|
-
// Single basic selector
|
|
94
|
-
const element = createLessProxy(compound, cache, (prop, target) => {
|
|
95
|
-
const basicSel = target;
|
|
96
|
-
if (prop === 'type') {
|
|
97
|
-
return 'Element';
|
|
98
|
-
}
|
|
99
|
-
if (prop === 'combinator') {
|
|
100
|
-
return toLessNode(combinator, { cache });
|
|
101
|
-
}
|
|
102
|
-
if (prop === 'value') {
|
|
103
|
-
return basicSel.value;
|
|
104
|
-
}
|
|
105
|
-
if (prop === 'isVariable') {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
return undefined;
|
|
109
|
-
});
|
|
110
|
-
elements.push(element);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
else if (selector instanceof CompoundSelector) {
|
|
115
|
-
// Single compound selector - flatten to elements
|
|
116
|
-
const basicSelectors = selector.value;
|
|
117
|
-
for (let i = 0; i < basicSelectors.length; i++) {
|
|
118
|
-
const basic = basicSelectors[i];
|
|
119
|
-
if (!basic) {
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
const combinator = new Combinator(' ');
|
|
123
|
-
const element = createLessProxy(basic, cache, (prop, target) => {
|
|
124
|
-
const basicSel = target;
|
|
125
|
-
if (prop === 'type') {
|
|
126
|
-
return 'Element';
|
|
127
|
-
}
|
|
128
|
-
if (prop === 'combinator') {
|
|
129
|
-
return toLessNode(combinator, { cache });
|
|
130
|
-
}
|
|
131
|
-
if (prop === 'value') {
|
|
132
|
-
return basicSel.value;
|
|
133
|
-
}
|
|
134
|
-
if (prop === 'isVariable') {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
return undefined;
|
|
138
|
-
});
|
|
139
|
-
elements.push(element);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (selector instanceof BasicSelector) {
|
|
143
|
-
// Single basic selector
|
|
144
|
-
const element = createLessProxy(selector, cache, (prop, target) => {
|
|
145
|
-
const basicSel = target;
|
|
146
|
-
if (prop === 'type') {
|
|
147
|
-
return 'Element';
|
|
148
|
-
}
|
|
149
|
-
if (prop === 'combinator') {
|
|
150
|
-
// Empty combinator for first element - use space as default
|
|
151
|
-
return toLessNode(new Combinator(' '), { cache });
|
|
152
|
-
}
|
|
153
|
-
if (prop === 'value') {
|
|
154
|
-
return basicSel.value;
|
|
155
|
-
}
|
|
156
|
-
if (prop === 'isVariable') {
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
return undefined;
|
|
160
|
-
});
|
|
161
|
-
elements.push(element);
|
|
162
|
-
}
|
|
163
|
-
return elements;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Transform a Jess Selector to a Less-compatible Selector
|
|
167
|
-
*
|
|
168
|
-
* Less Selector is an array of Element nodes
|
|
169
|
-
*/
|
|
170
|
-
export function transformSelectorToLess(jessSelector, cache) {
|
|
171
|
-
// Less Selector is an array of Elements
|
|
172
|
-
const elements = flattenSelectorToElements(jessSelector, cache);
|
|
173
|
-
// Create a proxy that represents a Less Selector (array of Elements)
|
|
174
|
-
return createLessProxy(jessSelector, cache, (prop, _target) => {
|
|
175
|
-
// Map 'type' property
|
|
176
|
-
if (prop === 'type') {
|
|
177
|
-
return 'Selector';
|
|
178
|
-
}
|
|
179
|
-
// Map 'typeIndex'
|
|
180
|
-
if (prop === 'typeIndex') {
|
|
181
|
-
return undefined;
|
|
182
|
-
}
|
|
183
|
-
// Map 'elements' property (Less Selector has elements array)
|
|
184
|
-
if (prop === 'elements') {
|
|
185
|
-
return elements;
|
|
186
|
-
}
|
|
187
|
-
// Map array-like access (Less Selector is array-like)
|
|
188
|
-
if (typeof prop === 'string' && /^\d+$/.test(prop)) {
|
|
189
|
-
const index = parseInt(prop, 10);
|
|
190
|
-
return elements[index];
|
|
191
|
-
}
|
|
192
|
-
// Map 'length' property
|
|
193
|
-
if (prop === 'length') {
|
|
194
|
-
return elements.length;
|
|
195
|
-
}
|
|
196
|
-
// Map 'accept' method for visitor traversal
|
|
197
|
-
if (prop === 'accept') {
|
|
198
|
-
return function (visitor) {
|
|
199
|
-
// Less Selector accepts visitor and visits each element
|
|
200
|
-
// CRITICAL: All elements should already be Less proxies from flattenSelectorToElements
|
|
201
|
-
// If they're not, we need to convert them to prevent infinite loops
|
|
202
|
-
for (const element of elements) {
|
|
203
|
-
if (element && element.accept) {
|
|
204
|
-
// Element is already a Less proxy - call accept directly
|
|
205
|
-
element.accept(visitor);
|
|
206
|
-
}
|
|
207
|
-
else if (element) {
|
|
208
|
-
// Element is not a proxy - this shouldn't happen, but convert it just in case
|
|
209
|
-
// This prevents infinite loops if somehow a Jess node got through
|
|
210
|
-
const lessElement = toLessNode(element, { cache });
|
|
211
|
-
if (lessElement && lessElement.accept) {
|
|
212
|
-
lessElement.accept(visitor);
|
|
213
|
-
}
|
|
214
|
-
else if (lessElement && visitor.visitArray) {
|
|
215
|
-
// Fallback: use visitArray if accept doesn't exist
|
|
216
|
-
visitor.visitArray([lessElement]);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return jessSelector;
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
return undefined;
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=selector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"selector.js","sourceRoot":"","sources":["../../src/nodes/selector.ts"],"names":[],"mappings":"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"}
|