@jesscss/core 2.0.0-alpha.4 → 2.0.0-alpha.6
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/lib/index.cjs +20159 -0
- package/lib/index.d.cts +5993 -0
- package/lib/index.d.cts.map +1 -0
- package/lib/index.d.ts +5992 -21
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19926 -22
- package/lib/index.js.map +1 -1
- package/package.json +15 -14
- package/src/__tests__/define-function-record.test.ts +58 -0
- package/src/__tests__/define-function-simple.test.ts +55 -0
- package/src/__tests__/define-function-split-sequence.test.ts +547 -0
- package/src/__tests__/define-function-type-parity.test.ts +9 -0
- package/src/__tests__/define-function.test.ts +763 -0
- package/src/__tests__/num-operations.test.ts +91 -0
- package/src/__tests__/safe-parse.test.ts +374 -0
- package/src/context.ts +896 -0
- package/src/conversions.ts +282 -0
- package/src/debug-log.ts +29 -0
- package/src/define-function.ts +1006 -0
- package/src/deprecation.ts +67 -0
- package/src/globals.d.ts +26 -0
- package/src/index.ts +31 -0
- package/src/jess-error.ts +773 -0
- package/src/logger/deprecation-processing.ts +109 -0
- package/src/logger.ts +31 -0
- package/src/plugin.ts +292 -0
- package/src/tree/LOOKUP_CHAINS.md +35 -0
- package/src/tree/README.md +18 -0
- package/src/tree/__tests__/__snapshots__/extend-eval-integration.test.ts.snap +1455 -0
- package/src/tree/__tests__/ampersand.test.ts +382 -0
- package/src/tree/__tests__/at-rule.test.ts +2047 -0
- package/src/tree/__tests__/basic-render.test.ts +212 -0
- package/src/tree/__tests__/block.test.ts +40 -0
- package/src/tree/__tests__/call.test.ts +346 -0
- package/src/tree/__tests__/color.test.ts +537 -0
- package/src/tree/__tests__/condition.test.ts +186 -0
- package/src/tree/__tests__/control.test.ts +564 -0
- package/src/tree/__tests__/declaration.test.ts +253 -0
- package/src/tree/__tests__/dependency-graph.test.ts +177 -0
- package/src/tree/__tests__/detached-rulesets.test.ts +213 -0
- package/src/tree/__tests__/dimension.test.ts +236 -0
- package/src/tree/__tests__/expression.test.ts +73 -0
- package/src/tree/__tests__/ext-node.test.ts +31 -0
- package/src/tree/__tests__/extend-eval-integration.test.ts +1033 -0
- package/src/tree/__tests__/extend-import-style.test.ts +929 -0
- package/src/tree/__tests__/extend-less-fixtures.test.ts +851 -0
- package/src/tree/__tests__/extend-list.test.ts +31 -0
- package/src/tree/__tests__/extend-roots.test.ts +1045 -0
- package/src/tree/__tests__/extend-rules.test.ts +740 -0
- package/src/tree/__tests__/func.test.ts +171 -0
- package/src/tree/__tests__/import-js.test.ts +33 -0
- package/src/tree/__tests__/import-style-test-helpers.ts +56 -0
- package/src/tree/__tests__/import-style.test.ts +1967 -0
- package/src/tree/__tests__/interpolated-reference.test.ts +44 -0
- package/src/tree/__tests__/interpolated.test.ts +41 -0
- package/src/tree/__tests__/list.test.ts +177 -0
- package/src/tree/__tests__/log.test.ts +83 -0
- package/src/tree/__tests__/mixin-recursion.test.ts +639 -0
- package/src/tree/__tests__/mixin.test.ts +2171 -0
- package/src/tree/__tests__/negative.test.ts +45 -0
- package/src/tree/__tests__/nesting-collapse.test.ts +519 -0
- package/src/tree/__tests__/node-flags-perf.test.ts +195 -0
- package/src/tree/__tests__/node-flags.test.ts +410 -0
- package/src/tree/__tests__/node-graph.test.ts +598 -0
- package/src/tree/__tests__/node-mutation.test.ts +182 -0
- package/src/tree/__tests__/operation.test.ts +18 -0
- package/src/tree/__tests__/paren.test.ts +90 -0
- package/src/tree/__tests__/preserve-mode-output.test.ts +50 -0
- package/src/tree/__tests__/quoted.test.ts +72 -0
- package/src/tree/__tests__/range.test.ts +59 -0
- package/src/tree/__tests__/reference.test.ts +743 -0
- package/src/tree/__tests__/rest.test.ts +29 -0
- package/src/tree/__tests__/rules-raw.test.ts +14 -0
- package/src/tree/__tests__/rules.test.ts +1271 -0
- package/src/tree/__tests__/ruleset.test.ts +597 -0
- package/src/tree/__tests__/selector-attr.test.ts +50 -0
- package/src/tree/__tests__/selector-basic.test.ts +44 -0
- package/src/tree/__tests__/selector-capture.test.ts +22 -0
- package/src/tree/__tests__/selector-complex.test.ts +120 -0
- package/src/tree/__tests__/selector-compound.test.ts +74 -0
- package/src/tree/__tests__/selector-interpolated.test.ts +50 -0
- package/src/tree/__tests__/selector-list.test.ts +59 -0
- package/src/tree/__tests__/selector-pseudo.test.ts +23 -0
- package/src/tree/__tests__/selector.test.ts +182 -0
- package/src/tree/__tests__/sequence.test.ts +226 -0
- package/src/tree/__tests__/serialize-types.test.ts +529 -0
- package/src/tree/__tests__/spaced.test.ts +8 -0
- package/src/tree/__tests__/url.test.ts +72 -0
- package/src/tree/__tests__/var-declaration.test.ts +90 -0
- package/src/tree/ampersand.ts +538 -0
- package/src/tree/any.ts +169 -0
- package/src/tree/at-rule.ts +760 -0
- package/src/tree/block.ts +72 -0
- package/src/tree/bool.ts +46 -0
- package/src/tree/call.ts +593 -0
- package/src/tree/collection.ts +52 -0
- package/src/tree/color.ts +629 -0
- package/src/tree/combinator.ts +30 -0
- package/src/tree/comment.ts +36 -0
- package/src/tree/condition.ts +194 -0
- package/src/tree/control.ts +452 -0
- package/src/tree/declaration-custom.ts +56 -0
- package/src/tree/declaration-var.ts +87 -0
- package/src/tree/declaration.ts +742 -0
- package/src/tree/default-guard.ts +35 -0
- package/src/tree/dimension.ts +392 -0
- package/src/tree/expression.ts +97 -0
- package/src/tree/extend-list.ts +51 -0
- package/src/tree/extend.ts +391 -0
- package/src/tree/function.ts +254 -0
- package/src/tree/import-js.ts +130 -0
- package/src/tree/import-style.ts +875 -0
- package/{lib/tree/index.js → src/tree/index.ts} +49 -22
- package/src/tree/interpolated.ts +346 -0
- package/src/tree/js-array.ts +21 -0
- package/src/tree/js-expr.ts +50 -0
- package/src/tree/js-function.ts +31 -0
- package/src/tree/js-object.ts +22 -0
- package/src/tree/list.ts +415 -0
- package/src/tree/log.ts +89 -0
- package/src/tree/mixin.ts +331 -0
- package/src/tree/negative.ts +58 -0
- package/src/tree/nil.ts +57 -0
- package/src/tree/node-base.ts +1716 -0
- package/src/tree/node-type.ts +122 -0
- package/src/tree/node.ts +118 -0
- package/src/tree/number.ts +54 -0
- package/src/tree/operation.ts +187 -0
- package/src/tree/paren.ts +132 -0
- package/src/tree/query-condition.ts +47 -0
- package/src/tree/quoted.ts +119 -0
- package/src/tree/range.ts +101 -0
- package/src/tree/reference.ts +1099 -0
- package/src/tree/rest.ts +55 -0
- package/src/tree/rules-raw.ts +52 -0
- package/src/tree/rules.ts +2896 -0
- package/src/tree/ruleset.ts +1217 -0
- package/src/tree/selector-attr.ts +172 -0
- package/src/tree/selector-basic.ts +75 -0
- package/src/tree/selector-capture.ts +85 -0
- package/src/tree/selector-complex.ts +189 -0
- package/src/tree/selector-compound.ts +205 -0
- package/src/tree/selector-interpolated.ts +95 -0
- package/src/tree/selector-list.ts +245 -0
- package/src/tree/selector-pseudo.ts +173 -0
- package/src/tree/selector-simple.ts +10 -0
- package/src/tree/selector.ts +152 -0
- package/src/tree/sequence.ts +463 -0
- package/src/tree/tree.ts +130 -0
- package/src/tree/url.ts +95 -0
- package/src/tree/util/EXTEND_ARCHITECTURE_ANALYSIS.md +215 -0
- package/src/tree/util/EXTEND_AUDIT.md +233 -0
- package/src/tree/util/EXTEND_BASELINE.md +64 -0
- package/src/tree/util/EXTEND_CALL_GRAPH_ANALYSIS.md +244 -0
- package/src/tree/util/EXTEND_DOCS.md +24 -0
- package/src/tree/util/EXTEND_FINAL_SUMMARY.md +95 -0
- package/src/tree/util/EXTEND_FUNCTION_AUDIT.md +1433 -0
- package/src/tree/util/EXTEND_OPTIMIZATION_PLAN.md +114 -0
- package/src/tree/util/EXTEND_REFACTORING_SUMMARY.md +152 -0
- package/src/tree/util/EXTEND_RULES.md +74 -0
- package/src/tree/util/EXTEND_UNUSED_FUNCTIONS.md +127 -0
- package/src/tree/util/EXTEND_UNUSED_FUNCTIONS_ANALYSIS.md +227 -0
- package/src/tree/util/NODE_COPY_REDUCTION_PLAN.md +12 -0
- package/src/tree/util/__tests__/EXTEND_TEST_INDEX.md +59 -0
- package/src/tree/util/__tests__/OPTIMIZATION-ANALYSIS.md +130 -0
- package/src/tree/util/__tests__/WALK_AND_CONSUME_DESIGN.md +138 -0
- package/src/tree/util/__tests__/_archive/2026-02-09__OPTIMIZATION-ANALYSIS.md +9 -0
- package/src/tree/util/__tests__/_archive/README.md +4 -0
- package/src/tree/util/__tests__/bitset.test.ts +142 -0
- package/src/tree/util/__tests__/debug-log.ts +50 -0
- package/src/tree/util/__tests__/extend-comment-handling.test.ts +187 -0
- package/src/tree/util/__tests__/extend-core-unit.test.ts +941 -0
- package/src/tree/util/__tests__/extend-pipeline-bench.test.ts +154 -0
- package/src/tree/util/__tests__/extend-pipeline-bench.ts +190 -0
- package/src/tree/util/__tests__/fast-reject.test.ts +377 -0
- package/src/tree/util/__tests__/is-node.test.ts +63 -0
- package/src/tree/util/__tests__/list-like.test.ts +63 -0
- package/src/tree/util/__tests__/outputwriter.test.ts +523 -0
- package/src/tree/util/__tests__/print.test.ts +183 -0
- package/src/tree/util/__tests__/process-extends.test.ts +226 -0
- package/src/tree/util/__tests__/process-leading-is.test.ts +205 -0
- package/src/tree/util/__tests__/recursion-helper.test.ts +184 -0
- package/src/tree/util/__tests__/selector-match-unit.test.ts +1427 -0
- package/src/tree/util/__tests__/sourcemap.test.ts +117 -0
- package/src/tree/util/ampersand-template.ts +9 -0
- package/src/tree/util/bitset.ts +194 -0
- package/src/tree/util/calculate.ts +11 -0
- package/src/tree/util/cast.ts +89 -0
- package/src/tree/util/cloning.ts +8 -0
- package/src/tree/util/collections.ts +299 -0
- package/src/tree/util/compare.ts +90 -0
- package/src/tree/util/cursor.ts +171 -0
- package/src/tree/util/extend-core.ts +2139 -0
- package/src/tree/util/extend-roots.ts +1108 -0
- package/src/tree/util/field-helpers.ts +354 -0
- package/src/tree/util/is-node.ts +43 -0
- package/src/tree/util/list-like.ts +93 -0
- package/src/tree/util/mixin-instance-primitives.ts +2020 -0
- package/src/tree/util/print.ts +303 -0
- package/src/tree/util/process-leading-is.ts +421 -0
- package/src/tree/util/recursion-helper.ts +54 -0
- package/src/tree/util/regex.ts +2 -0
- package/src/tree/util/registry-utils.ts +1953 -0
- package/src/tree/util/ruleset-trace.ts +17 -0
- package/src/tree/util/scoped-body-eval.ts +320 -0
- package/src/tree/util/selector-match-core.ts +2005 -0
- package/src/tree/util/selector-utils.ts +757 -0
- package/src/tree/util/serialize-helper.ts +535 -0
- package/src/tree/util/serialize-types.ts +318 -0
- package/src/tree/util/should-operate.ts +78 -0
- package/src/tree/util/sourcemap.ts +37 -0
- package/src/types/config.ts +247 -0
- package/src/types/index.ts +12 -0
- package/{lib/types/modes.d.ts → src/types/modes.ts} +2 -1
- package/src/types.d.ts +9 -0
- package/src/types.ts +68 -0
- package/src/use-webpack-resolver.ts +56 -0
- package/src/visitor/__tests__/visitor.test.ts +136 -0
- package/src/visitor/index.ts +263 -0
- package/{lib/visitor/less-visitor.js → src/visitor/less-visitor.ts} +3 -2
- package/lib/context.d.ts +0 -352
- package/lib/context.d.ts.map +0 -1
- package/lib/context.js +0 -636
- package/lib/context.js.map +0 -1
- package/lib/conversions.d.ts +0 -73
- package/lib/conversions.d.ts.map +0 -1
- package/lib/conversions.js +0 -253
- package/lib/conversions.js.map +0 -1
- package/lib/debug-log.d.ts +0 -2
- package/lib/debug-log.d.ts.map +0 -1
- package/lib/debug-log.js +0 -27
- package/lib/debug-log.js.map +0 -1
- package/lib/define-function.d.ts +0 -587
- package/lib/define-function.d.ts.map +0 -1
- package/lib/define-function.js +0 -726
- package/lib/define-function.js.map +0 -1
- package/lib/deprecation.d.ts +0 -34
- package/lib/deprecation.d.ts.map +0 -1
- package/lib/deprecation.js +0 -57
- package/lib/deprecation.js.map +0 -1
- package/lib/jess-error.d.ts +0 -343
- package/lib/jess-error.d.ts.map +0 -1
- package/lib/jess-error.js +0 -508
- package/lib/jess-error.js.map +0 -1
- package/lib/logger/deprecation-processing.d.ts +0 -41
- package/lib/logger/deprecation-processing.d.ts.map +0 -1
- package/lib/logger/deprecation-processing.js +0 -81
- package/lib/logger/deprecation-processing.js.map +0 -1
- package/lib/logger.d.ts +0 -10
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js +0 -20
- package/lib/logger.js.map +0 -1
- package/lib/plugin.d.ts +0 -94
- package/lib/plugin.d.ts.map +0 -1
- package/lib/plugin.js +0 -174
- package/lib/plugin.js.map +0 -1
- package/lib/tree/ampersand.d.ts +0 -94
- package/lib/tree/ampersand.d.ts.map +0 -1
- package/lib/tree/ampersand.js +0 -269
- package/lib/tree/ampersand.js.map +0 -1
- package/lib/tree/any.d.ts +0 -58
- package/lib/tree/any.d.ts.map +0 -1
- package/lib/tree/any.js +0 -104
- package/lib/tree/any.js.map +0 -1
- package/lib/tree/at-rule.d.ts +0 -53
- package/lib/tree/at-rule.d.ts.map +0 -1
- package/lib/tree/at-rule.js +0 -503
- package/lib/tree/at-rule.js.map +0 -1
- package/lib/tree/block.d.ts +0 -22
- package/lib/tree/block.d.ts.map +0 -1
- package/lib/tree/block.js +0 -24
- package/lib/tree/block.js.map +0 -1
- package/lib/tree/bool.d.ts +0 -18
- package/lib/tree/bool.d.ts.map +0 -1
- package/lib/tree/bool.js +0 -28
- package/lib/tree/bool.js.map +0 -1
- package/lib/tree/call.d.ts +0 -66
- package/lib/tree/call.d.ts.map +0 -1
- package/lib/tree/call.js +0 -306
- package/lib/tree/call.js.map +0 -1
- package/lib/tree/collection.d.ts +0 -30
- package/lib/tree/collection.d.ts.map +0 -1
- package/lib/tree/collection.js +0 -37
- package/lib/tree/collection.js.map +0 -1
- package/lib/tree/color.d.ts +0 -101
- package/lib/tree/color.d.ts.map +0 -1
- package/lib/tree/color.js +0 -513
- package/lib/tree/color.js.map +0 -1
- package/lib/tree/combinator.d.ts +0 -13
- package/lib/tree/combinator.d.ts.map +0 -1
- package/lib/tree/combinator.js +0 -12
- package/lib/tree/combinator.js.map +0 -1
- package/lib/tree/comment.d.ts +0 -20
- package/lib/tree/comment.d.ts.map +0 -1
- package/lib/tree/comment.js +0 -19
- package/lib/tree/comment.js.map +0 -1
- package/lib/tree/condition.d.ts +0 -31
- package/lib/tree/condition.d.ts.map +0 -1
- package/lib/tree/condition.js +0 -103
- package/lib/tree/condition.js.map +0 -1
- package/lib/tree/control.d.ts +0 -104
- package/lib/tree/control.d.ts.map +0 -1
- package/lib/tree/control.js +0 -430
- package/lib/tree/control.js.map +0 -1
- package/lib/tree/declaration-custom.d.ts +0 -18
- package/lib/tree/declaration-custom.d.ts.map +0 -1
- package/lib/tree/declaration-custom.js +0 -24
- package/lib/tree/declaration-custom.js.map +0 -1
- package/lib/tree/declaration-var.d.ts +0 -35
- package/lib/tree/declaration-var.d.ts.map +0 -1
- package/lib/tree/declaration-var.js +0 -63
- package/lib/tree/declaration-var.js.map +0 -1
- package/lib/tree/declaration.d.ts +0 -78
- package/lib/tree/declaration.d.ts.map +0 -1
- package/lib/tree/declaration.js +0 -286
- package/lib/tree/declaration.js.map +0 -1
- package/lib/tree/default-guard.d.ts +0 -15
- package/lib/tree/default-guard.d.ts.map +0 -1
- package/lib/tree/default-guard.js +0 -19
- package/lib/tree/default-guard.js.map +0 -1
- package/lib/tree/dimension.d.ts +0 -34
- package/lib/tree/dimension.d.ts.map +0 -1
- package/lib/tree/dimension.js +0 -294
- package/lib/tree/dimension.js.map +0 -1
- package/lib/tree/expression.d.ts +0 -25
- package/lib/tree/expression.d.ts.map +0 -1
- package/lib/tree/expression.js +0 -32
- package/lib/tree/expression.js.map +0 -1
- package/lib/tree/extend-list.d.ts +0 -23
- package/lib/tree/extend-list.d.ts.map +0 -1
- package/lib/tree/extend-list.js +0 -23
- package/lib/tree/extend-list.js.map +0 -1
- package/lib/tree/extend.d.ts +0 -47
- package/lib/tree/extend.d.ts.map +0 -1
- package/lib/tree/extend.js +0 -296
- package/lib/tree/extend.js.map +0 -1
- package/lib/tree/function.d.ts +0 -48
- package/lib/tree/function.d.ts.map +0 -1
- package/lib/tree/function.js +0 -74
- package/lib/tree/function.js.map +0 -1
- package/lib/tree/import-js.d.ts +0 -35
- package/lib/tree/import-js.d.ts.map +0 -1
- package/lib/tree/import-js.js +0 -45
- package/lib/tree/import-js.js.map +0 -1
- package/lib/tree/import-style.d.ts +0 -156
- package/lib/tree/import-style.d.ts.map +0 -1
- package/lib/tree/import-style.js +0 -566
- package/lib/tree/import-style.js.map +0 -1
- package/lib/tree/index.d.ts +0 -71
- package/lib/tree/index.d.ts.map +0 -1
- package/lib/tree/index.js.map +0 -1
- package/lib/tree/interpolated-reference.d.ts +0 -24
- package/lib/tree/interpolated-reference.d.ts.map +0 -1
- package/lib/tree/interpolated-reference.js +0 -37
- package/lib/tree/interpolated-reference.js.map +0 -1
- package/lib/tree/interpolated.d.ts +0 -62
- package/lib/tree/interpolated.d.ts.map +0 -1
- package/lib/tree/interpolated.js +0 -204
- package/lib/tree/interpolated.js.map +0 -1
- package/lib/tree/js-array.d.ts +0 -10
- package/lib/tree/js-array.d.ts.map +0 -1
- package/lib/tree/js-array.js +0 -10
- package/lib/tree/js-array.js.map +0 -1
- package/lib/tree/js-expr.d.ts +0 -23
- package/lib/tree/js-expr.d.ts.map +0 -1
- package/lib/tree/js-expr.js +0 -28
- package/lib/tree/js-expr.js.map +0 -1
- package/lib/tree/js-function.d.ts +0 -20
- package/lib/tree/js-function.d.ts.map +0 -1
- package/lib/tree/js-function.js +0 -16
- package/lib/tree/js-function.js.map +0 -1
- package/lib/tree/js-object.d.ts +0 -10
- package/lib/tree/js-object.d.ts.map +0 -1
- package/lib/tree/js-object.js +0 -10
- package/lib/tree/js-object.js.map +0 -1
- package/lib/tree/list.d.ts +0 -38
- package/lib/tree/list.d.ts.map +0 -1
- package/lib/tree/list.js +0 -83
- package/lib/tree/list.js.map +0 -1
- package/lib/tree/log.d.ts +0 -29
- package/lib/tree/log.d.ts.map +0 -1
- package/lib/tree/log.js +0 -56
- package/lib/tree/log.js.map +0 -1
- package/lib/tree/mixin.d.ts +0 -87
- package/lib/tree/mixin.d.ts.map +0 -1
- package/lib/tree/mixin.js +0 -112
- package/lib/tree/mixin.js.map +0 -1
- package/lib/tree/negative.d.ts +0 -17
- package/lib/tree/negative.d.ts.map +0 -1
- package/lib/tree/negative.js +0 -22
- package/lib/tree/negative.js.map +0 -1
- package/lib/tree/nil.d.ts +0 -30
- package/lib/tree/nil.d.ts.map +0 -1
- package/lib/tree/nil.js +0 -35
- package/lib/tree/nil.js.map +0 -1
- package/lib/tree/node-base.d.ts +0 -361
- package/lib/tree/node-base.d.ts.map +0 -1
- package/lib/tree/node-base.js +0 -930
- package/lib/tree/node-base.js.map +0 -1
- package/lib/tree/node.d.ts +0 -10
- package/lib/tree/node.d.ts.map +0 -1
- package/lib/tree/node.js +0 -45
- package/lib/tree/node.js.map +0 -1
- package/lib/tree/number.d.ts +0 -21
- package/lib/tree/number.d.ts.map +0 -1
- package/lib/tree/number.js +0 -27
- package/lib/tree/number.js.map +0 -1
- package/lib/tree/operation.d.ts +0 -26
- package/lib/tree/operation.d.ts.map +0 -1
- package/lib/tree/operation.js +0 -103
- package/lib/tree/operation.js.map +0 -1
- package/lib/tree/paren.d.ts +0 -19
- package/lib/tree/paren.d.ts.map +0 -1
- package/lib/tree/paren.js +0 -92
- package/lib/tree/paren.js.map +0 -1
- package/lib/tree/query-condition.d.ts +0 -17
- package/lib/tree/query-condition.d.ts.map +0 -1
- package/lib/tree/query-condition.js +0 -39
- package/lib/tree/query-condition.js.map +0 -1
- package/lib/tree/quoted.d.ts +0 -28
- package/lib/tree/quoted.d.ts.map +0 -1
- package/lib/tree/quoted.js +0 -75
- package/lib/tree/quoted.js.map +0 -1
- package/lib/tree/range.d.ts +0 -33
- package/lib/tree/range.d.ts.map +0 -1
- package/lib/tree/range.js +0 -47
- package/lib/tree/range.js.map +0 -1
- package/lib/tree/reference.d.ts +0 -76
- package/lib/tree/reference.d.ts.map +0 -1
- package/lib/tree/reference.js +0 -521
- package/lib/tree/reference.js.map +0 -1
- package/lib/tree/rest.d.ts +0 -15
- package/lib/tree/rest.d.ts.map +0 -1
- package/lib/tree/rest.js +0 -32
- package/lib/tree/rest.js.map +0 -1
- package/lib/tree/rules-raw.d.ts +0 -17
- package/lib/tree/rules-raw.d.ts.map +0 -1
- package/lib/tree/rules-raw.js +0 -37
- package/lib/tree/rules-raw.js.map +0 -1
- package/lib/tree/rules.d.ts +0 -262
- package/lib/tree/rules.d.ts.map +0 -1
- package/lib/tree/rules.js +0 -2359
- package/lib/tree/rules.js.map +0 -1
- package/lib/tree/ruleset.d.ts +0 -92
- package/lib/tree/ruleset.d.ts.map +0 -1
- package/lib/tree/ruleset.js +0 -528
- package/lib/tree/ruleset.js.map +0 -1
- package/lib/tree/selector-attr.d.ts +0 -31
- package/lib/tree/selector-attr.d.ts.map +0 -1
- package/lib/tree/selector-attr.js +0 -99
- package/lib/tree/selector-attr.js.map +0 -1
- package/lib/tree/selector-basic.d.ts +0 -24
- package/lib/tree/selector-basic.d.ts.map +0 -1
- package/lib/tree/selector-basic.js +0 -38
- package/lib/tree/selector-basic.js.map +0 -1
- package/lib/tree/selector-capture.d.ts +0 -23
- package/lib/tree/selector-capture.d.ts.map +0 -1
- package/lib/tree/selector-capture.js +0 -34
- package/lib/tree/selector-capture.js.map +0 -1
- package/lib/tree/selector-complex.d.ts +0 -40
- package/lib/tree/selector-complex.d.ts.map +0 -1
- package/lib/tree/selector-complex.js +0 -143
- package/lib/tree/selector-complex.js.map +0 -1
- package/lib/tree/selector-compound.d.ts +0 -16
- package/lib/tree/selector-compound.d.ts.map +0 -1
- package/lib/tree/selector-compound.js +0 -114
- package/lib/tree/selector-compound.js.map +0 -1
- package/lib/tree/selector-interpolated.d.ts +0 -23
- package/lib/tree/selector-interpolated.d.ts.map +0 -1
- package/lib/tree/selector-interpolated.js +0 -27
- package/lib/tree/selector-interpolated.js.map +0 -1
- package/lib/tree/selector-list.d.ts +0 -17
- package/lib/tree/selector-list.d.ts.map +0 -1
- package/lib/tree/selector-list.js +0 -174
- package/lib/tree/selector-list.js.map +0 -1
- package/lib/tree/selector-pseudo.d.ts +0 -42
- package/lib/tree/selector-pseudo.d.ts.map +0 -1
- package/lib/tree/selector-pseudo.js +0 -204
- package/lib/tree/selector-pseudo.js.map +0 -1
- package/lib/tree/selector-simple.d.ts +0 -5
- package/lib/tree/selector-simple.d.ts.map +0 -1
- package/lib/tree/selector-simple.js +0 -6
- package/lib/tree/selector-simple.js.map +0 -1
- package/lib/tree/selector.d.ts +0 -43
- package/lib/tree/selector.d.ts.map +0 -1
- package/lib/tree/selector.js +0 -56
- package/lib/tree/selector.js.map +0 -1
- package/lib/tree/sequence.d.ts +0 -43
- package/lib/tree/sequence.d.ts.map +0 -1
- package/lib/tree/sequence.js +0 -151
- package/lib/tree/sequence.js.map +0 -1
- package/lib/tree/tree.d.ts +0 -87
- package/lib/tree/tree.d.ts.map +0 -1
- package/lib/tree/tree.js +0 -2
- package/lib/tree/tree.js.map +0 -1
- package/lib/tree/url.d.ts +0 -18
- package/lib/tree/url.d.ts.map +0 -1
- package/lib/tree/url.js +0 -35
- package/lib/tree/url.js.map +0 -1
- package/lib/tree/util/__tests__/debug-log.d.ts +0 -1
- package/lib/tree/util/__tests__/debug-log.d.ts.map +0 -1
- package/lib/tree/util/__tests__/debug-log.js +0 -36
- package/lib/tree/util/__tests__/debug-log.js.map +0 -1
- package/lib/tree/util/calculate.d.ts +0 -3
- package/lib/tree/util/calculate.d.ts.map +0 -1
- package/lib/tree/util/calculate.js +0 -10
- package/lib/tree/util/calculate.js.map +0 -1
- package/lib/tree/util/cast.d.ts +0 -10
- package/lib/tree/util/cast.d.ts.map +0 -1
- package/lib/tree/util/cast.js +0 -87
- package/lib/tree/util/cast.js.map +0 -1
- package/lib/tree/util/cloning.d.ts +0 -4
- package/lib/tree/util/cloning.d.ts.map +0 -1
- package/lib/tree/util/cloning.js +0 -8
- package/lib/tree/util/cloning.js.map +0 -1
- package/lib/tree/util/collections.d.ts +0 -57
- package/lib/tree/util/collections.d.ts.map +0 -1
- package/lib/tree/util/collections.js +0 -136
- package/lib/tree/util/collections.js.map +0 -1
- package/lib/tree/util/compare.d.ts +0 -11
- package/lib/tree/util/compare.d.ts.map +0 -1
- package/lib/tree/util/compare.js +0 -89
- package/lib/tree/util/compare.js.map +0 -1
- package/lib/tree/util/extend-helpers.d.ts +0 -2
- package/lib/tree/util/extend-helpers.d.ts.map +0 -1
- package/lib/tree/util/extend-helpers.js +0 -2
- package/lib/tree/util/extend-helpers.js.map +0 -1
- package/lib/tree/util/extend-roots.d.ts +0 -37
- package/lib/tree/util/extend-roots.d.ts.map +0 -1
- package/lib/tree/util/extend-roots.js +0 -700
- package/lib/tree/util/extend-roots.js.map +0 -1
- package/lib/tree/util/extend-roots.old.d.ts +0 -132
- package/lib/tree/util/extend-roots.old.d.ts.map +0 -1
- package/lib/tree/util/extend-roots.old.js +0 -2272
- package/lib/tree/util/extend-roots.old.js.map +0 -1
- package/lib/tree/util/extend-trace-debug.d.ts +0 -13
- package/lib/tree/util/extend-trace-debug.d.ts.map +0 -1
- package/lib/tree/util/extend-trace-debug.js +0 -34
- package/lib/tree/util/extend-trace-debug.js.map +0 -1
- package/lib/tree/util/extend-walk.d.ts +0 -53
- package/lib/tree/util/extend-walk.d.ts.map +0 -1
- package/lib/tree/util/extend-walk.js +0 -881
- package/lib/tree/util/extend-walk.js.map +0 -1
- package/lib/tree/util/extend.d.ts +0 -218
- package/lib/tree/util/extend.d.ts.map +0 -1
- package/lib/tree/util/extend.js +0 -3182
- package/lib/tree/util/extend.js.map +0 -1
- package/lib/tree/util/find-extendable-locations.d.ts +0 -2
- package/lib/tree/util/find-extendable-locations.d.ts.map +0 -1
- package/lib/tree/util/find-extendable-locations.js +0 -2
- package/lib/tree/util/find-extendable-locations.js.map +0 -1
- package/lib/tree/util/format.d.ts +0 -20
- package/lib/tree/util/format.d.ts.map +0 -1
- package/lib/tree/util/format.js +0 -67
- package/lib/tree/util/format.js.map +0 -1
- package/lib/tree/util/is-node.d.ts +0 -13
- package/lib/tree/util/is-node.d.ts.map +0 -1
- package/lib/tree/util/is-node.js +0 -43
- package/lib/tree/util/is-node.js.map +0 -1
- package/lib/tree/util/print.d.ts +0 -80
- package/lib/tree/util/print.d.ts.map +0 -1
- package/lib/tree/util/print.js +0 -205
- package/lib/tree/util/print.js.map +0 -1
- package/lib/tree/util/process-leading-is.d.ts +0 -25
- package/lib/tree/util/process-leading-is.d.ts.map +0 -1
- package/lib/tree/util/process-leading-is.js +0 -364
- package/lib/tree/util/process-leading-is.js.map +0 -1
- package/lib/tree/util/recursion-helper.d.ts +0 -15
- package/lib/tree/util/recursion-helper.d.ts.map +0 -1
- package/lib/tree/util/recursion-helper.js +0 -43
- package/lib/tree/util/recursion-helper.js.map +0 -1
- package/lib/tree/util/regex.d.ts +0 -4
- package/lib/tree/util/regex.d.ts.map +0 -1
- package/lib/tree/util/regex.js +0 -4
- package/lib/tree/util/regex.js.map +0 -1
- package/lib/tree/util/registry-utils.d.ts +0 -192
- package/lib/tree/util/registry-utils.d.ts.map +0 -1
- package/lib/tree/util/registry-utils.js +0 -1214
- package/lib/tree/util/registry-utils.js.map +0 -1
- package/lib/tree/util/ruleset-trace.d.ts +0 -4
- package/lib/tree/util/ruleset-trace.d.ts.map +0 -1
- package/lib/tree/util/ruleset-trace.js +0 -14
- package/lib/tree/util/ruleset-trace.js.map +0 -1
- package/lib/tree/util/selector-compare.d.ts +0 -2
- package/lib/tree/util/selector-compare.d.ts.map +0 -1
- package/lib/tree/util/selector-compare.js +0 -2
- package/lib/tree/util/selector-compare.js.map +0 -1
- package/lib/tree/util/selector-match-core.d.ts +0 -184
- package/lib/tree/util/selector-match-core.d.ts.map +0 -1
- package/lib/tree/util/selector-match-core.js +0 -1603
- package/lib/tree/util/selector-match-core.js.map +0 -1
- package/lib/tree/util/selector-utils.d.ts +0 -30
- package/lib/tree/util/selector-utils.d.ts.map +0 -1
- package/lib/tree/util/selector-utils.js +0 -100
- package/lib/tree/util/selector-utils.js.map +0 -1
- package/lib/tree/util/serialize-helper.d.ts +0 -13
- package/lib/tree/util/serialize-helper.d.ts.map +0 -1
- package/lib/tree/util/serialize-helper.js +0 -387
- package/lib/tree/util/serialize-helper.js.map +0 -1
- package/lib/tree/util/serialize-types.d.ts +0 -9
- package/lib/tree/util/serialize-types.d.ts.map +0 -1
- package/lib/tree/util/serialize-types.js +0 -216
- package/lib/tree/util/serialize-types.js.map +0 -1
- package/lib/tree/util/should-operate.d.ts +0 -23
- package/lib/tree/util/should-operate.d.ts.map +0 -1
- package/lib/tree/util/should-operate.js +0 -46
- package/lib/tree/util/should-operate.js.map +0 -1
- package/lib/tree/util/sourcemap.d.ts +0 -7
- package/lib/tree/util/sourcemap.d.ts.map +0 -1
- package/lib/tree/util/sourcemap.js +0 -25
- package/lib/tree/util/sourcemap.js.map +0 -1
- package/lib/types/config.d.ts +0 -205
- package/lib/types/config.d.ts.map +0 -1
- package/lib/types/config.js +0 -2
- package/lib/types/config.js.map +0 -1
- package/lib/types/index.d.ts +0 -15
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/index.js +0 -3
- package/lib/types/index.js.map +0 -1
- package/lib/types/modes.d.ts.map +0 -1
- package/lib/types/modes.js +0 -2
- package/lib/types/modes.js.map +0 -1
- package/lib/types.d.ts +0 -61
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -2
- package/lib/types.js.map +0 -1
- package/lib/use-webpack-resolver.d.ts +0 -9
- package/lib/use-webpack-resolver.d.ts.map +0 -1
- package/lib/use-webpack-resolver.js +0 -41
- package/lib/use-webpack-resolver.js.map +0 -1
- package/lib/visitor/index.d.ts +0 -136
- package/lib/visitor/index.d.ts.map +0 -1
- package/lib/visitor/index.js +0 -135
- package/lib/visitor/index.js.map +0 -1
- package/lib/visitor/less-visitor.d.ts +0 -7
- package/lib/visitor/less-visitor.d.ts.map +0 -1
- package/lib/visitor/less-visitor.js.map +0 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { BitSetLibrary, isSubsetOf } from '../bitset.js';
|
|
2
|
+
import { compound, el, sel, pseudo, co, num, type ComplexSelector } from '../../index.js';
|
|
3
|
+
import { Context } from '../../../context.js';
|
|
4
|
+
|
|
5
|
+
describe('BitSet', () => {
|
|
6
|
+
it('can create a basic selector bitset', () => {
|
|
7
|
+
let library = new BitSetLibrary(['.foo', '.bar']);
|
|
8
|
+
expect(library.size).toBe(2);
|
|
9
|
+
let bitset = library.getBitset();
|
|
10
|
+
/** No bits are set */
|
|
11
|
+
expect(bitset.isEmpty()).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('won\'t expand size with existing values', () => {
|
|
15
|
+
let library = new BitSetLibrary(['.foo', '.bar']);
|
|
16
|
+
library.add('.foo');
|
|
17
|
+
expect(library.size).toBe(2);
|
|
18
|
+
library.add('.baz');
|
|
19
|
+
expect(library.size).toBe(3);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('can make bitset from iterable', () => {
|
|
23
|
+
let library = new BitSetLibrary();
|
|
24
|
+
let bitset = library.getBitset(['.foo', '.baz']);
|
|
25
|
+
expect(bitset.cardinality()).toBe(2);
|
|
26
|
+
expect(bitset.get(0)).toBe(1);
|
|
27
|
+
expect(bitset.get(1)).toBe(1);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('can get bitset from iterable', () => {
|
|
31
|
+
let library = new BitSetLibrary(['.foo', '.baz']);
|
|
32
|
+
let bitset = library.getBitset(['.foo', '.baz']);
|
|
33
|
+
expect(bitset.cardinality()).toBe(2);
|
|
34
|
+
expect(bitset.get(0)).toBe(1);
|
|
35
|
+
expect(bitset.get(1)).toBe(1);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('can calculate the union of two bitsets', () => {
|
|
39
|
+
let library = new BitSetLibrary(['.foo', '.baz']);
|
|
40
|
+
let bitset1 = library.getBitset(['.foo', '.baz']);
|
|
41
|
+
let bitset2 = library.getBitset(['.bar', '.baz']);
|
|
42
|
+
let union = bitset1.or(bitset2);
|
|
43
|
+
expect(union.cardinality()).toBe(3);
|
|
44
|
+
expect(union.get(0)).toBe(1);
|
|
45
|
+
expect(union.get(1)).toBe(1);
|
|
46
|
+
expect(union.get(2)).toBe(1);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('will throw an error if bitsets are from different libraries', () => {
|
|
50
|
+
let library1 = new BitSetLibrary(['.foo', '.baz']);
|
|
51
|
+
let library2 = new BitSetLibrary(['.bar', '.baz']);
|
|
52
|
+
let bitset1 = library1.getBitset(['.foo', '.baz']);
|
|
53
|
+
let bitset2 = library2.getBitset(['.bar', '.baz']);
|
|
54
|
+
expect(() => isSubsetOf(bitset1, bitset2)).toThrow('Bitsets must be from the same library');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('is a subset of itself', () => {
|
|
58
|
+
let library = new BitSetLibrary(['.foo', '.baz']);
|
|
59
|
+
let bitset = library.getBitset(['.foo', '.baz']);
|
|
60
|
+
expect(isSubsetOf(bitset, bitset)).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('is a subset of a larger bitset', () => {
|
|
64
|
+
let library = new BitSetLibrary(['.foo', '.baz']);
|
|
65
|
+
let bitset1 = library.getBitset(['.foo', '.baz']);
|
|
66
|
+
let bitset2 = library.getBitset(['.foo', '.baz', '.bar']);
|
|
67
|
+
expect(isSubsetOf(bitset1, bitset2)).toBe(true);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
describe('BitSets and selectors', () => {
|
|
72
|
+
let context: Context;
|
|
73
|
+
beforeEach(() => {
|
|
74
|
+
context = new Context();
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('can create a bitset from a selector', async () => {
|
|
78
|
+
let selector = el('.foo');
|
|
79
|
+
await selector.eval(context);
|
|
80
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['.foo']))).toBe(true);
|
|
81
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['.foo']))).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('bubbles selectors into compound keysets', async () => {
|
|
85
|
+
let selector = compound([el('.foo'), el('.bar')]);
|
|
86
|
+
await selector.eval(context);
|
|
87
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['.foo', '.bar']))).toBe(true);
|
|
88
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['.foo', '.bar']))).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('bubbles selectors into complex keysets #1', async () => {
|
|
92
|
+
let selector = sel([el('.foo'), co(' '), el('.bar')]);
|
|
93
|
+
await selector.eval(context);
|
|
94
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['.foo', ' ', '.bar']))).toBe(true);
|
|
95
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['.foo', ' ', '.bar']))).toBe(true);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('bubbles selectors into complex keysets #2', async () => {
|
|
99
|
+
let selector = sel([compound([el('a'), el('.foo')]), co(' '), el('.bar')]);
|
|
100
|
+
await selector.eval(context);
|
|
101
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['a', '.foo', ' ', '.bar']))).toBe(true);
|
|
102
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['a', '.foo', ' ', '.bar']))).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('bubbles selectors into complex keysets #3', async () => {
|
|
106
|
+
let selector = sel([compound([el('a'), el('.foo')]), co('>'), el('.bar'), co('+'), el('.baz')]);
|
|
107
|
+
await selector.eval(context);
|
|
108
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['a', '.foo', '>', '.bar', '+', '.baz']))).toBe(true);
|
|
109
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['a', '.foo', '>', '.bar', '+', '.baz']))).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('calculates subset keysets of complex selectors', async () => {
|
|
113
|
+
let sel1 = sel([compound([el('a'), el('.foo')]), co('>'), el('.bar'), co('+'), el('.baz')]);
|
|
114
|
+
let sel2 = sel([el('.foo'), co('>'), el('.bar'), co('+'), el('.baz')]);
|
|
115
|
+
let evald1 = await sel1.eval(context) as ComplexSelector;
|
|
116
|
+
let evald2 = await sel2.eval(context) as ComplexSelector;
|
|
117
|
+
expect(isSubsetOf(evald2.keySet, evald1.keySet)).toBe(true);
|
|
118
|
+
/** Larger one doesn't fit into smaller */
|
|
119
|
+
expect(isSubsetOf(evald1.keySet, evald2.keySet)).toBe(false);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test(':is doesn\'t get added to keyset', async () => {
|
|
123
|
+
let selector = sel([pseudo({ name: ':is', arg: el('.foo') })]);
|
|
124
|
+
await selector.eval(context);
|
|
125
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['.foo']))).toBe(true);
|
|
126
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['.foo']))).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test('other pseudo selectors get added to keyset', async () => {
|
|
130
|
+
let selector = sel([pseudo({ name: ':not', arg: el('.foo') })]);
|
|
131
|
+
await selector.eval(context);
|
|
132
|
+
expect(selector.keySet.equals(context.selectorBits.getBitset(['.foo', ':not']))).toBe(true);
|
|
133
|
+
expect(selector.visibleKeySet.equals(context.selectorBits.getBitset(['.foo', ':not']))).toBe(true);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test('nth selectors', async () => {
|
|
137
|
+
let sel = pseudo({ name: ':nth-child', arg: num(1) });
|
|
138
|
+
await sel.eval(context);
|
|
139
|
+
expect(sel.keySet.equals(context.selectorBits.getBitset([':nth-child(1)']))).toBe(true);
|
|
140
|
+
expect(sel.visibleKeySet.equals(context.selectorBits.getBitset([':nth-child(1)']))).toBe(true);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synchronous debug logging utility for tests.
|
|
3
|
+
* This file is in __tests__ so it won't be included in the public API.
|
|
4
|
+
*/
|
|
5
|
+
import { appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
|
|
9
|
+
// Find monorepo root by looking for pnpm-workspace.yaml
|
|
10
|
+
function findMonorepoRoot(start: string): string {
|
|
11
|
+
let dir = start;
|
|
12
|
+
while (dir !== '/') {
|
|
13
|
+
if (existsSync(join(dir, 'pnpm-workspace.yaml'))) {
|
|
14
|
+
return dir;
|
|
15
|
+
}
|
|
16
|
+
dir = dirname(dir);
|
|
17
|
+
}
|
|
18
|
+
return process.cwd();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
const ROOT = findMonorepoRoot(__dirname);
|
|
23
|
+
|
|
24
|
+
function getLogPath(): string {
|
|
25
|
+
if (process.env.DEBUG_LOG_PATH) {
|
|
26
|
+
return process.env.DEBUG_LOG_PATH;
|
|
27
|
+
}
|
|
28
|
+
const logDir = process.env.DEBUG_LOG_DIR || join(ROOT, '.cursor');
|
|
29
|
+
return join(logDir, 'debug.log');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function getDebugLogPath(): string {
|
|
33
|
+
return getLogPath();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const syncLog = (data: Record<string, unknown>) => {
|
|
37
|
+
try {
|
|
38
|
+
const logPath = getLogPath();
|
|
39
|
+
const logDir = dirname(logPath);
|
|
40
|
+
mkdirSync(logDir, { recursive: true });
|
|
41
|
+
// Session ID is optional per debug run; omit it unless explicitly configured.
|
|
42
|
+
const payload = { ...data };
|
|
43
|
+
if (!process.env.DEBUG_SESSION_ID) {
|
|
44
|
+
delete payload.sessionId;
|
|
45
|
+
}
|
|
46
|
+
appendFileSync(logPath, JSON.stringify(payload) + '\n');
|
|
47
|
+
} catch {
|
|
48
|
+
// Ignore errors
|
|
49
|
+
}
|
|
50
|
+
};
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { expect, describe, it } from 'vitest';
|
|
2
|
+
import { el, sel, sellist, compound, is, co, comment, type Selector } from '../../index.js';
|
|
3
|
+
import { tryExtendSelector } from '../extend-core.js';
|
|
4
|
+
|
|
5
|
+
function applyExtend(
|
|
6
|
+
selector: Selector,
|
|
7
|
+
target: Selector,
|
|
8
|
+
extendWith: Selector,
|
|
9
|
+
partial: boolean
|
|
10
|
+
): Selector {
|
|
11
|
+
const result = tryExtendSelector(selector, target, extendWith, partial);
|
|
12
|
+
expect(result.error).toBeUndefined();
|
|
13
|
+
return result.value;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
describe('Extend Comment and Whitespace Handling Tests', () => {
|
|
17
|
+
describe('Comment duplication prevention', () => {
|
|
18
|
+
it('should extend compound selector with :is() wrapper preserving comments', () => {
|
|
19
|
+
// Create a target selector with a comment in pre
|
|
20
|
+
const target = el('.b');
|
|
21
|
+
const commentNode = comment('/* brand */');
|
|
22
|
+
target.pre = [commentNode];
|
|
23
|
+
|
|
24
|
+
// Create selector that contains the target
|
|
25
|
+
const selector = compound([el('.a'), target]);
|
|
26
|
+
|
|
27
|
+
const extendWith = el('.c');
|
|
28
|
+
|
|
29
|
+
// Extend with partial matching - this creates :is() wrapper
|
|
30
|
+
const result = applyExtend(selector, target, extendWith, true);
|
|
31
|
+
|
|
32
|
+
// toTrimmedString should not show duplicated comments
|
|
33
|
+
const trimmedResult = result.toTrimmedString();
|
|
34
|
+
|
|
35
|
+
// Assert the exact output - shows how compound selector extension works with comments
|
|
36
|
+
expect(trimmedResult).toBe('.a:is(/* brand */.b, .c)');
|
|
37
|
+
|
|
38
|
+
// Should contain the comment only once, not multiple times
|
|
39
|
+
const commentCount = (trimmedResult.match(/\/\* brand \*\//g) || []).length;
|
|
40
|
+
expect(commentCount).toBe(1);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('should extend complex selector creating selector list (comment lost)', () => {
|
|
44
|
+
// Original: .a > /* b */.b
|
|
45
|
+
// Target: .b
|
|
46
|
+
// ExtendWith: .c, .d (selector list)
|
|
47
|
+
|
|
48
|
+
const commentNode = comment('/* b */');
|
|
49
|
+
const targetSelector = el('.b');
|
|
50
|
+
targetSelector.pre = [commentNode]; // Comment before .b
|
|
51
|
+
|
|
52
|
+
const selector = sel([el('.a'), co('>'), targetSelector]);
|
|
53
|
+
const target = el('.b');
|
|
54
|
+
const extendWith = sel([el('.c'), el('.d')]);
|
|
55
|
+
|
|
56
|
+
const result = applyExtend(selector as Selector, target, extendWith as Selector, true);
|
|
57
|
+
const trimmed = result.toTrimmedString();
|
|
58
|
+
|
|
59
|
+
// Assert the exact expected output - this shows how extension preserves comments
|
|
60
|
+
expect(trimmed).toBe('.a > :is(/* b */.b, .c.d)');
|
|
61
|
+
|
|
62
|
+
// Verify comment handling - comment should be preserved on the original component
|
|
63
|
+
expect(trimmed).toContain('/* b */');
|
|
64
|
+
|
|
65
|
+
// Verify no comment duplication
|
|
66
|
+
const commentCount = (trimmed.match(/\/\* b \*\//g) || []).length;
|
|
67
|
+
expect(commentCount).toBe(1);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should extend complex nested selector creating selector list', () => {
|
|
71
|
+
// target: .a > .b.c > .d.e
|
|
72
|
+
// comment before .b
|
|
73
|
+
const commentNode = comment('/* component */');
|
|
74
|
+
const bSelector = el('.b');
|
|
75
|
+
bSelector.pre = [commentNode];
|
|
76
|
+
|
|
77
|
+
const selector = sel([
|
|
78
|
+
el('.a'),
|
|
79
|
+
co('>'),
|
|
80
|
+
compound([bSelector, el('.c')]),
|
|
81
|
+
co('>'),
|
|
82
|
+
compound([el('.d'), el('.e')])
|
|
83
|
+
]);
|
|
84
|
+
|
|
85
|
+
const target = el('.b');
|
|
86
|
+
const extendWith = el('.f');
|
|
87
|
+
|
|
88
|
+
const result = applyExtend(selector as Selector, target, extendWith as Selector, true);
|
|
89
|
+
const trimmed = result.toTrimmedString();
|
|
90
|
+
|
|
91
|
+
// Assert the exact output - shows how component-level extension uses :is() wrapper
|
|
92
|
+
expect(trimmed).toBe('.a > :is(/* component */.b, .f).c > .d.e');
|
|
93
|
+
|
|
94
|
+
// Verify no comment duplication
|
|
95
|
+
const commentCount = (trimmed.match(/\/\* component \*\//g) || []).length;
|
|
96
|
+
expect(commentCount).toBe(1);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe('Whitespace preservation tests', () => {
|
|
101
|
+
it('should extend compound selector preserving pre-comments', () => {
|
|
102
|
+
// Test that whitespace structure around comments is maintained
|
|
103
|
+
const commentNode = comment('/* spacing */');
|
|
104
|
+
const targetSelector = el('.target');
|
|
105
|
+
|
|
106
|
+
// Set up: comment + target (simplified)
|
|
107
|
+
targetSelector.pre = [commentNode];
|
|
108
|
+
|
|
109
|
+
const selector = compound([el('.prefix'), targetSelector]);
|
|
110
|
+
const target = el('.target');
|
|
111
|
+
const extendWith = el('.extension');
|
|
112
|
+
|
|
113
|
+
const result = applyExtend(selector, target, extendWith, true);
|
|
114
|
+
|
|
115
|
+
// The result should preserve the original spacing intent
|
|
116
|
+
// without duplicating the comment structure
|
|
117
|
+
const trimmed = result.toTrimmedString();
|
|
118
|
+
|
|
119
|
+
// Assert exact output - shows how pre-comment whitespace works with compound selectors
|
|
120
|
+
expect(trimmed).toBe('.prefix:is(/* spacing */.target, .extension)');
|
|
121
|
+
|
|
122
|
+
// Should not duplicate comments
|
|
123
|
+
const commentCount = (trimmed.match(/\/\* spacing \*\//g) || []).length;
|
|
124
|
+
expect(commentCount).toBe(1);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('should extend compound selector with multiple comments', () => {
|
|
128
|
+
// Create a more complex scenario with multiple comments
|
|
129
|
+
const comment1 = comment('/* first */');
|
|
130
|
+
const comment2 = comment('/* second */');
|
|
131
|
+
|
|
132
|
+
const targetA = el('.a');
|
|
133
|
+
const targetB = el('.b');
|
|
134
|
+
targetA.pre = [comment1];
|
|
135
|
+
targetB.pre = [comment2];
|
|
136
|
+
|
|
137
|
+
const selector = compound([targetA, targetB]);
|
|
138
|
+
const target = el('.a');
|
|
139
|
+
const extendWith = el('.c');
|
|
140
|
+
|
|
141
|
+
const result = applyExtend(selector, target, extendWith, true);
|
|
142
|
+
const trimmed = result.toTrimmedString();
|
|
143
|
+
|
|
144
|
+
// Assert exact output - shows how multiple comments are handled in compound selectors
|
|
145
|
+
expect(trimmed).toBe(':is(/* first */.a, .c)/* second */.b');
|
|
146
|
+
|
|
147
|
+
// Verify each comment appears exactly once
|
|
148
|
+
expect((trimmed.match(/\/\* first \*\//g) || []).length).toBe(1);
|
|
149
|
+
expect((trimmed.match(/\/\* second \*\//g) || []).length).toBe(1);
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
describe('Edge cases', () => {
|
|
154
|
+
it('should handle extend with no pre/post gracefully', () => {
|
|
155
|
+
const selector = compound([el('.a'), el('.b')]);
|
|
156
|
+
const target = el('.b');
|
|
157
|
+
const extendWith = el('.c');
|
|
158
|
+
|
|
159
|
+
const result = applyExtend(selector, target, extendWith, true);
|
|
160
|
+
const trimmed = result.toTrimmedString();
|
|
161
|
+
|
|
162
|
+
expect(trimmed).toBe('.a:is(.b, .c)');
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('should handle nested :is() extension without comment duplication', () => {
|
|
166
|
+
// Test extending a selector that already contains :is()
|
|
167
|
+
const innerComment = comment('/* inner */');
|
|
168
|
+
const innerTarget = el('.inner');
|
|
169
|
+
innerTarget.pre = [innerComment];
|
|
170
|
+
|
|
171
|
+
const selector = is(sellist([innerTarget, el('.other')]));
|
|
172
|
+
const target = el('.inner');
|
|
173
|
+
const extendWith = el('.extended');
|
|
174
|
+
|
|
175
|
+
const result = applyExtend(selector, target, extendWith, false);
|
|
176
|
+
const trimmed = result.toTrimmedString();
|
|
177
|
+
|
|
178
|
+
// Assert exact output - shows how nested :is() extension works with full matching
|
|
179
|
+
// Original :is() should be preserved since it wasn't created by extend
|
|
180
|
+
expect(trimmed).toBe(':is(/* inner */.inner, .other, .extended)');
|
|
181
|
+
|
|
182
|
+
// Should not duplicate the comment
|
|
183
|
+
const commentCount = (trimmed.match(/\/\* inner \*\//g) || []).length;
|
|
184
|
+
expect(commentCount).toBe(1);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
});
|