@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
|
@@ -6,15 +6,41 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @todo - rewrite the above, this is no longer true
|
|
8
8
|
*/
|
|
9
|
+
|
|
9
10
|
/**
|
|
10
11
|
* Import from node.ts which applies all the prototype patches
|
|
11
12
|
* (nil, operate, treeContext) and re-exports from node-base.ts
|
|
12
13
|
*/
|
|
13
|
-
import {
|
|
14
|
-
|
|
14
|
+
import {
|
|
15
|
+
Node,
|
|
16
|
+
type LocationInfo,
|
|
17
|
+
type LocationInfoOrEmpty,
|
|
18
|
+
type OptionalLocation,
|
|
19
|
+
EVAL,
|
|
20
|
+
F_VISIBLE,
|
|
21
|
+
F_MAY_ASYNC,
|
|
22
|
+
F_STATIC,
|
|
23
|
+
F_NON_STATIC
|
|
24
|
+
} from './node.js';
|
|
25
|
+
import { type Context, TreeContext } from '../context.js';
|
|
15
26
|
import { compare } from './util/compare.js';
|
|
16
|
-
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
Node,
|
|
30
|
+
TreeContext,
|
|
31
|
+
type LocationInfo,
|
|
32
|
+
type LocationInfoOrEmpty,
|
|
33
|
+
type OptionalLocation,
|
|
34
|
+
EVAL,
|
|
35
|
+
F_VISIBLE,
|
|
36
|
+
F_MAY_ASYNC,
|
|
37
|
+
F_STATIC,
|
|
38
|
+
F_NON_STATIC
|
|
39
|
+
};
|
|
40
|
+
export { N } from './node-type.js';
|
|
41
|
+
|
|
17
42
|
import { Selector } from './selector.js';
|
|
43
|
+
|
|
18
44
|
export * from './at-rule.js';
|
|
19
45
|
export * from './block.js';
|
|
20
46
|
export * from './bool.js';
|
|
@@ -70,26 +96,27 @@ export * from './selector-interpolated.js';
|
|
|
70
96
|
export * from './default-guard.js';
|
|
71
97
|
export * from './rest.js';
|
|
72
98
|
export * from './url.js';
|
|
99
|
+
|
|
73
100
|
// Patch Selector.compare after all exports to avoid circular dependency
|
|
74
|
-
import {
|
|
101
|
+
import { selectorMatch } from './util/selector-match-core.js';
|
|
102
|
+
|
|
75
103
|
/** Patch Selector to avoid circularity */
|
|
76
|
-
Selector.prototype.compare = function
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
104
|
+
Selector.prototype.compare = function(other: Node, context?: Context) {
|
|
105
|
+
// Avoid `instanceof Selector` here: module identity can diverge under Vite/Vitest
|
|
106
|
+
// if the same file is loaded via different specifiers.
|
|
107
|
+
if (!!other && typeof other === 'object' && 'isSelector' in other && other.isSelector === true) {
|
|
108
|
+
const otherSelector = other as unknown as Selector;
|
|
109
|
+
const forward = selectorMatch(this, otherSelector, undefined, context);
|
|
110
|
+
if (forward.fullMatch) {
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
if (forward.partialMatch) {
|
|
114
|
+
return -1;
|
|
115
|
+
}
|
|
116
|
+
const backward = selectorMatch(otherSelector, this, undefined, context);
|
|
117
|
+
if (backward.partialMatch) {
|
|
118
|
+
return 1;
|
|
92
119
|
}
|
|
93
|
-
|
|
120
|
+
}
|
|
121
|
+
return compare(this.valueOf(), other?.valueOf?.());
|
|
94
122
|
};
|
|
95
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { Node, F_MAY_ASYNC, F_VISIBLE, F_NON_STATIC, defineType } from './node.js';
|
|
2
|
+
import { Any, type AnyRole, type AnyOptions } from './any.js';
|
|
3
|
+
import type { Context } from '../context.js';
|
|
4
|
+
import { BasicSelector } from './selector-basic.js';
|
|
5
|
+
import { CompoundSelector } from './selector-compound.js';
|
|
6
|
+
import type { Selector } from './selector.js';
|
|
7
|
+
import { PseudoSelector } from './selector-pseudo.js';
|
|
8
|
+
import { isNode } from './util/is-node.js';
|
|
9
|
+
import { N } from './node-type.js';
|
|
10
|
+
import { type PrintOptions, getPrintOptions } from './util/print.js';
|
|
11
|
+
import { type MaybePromise, serialForEach, isThenable } from '@jesscss/awaitable-pipe';
|
|
12
|
+
|
|
13
|
+
// Placeholder that's very unlikely to appear in user strings
|
|
14
|
+
// but is also easily typeable for tests
|
|
15
|
+
export const INTERPOLATION_PLACEHOLDER = '%%';
|
|
16
|
+
const INTERPOLATION_PLACEHOLDER_REGEXP = /%%/g;
|
|
17
|
+
|
|
18
|
+
function shouldWrapSelectorInIs(replacement: Node): boolean {
|
|
19
|
+
if (isNode(replacement, N.SelectorList)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (isNode(replacement, N.ComplexSelector)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (replacement.type === 'SelectorCapture') {
|
|
26
|
+
const arg = (replacement as unknown as { value: Node }).value;
|
|
27
|
+
return isNode(arg, N.SelectorList) || isNode(arg, N.ComplexSelector);
|
|
28
|
+
}
|
|
29
|
+
const str = String(replacement.valueOf?.() ?? replacement);
|
|
30
|
+
return str.includes(',');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getIsWrapperArg(replacement: Node): Node {
|
|
34
|
+
if (replacement.type === 'SelectorCapture') {
|
|
35
|
+
return (replacement as unknown as { value: Node }).value;
|
|
36
|
+
}
|
|
37
|
+
return replacement;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function serializeGeneratedIsWrapper(replacement: Node): string {
|
|
41
|
+
const arg = getIsWrapperArg(replacement);
|
|
42
|
+
const pseudo = PseudoSelector.create({ name: ':is', arg });
|
|
43
|
+
pseudo.generated = true;
|
|
44
|
+
return pseudo.toTrimmedString().replace(/\n\s*/g, ' ');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export type InterpolatedValue = {
|
|
48
|
+
/** String with INTERPOLATION_PLACEHOLDER placeholders */
|
|
49
|
+
source: string;
|
|
50
|
+
replacements: Node[];
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export type InterpolatedChildData = { source: string; replacements: Node[] };
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Merge an interface to declare the specific types
|
|
57
|
+
*
|
|
58
|
+
* @todo - Instead of extending simple selector, create a selector "wrapper"
|
|
59
|
+
* that goes around expressions and interpolated values, so that it
|
|
60
|
+
* casts as a selector after evaluation.
|
|
61
|
+
*
|
|
62
|
+
* This would eliminate the need for the `evalToSelector` and `evalToGeneric`
|
|
63
|
+
* methods, because the wrapper would handle the returned node type.
|
|
64
|
+
*/
|
|
65
|
+
export interface Interpolated<
|
|
66
|
+
Role extends AnyRole = AnyRole
|
|
67
|
+
> extends Node<InterpolatedValue, AnyOptions<Role>, InterpolatedChildData> {
|
|
68
|
+
type: 'Interpolated';
|
|
69
|
+
shortType: 'interpolated';
|
|
70
|
+
eval(context: Context): MaybePromise<Any<Role>>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* An interpolated value is one that contains
|
|
74
|
+
* reference variables, or expressions, but
|
|
75
|
+
* which MUST resolve to a node with a string value
|
|
76
|
+
* (like Anonymous) when evaluated.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* in Less:
|
|
80
|
+
* - `@@foo` is an interpolated variable
|
|
81
|
+
* - `--prop-@{foo}` is an interpolated property
|
|
82
|
+
*/
|
|
83
|
+
export class Interpolated<
|
|
84
|
+
Role extends AnyRole = AnyRole
|
|
85
|
+
> extends Node<InterpolatedValue, AnyOptions<Role>, InterpolatedChildData> {
|
|
86
|
+
static override childKeys = ['source', 'replacements'] as const;
|
|
87
|
+
|
|
88
|
+
source!: string;
|
|
89
|
+
replacements!: Node[];
|
|
90
|
+
|
|
91
|
+
constructor(value: InterpolatedValue, options?: AnyOptions<Role>, location?: any, treeContext?: any) {
|
|
92
|
+
super(value, options, location, treeContext);
|
|
93
|
+
this.source = value.source;
|
|
94
|
+
this.replacements = value.replacements;
|
|
95
|
+
for (const r of this.replacements) {
|
|
96
|
+
if (r instanceof Node) {
|
|
97
|
+
this.adopt(r);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Interpolated nodes are always non-static and may be async
|
|
101
|
+
this.addFlags(F_VISIBLE, F_MAY_ASYNC, F_NON_STATIC);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
override clone(deep?: boolean): this {
|
|
105
|
+
const replacements = deep
|
|
106
|
+
? this.replacements.map(replacement => replacement.clone(true))
|
|
107
|
+
: this.replacements;
|
|
108
|
+
const node = new (this.constructor as typeof Interpolated<Role>)(
|
|
109
|
+
{ source: this.source, replacements: [] },
|
|
110
|
+
this.options ? { ...this.options } : undefined,
|
|
111
|
+
this.location,
|
|
112
|
+
this.treeContext
|
|
113
|
+
) as this;
|
|
114
|
+
node.inherit(this);
|
|
115
|
+
node.replacements = replacements;
|
|
116
|
+
if (deep) {
|
|
117
|
+
for (const replacement of replacements) {
|
|
118
|
+
node.adopt(replacement);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return node;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
override valueOf(): string {
|
|
125
|
+
return this.source;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private _withReplacements(replacements: Node[]): this {
|
|
129
|
+
const node = new (this.constructor as typeof Interpolated<Role>)(
|
|
130
|
+
{ source: this.source, replacements: [] },
|
|
131
|
+
this.options ? { ...this.options } : undefined,
|
|
132
|
+
this.location,
|
|
133
|
+
this.treeContext
|
|
134
|
+
) as this;
|
|
135
|
+
node.inherit(this);
|
|
136
|
+
node.replacements = replacements;
|
|
137
|
+
return node;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
replace(replacements?: Node[], options?: PrintOptions): string {
|
|
141
|
+
const printOpts = getPrintOptions(options);
|
|
142
|
+
const context = printOpts.context;
|
|
143
|
+
const source = this.get('source', context);
|
|
144
|
+
const activeReplacements = replacements ?? this.get('replacements', context);
|
|
145
|
+
let output = source;
|
|
146
|
+
let i = 0;
|
|
147
|
+
let w = printOpts!.writer;
|
|
148
|
+
INTERPOLATION_PLACEHOLDER_REGEXP.lastIndex = 0;
|
|
149
|
+
output = output.replace(INTERPOLATION_PLACEHOLDER_REGEXP, () => {
|
|
150
|
+
let replacement: Node | undefined;
|
|
151
|
+
try {
|
|
152
|
+
replacement = activeReplacements[i++];
|
|
153
|
+
} catch (error: unknown) {
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
let result = '';
|
|
157
|
+
if (replacement) {
|
|
158
|
+
if (isNode(replacement, N.Reference)) {
|
|
159
|
+
// Preserve exact interpolation reference syntax (including quoted property keys).
|
|
160
|
+
result = w.capture(() => replacement.toTrimmedString(printOpts));
|
|
161
|
+
} else if (isNode(replacement, N.Quoted)) {
|
|
162
|
+
// Interpolated string slots merge raw string content.
|
|
163
|
+
// Using valueOf() avoids re-emitting inner quote delimiters.
|
|
164
|
+
result = String(replacement.valueOf());
|
|
165
|
+
} else {
|
|
166
|
+
result = w.capture(() => replacement!.toTrimmedString(printOpts));
|
|
167
|
+
}
|
|
168
|
+
if (!isNode(replacement, N.Reference)) {
|
|
169
|
+
result = result.trim();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
return output;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
override toTrimmedString(options?: PrintOptions): string {
|
|
179
|
+
options = getPrintOptions(options);
|
|
180
|
+
const w = options.writer!;
|
|
181
|
+
const mark = w.mark();
|
|
182
|
+
const result = this.replace(undefined, options);
|
|
183
|
+
w.add(result, this);
|
|
184
|
+
return w.getSince(mark);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Can turn simple #id, .class, element or SelectorCapture into a selector.
|
|
189
|
+
* Legacy "list of mixin references" (e.g. @var: .a, .b, .c) is not supported; use *[.a, .b, .c].
|
|
190
|
+
*/
|
|
191
|
+
createSelector(context?: Context) {
|
|
192
|
+
const source = this.get('source', context);
|
|
193
|
+
const replacements = this.get('replacements', context);
|
|
194
|
+
const segments = source.split(INTERPOLATION_PLACEHOLDER);
|
|
195
|
+
const isWholeSelectorInterpolation = (
|
|
196
|
+
replacements.length === 1
|
|
197
|
+
&& segments.length === 2
|
|
198
|
+
&& segments[0]!.trim() === ''
|
|
199
|
+
&& segments[1]!.trim() === ''
|
|
200
|
+
);
|
|
201
|
+
// For full-selector interpolation, collapse directly to the resolved selector/text.
|
|
202
|
+
// Generated :is wrappers are only needed for embedded interpolation fragments.
|
|
203
|
+
if (isWholeSelectorInterpolation) {
|
|
204
|
+
const replacement = replacements[0]!;
|
|
205
|
+
if (context && !replacement.evaluated) {
|
|
206
|
+
throw new Error('Cannot create selector from un-evaluated interpolated node');
|
|
207
|
+
}
|
|
208
|
+
if (isNode(replacement, N.Selector)) {
|
|
209
|
+
return replacement.clone(false).inherit(this) as Selector;
|
|
210
|
+
}
|
|
211
|
+
return new BasicSelector(replacement.toTrimmedString().trim()).inherit(this);
|
|
212
|
+
}
|
|
213
|
+
let output = '';
|
|
214
|
+
for (let [i, replacement] of replacements.entries()) {
|
|
215
|
+
if (context && !replacement.evaluated) {
|
|
216
|
+
throw new Error('Cannot create selector from un-evaluated interpolated node');
|
|
217
|
+
}
|
|
218
|
+
let part = replacement.toTrimmedString();
|
|
219
|
+
if (shouldWrapSelectorInIs(replacement)) {
|
|
220
|
+
part = serializeGeneratedIsWrapper(replacement);
|
|
221
|
+
}
|
|
222
|
+
output += (segments[i] ?? '') + part;
|
|
223
|
+
}
|
|
224
|
+
// Preserve any trailing literal segment after the last interpolation placeholder.
|
|
225
|
+
if (segments.length > replacements.length) {
|
|
226
|
+
output += segments.slice(replacements.length).join(INTERPOLATION_PLACEHOLDER);
|
|
227
|
+
}
|
|
228
|
+
// Interpolated selector output can produce compound selectors (e.g. ".a#b").
|
|
229
|
+
// Preserve token boundaries so keySet/registry lookup can match correctly.
|
|
230
|
+
const simpleTokens = output.match(/[#.][^#.\s]+|[^#.\s]+/g) ?? [output];
|
|
231
|
+
if (
|
|
232
|
+
simpleTokens.length > 1
|
|
233
|
+
&& !output.includes(':')
|
|
234
|
+
&& !output.includes('[')
|
|
235
|
+
&& !output.includes('&')
|
|
236
|
+
) {
|
|
237
|
+
return new CompoundSelector(simpleTokens.map(token => new BasicSelector(token))).inherit(this);
|
|
238
|
+
}
|
|
239
|
+
return new BasicSelector(output).inherit(this);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
createGeneric(context?: Context) {
|
|
243
|
+
const trimmedString = this.toTrimmedString(context ? { context } : undefined);
|
|
244
|
+
let any = new Any<Role>(trimmedString, { role: this.options.role }).inherit(this);
|
|
245
|
+
return any;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/** Convenience: evaluate replacements then convert to Selector (BasicSelector or SelectorList) */
|
|
249
|
+
evalToSelector(context: Context): MaybePromise<Selector> {
|
|
250
|
+
const out = this._evalToInterpolated(context);
|
|
251
|
+
if (isThenable(out)) {
|
|
252
|
+
return (out as Promise<Interpolated<Role>>).then(node => node.createSelector(context));
|
|
253
|
+
}
|
|
254
|
+
return (out as Interpolated<Role>).createSelector(context);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
override evalNode(context: Context): MaybePromise<Any> {
|
|
258
|
+
const out = this._evalToInterpolated(context);
|
|
259
|
+
if (isThenable(out)) {
|
|
260
|
+
return (out as Promise<Interpolated<Role>>).then((node) => {
|
|
261
|
+
return node.createGeneric(context);
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const result = (out as Interpolated<Role>).createGeneric(context);
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Just evaluate replacements and return. We don't stringify yet,
|
|
270
|
+
* because depending on the context, it will turn into different
|
|
271
|
+
* node types.
|
|
272
|
+
*/
|
|
273
|
+
override preEval(context: Context): MaybePromise<this> {
|
|
274
|
+
if (this.preEvaluated) {
|
|
275
|
+
return this;
|
|
276
|
+
}
|
|
277
|
+
const node = this.clone() as this;
|
|
278
|
+
node.preEvaluated = true;
|
|
279
|
+
const replacements = [...this.replacements];
|
|
280
|
+
let changed = false;
|
|
281
|
+
const maybe = serialForEach(replacements, (replacement, idx) => {
|
|
282
|
+
const out = replacement.preEval(context);
|
|
283
|
+
if (isThenable(out)) {
|
|
284
|
+
return (out as Promise<Node>).then((result) => {
|
|
285
|
+
if (result !== replacement) {
|
|
286
|
+
replacements[idx] = result;
|
|
287
|
+
changed = true;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
if ((out as Node) !== replacement) {
|
|
292
|
+
replacements[idx] = out as Node;
|
|
293
|
+
changed = true;
|
|
294
|
+
}
|
|
295
|
+
return undefined;
|
|
296
|
+
});
|
|
297
|
+
if (isThenable(maybe)) {
|
|
298
|
+
return (maybe as Promise<void>).then(() => {
|
|
299
|
+
if (changed) {
|
|
300
|
+
node.replacements = replacements;
|
|
301
|
+
}
|
|
302
|
+
return node;
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
if (changed) {
|
|
306
|
+
node.replacements = replacements;
|
|
307
|
+
}
|
|
308
|
+
return node;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
_evalToInterpolated(context: Context): MaybePromise<this> {
|
|
312
|
+
let node = this;
|
|
313
|
+
let replacements = [...node.get('replacements', context)];
|
|
314
|
+
const markEvaluated = (result: Node): Node => {
|
|
315
|
+
result.evaluated = true;
|
|
316
|
+
return result;
|
|
317
|
+
};
|
|
318
|
+
|
|
319
|
+
let maybe = serialForEach(replacements, (n, idx) => {
|
|
320
|
+
const out = n.eval(context);
|
|
321
|
+
if (isThenable(out)) {
|
|
322
|
+
return (out as Promise<Node>).then((result) => {
|
|
323
|
+
replacements[idx] = markEvaluated(result);
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
replacements[idx] = markEvaluated(out as Node);
|
|
327
|
+
return undefined;
|
|
328
|
+
});
|
|
329
|
+
if (isThenable(maybe)) {
|
|
330
|
+
return maybe.then(() => {
|
|
331
|
+
if (node === this) {
|
|
332
|
+
return this._withReplacements(replacements);
|
|
333
|
+
}
|
|
334
|
+
node.replacements = replacements;
|
|
335
|
+
return node;
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
if (node === this) {
|
|
339
|
+
return this._withReplacements(replacements);
|
|
340
|
+
}
|
|
341
|
+
node.replacements = replacements;
|
|
342
|
+
return node;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
export const interpolated = defineType(Interpolated, 'Interpolated');
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Node, defineType } from './node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A plain JS array.
|
|
5
|
+
*/
|
|
6
|
+
export interface JsArray {
|
|
7
|
+
type: 'JsArray';
|
|
8
|
+
shortType: 'jsarray';
|
|
9
|
+
}
|
|
10
|
+
export class JsArray extends Node<readonly any[]> {
|
|
11
|
+
static override childKeys = null as null;
|
|
12
|
+
|
|
13
|
+
value!: readonly any[];
|
|
14
|
+
|
|
15
|
+
constructor(value: readonly any[], options?: any, location?: any, treeContext?: any) {
|
|
16
|
+
super(value, options, location, treeContext);
|
|
17
|
+
this.value = value;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const jsarray = defineType(JsArray, 'JsArray', 'jsarray');
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type Context } from '../context.js';
|
|
2
|
+
import { Node, defineType } from './node.js';
|
|
3
|
+
import { cast } from './util/cast.js';
|
|
4
|
+
import { type PrintOptions, getPrintOptions } from './util/print.js';
|
|
5
|
+
import { type MaybePromise } from '@jesscss/awaitable-pipe';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Deprecated Less feature
|
|
9
|
+
*
|
|
10
|
+
* @deprecated - use `@-use` instead
|
|
11
|
+
*/
|
|
12
|
+
export interface JsExpression extends Node<string> {
|
|
13
|
+
type: 'JsExpression';
|
|
14
|
+
shortType: 'jsexpr';
|
|
15
|
+
eval(context: Context): Promise<Node>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class JsExpression extends Node<string> {
|
|
19
|
+
static override childKeys = null as null;
|
|
20
|
+
|
|
21
|
+
value!: string;
|
|
22
|
+
|
|
23
|
+
constructor(value: string, options?: any, location?: any, treeContext?: any) {
|
|
24
|
+
super(value, options, location, treeContext);
|
|
25
|
+
this.value = value;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
override toTrimmedString(options?: PrintOptions): string {
|
|
29
|
+
options = getPrintOptions(options);
|
|
30
|
+
const w = options.writer!;
|
|
31
|
+
const mark = w.mark();
|
|
32
|
+
w.add('`', this);
|
|
33
|
+
w.add(this.value);
|
|
34
|
+
w.add('`');
|
|
35
|
+
return w.getSince(mark);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @todo - install deno-bin to run scripts securely
|
|
40
|
+
* @todo - Figure out pipe / MaybePromise when this is actually evaluating JS
|
|
41
|
+
*/
|
|
42
|
+
override evalNode(context: Context): Promise<Node> {
|
|
43
|
+
return (async () => {
|
|
44
|
+
const result = await eval(this.value);
|
|
45
|
+
return cast(result);
|
|
46
|
+
})();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const jsexpr = defineType(JsExpression, 'JsExpression', 'jsexpr');
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Node, defineType, type OptionalLocation, type TreeContext, type NodeOptions } from './node.js';
|
|
2
|
+
|
|
3
|
+
type Fn = (...args: any[]) => any;
|
|
4
|
+
/**
|
|
5
|
+
* A JS function.
|
|
6
|
+
*/
|
|
7
|
+
export interface JsFunction {
|
|
8
|
+
type: 'JsFunction';
|
|
9
|
+
shortType: 'jsfunc';
|
|
10
|
+
}
|
|
11
|
+
export class JsFunction extends Node<Fn> {
|
|
12
|
+
static override childKeys = null as null;
|
|
13
|
+
|
|
14
|
+
value!: Fn;
|
|
15
|
+
name?: string | undefined;
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
value: { name: string; fn: Fn } | Fn,
|
|
19
|
+
options?: NodeOptions,
|
|
20
|
+
location?: OptionalLocation,
|
|
21
|
+
treeContext?: TreeContext
|
|
22
|
+
) {
|
|
23
|
+
const fn = typeof value === 'function' ? value : value.fn;
|
|
24
|
+
|
|
25
|
+
super(fn, options, location, treeContext);
|
|
26
|
+
this.value = fn;
|
|
27
|
+
this.name = typeof value === 'function' ? undefined : value.name;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const jsfunc = defineType(JsFunction, 'JsFunction', 'jsfunc');
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Node, defineType } from './node.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A plain JS object.
|
|
5
|
+
*/
|
|
6
|
+
export interface JsObject {
|
|
7
|
+
type: 'JsObject';
|
|
8
|
+
shortType: 'jsobj';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class JsObject extends Node<Record<string, any>> {
|
|
12
|
+
static override childKeys = null as null;
|
|
13
|
+
|
|
14
|
+
value!: Record<string, any>;
|
|
15
|
+
|
|
16
|
+
constructor(value: Record<string, any>, options?: any, location?: any, treeContext?: any) {
|
|
17
|
+
super(value, options, location, treeContext);
|
|
18
|
+
this.value = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const jsobj = defineType(JsObject, 'JsObject', 'jsobj');
|