@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,318 @@
|
|
|
1
|
+
import { Node } from '../node.js';
|
|
2
|
+
|
|
3
|
+
export type SerializeTypesOptions = {
|
|
4
|
+
// Include primitive main values next to the type when useful
|
|
5
|
+
showValues?: boolean;
|
|
6
|
+
// Include options next to the type when useful
|
|
7
|
+
showOptions?: boolean;
|
|
8
|
+
// Max length for printed strings; longer strings are truncated with …
|
|
9
|
+
maxStringLength?: number;
|
|
10
|
+
// Use shortType instead of type
|
|
11
|
+
useShortType?: boolean;
|
|
12
|
+
// Indentation size in spaces
|
|
13
|
+
indentSize?: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const defaultOptions: Required<SerializeTypesOptions> = {
|
|
17
|
+
showValues: true,
|
|
18
|
+
showOptions: false,
|
|
19
|
+
maxStringLength: 40,
|
|
20
|
+
useShortType: false,
|
|
21
|
+
indentSize: 2
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function isJessNode(value: unknown): value is Node {
|
|
25
|
+
return value instanceof Node;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
29
|
+
return value !== null && !Array.isArray(value) && typeof value === 'object';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function truncate(str: string, max: number): string {
|
|
33
|
+
if (str.length <= max) {
|
|
34
|
+
return str;
|
|
35
|
+
}
|
|
36
|
+
return `${str.slice(0, max - 1)}…`;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function formatPrimitive(value: unknown, opts: Required<SerializeTypesOptions>): string {
|
|
40
|
+
if (typeof value === 'string') {
|
|
41
|
+
const content = truncate(value, opts.maxStringLength);
|
|
42
|
+
return `'${content.replace(/'/g, '\\\'')}'`;
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
45
|
+
return String(value);
|
|
46
|
+
}
|
|
47
|
+
if (value === null) {
|
|
48
|
+
return 'null';
|
|
49
|
+
}
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
return 'undefined';
|
|
52
|
+
}
|
|
53
|
+
return String(value);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function indent(depth: number, size: number): string {
|
|
57
|
+
return ''.padStart(depth * size);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function summarizeArray(items: unknown[], opts: Required<SerializeTypesOptions>): string {
|
|
61
|
+
// For non-node arrays emit a compact summary: [a, b]
|
|
62
|
+
const parts = items.map((item) => {
|
|
63
|
+
if (isJessNode(item)) {
|
|
64
|
+
return opts.useShortType ? (item as any).shortType : (item as any).type;
|
|
65
|
+
}
|
|
66
|
+
if (Array.isArray(item)) {
|
|
67
|
+
return '[' + summarizeArray(item, opts) + ']';
|
|
68
|
+
}
|
|
69
|
+
return formatPrimitive(item, opts);
|
|
70
|
+
});
|
|
71
|
+
return parts.join(', ');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function serializeArray(arr: unknown[], depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
|
|
75
|
+
const pad = indent(depth, opts.indentSize);
|
|
76
|
+
if (arr.length === 0) {
|
|
77
|
+
return `${pad}[]`;
|
|
78
|
+
}
|
|
79
|
+
const first = arr[0];
|
|
80
|
+
if (isJessNode(first)) {
|
|
81
|
+
const inner = arr.map(item => serializeNode(item as Node, depth + 1, opts, visiting)).join('\n');
|
|
82
|
+
return `${pad}[\n${inner}\n${pad}]`;
|
|
83
|
+
}
|
|
84
|
+
// Not a node array; show compact
|
|
85
|
+
return `${pad}[${summarizeArray(arr, opts)}]`;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function serializePlainObject(obj: Record<string, unknown>, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
|
|
89
|
+
const keys = Object.keys(obj).filter(k => obj[k] !== undefined);
|
|
90
|
+
if (keys.length === 0) {
|
|
91
|
+
return '';
|
|
92
|
+
}
|
|
93
|
+
const lines: string[] = [];
|
|
94
|
+
for (const key of keys) {
|
|
95
|
+
const v = obj[key];
|
|
96
|
+
if (isJessNode(v)) {
|
|
97
|
+
const inner = '\n' + serializeNode(v, depth + 2, opts, visiting);
|
|
98
|
+
lines.push(`${indent(depth + 1, opts.indentSize)}${key}: ${inner}`);
|
|
99
|
+
} else if (Array.isArray(v)) {
|
|
100
|
+
const inner = serializeArray(v, depth + 2, opts, visiting);
|
|
101
|
+
lines.push(`${indent(depth + 1, opts.indentSize)}${key}:\n${inner}`);
|
|
102
|
+
} else if (isPlainObject(v)) {
|
|
103
|
+
const inner = serializePlainObject(v as Record<string, unknown>, depth + 1, opts, visiting);
|
|
104
|
+
if (inner) {
|
|
105
|
+
lines.push(`${indent(depth + 1, opts.indentSize)}${key}: {\n${inner}\n${indent(depth + 1, opts.indentSize)}}`);
|
|
106
|
+
} else {
|
|
107
|
+
lines.push(`${indent(depth + 1, opts.indentSize)}${key}: {}`);
|
|
108
|
+
}
|
|
109
|
+
} else {
|
|
110
|
+
lines.push(`${indent(depth + 1, opts.indentSize)}${key}: ${formatPrimitive(v, opts)}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return lines.join('\n');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function serializeNodeOptions(n: Node, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string | null {
|
|
117
|
+
if (!opts.showOptions) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
const nodeOptions = (n as any).options;
|
|
121
|
+
if (!nodeOptions || typeof nodeOptions !== 'object') {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
// Check if there are any non-undefined properties
|
|
125
|
+
const keys = Object.keys(nodeOptions).filter(k => nodeOptions[k] !== undefined);
|
|
126
|
+
if (keys.length === 0) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return serializePlainObject(nodeOptions, depth + 1, opts, visiting);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function getNodeRole(n: Node): string | undefined {
|
|
133
|
+
return (n as any).role ?? (n as any).options?.role;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function getNodeValue(n: Node): unknown {
|
|
137
|
+
const childKeys = (n.constructor as typeof Node).childKeys;
|
|
138
|
+
const NODE_INTERNAL = new Set([
|
|
139
|
+
'parent', 'index', 'frames', 'pre', 'post', 'state', 'nodeType',
|
|
140
|
+
'preEvaluated', 'evaluated',
|
|
141
|
+
'renderKey',
|
|
142
|
+
'isSelector', 'keySetLibrary', 'role',
|
|
143
|
+
'fullRender',
|
|
144
|
+
'rulesetRegistry', 'mixinRegistry', 'declarationRegistry', 'functionRegistry',
|
|
145
|
+
'rulesIndexed', '_indexing',
|
|
146
|
+
'_valueOf', '_keySet', '_visibleKeySet', '_requiredKeySet'
|
|
147
|
+
]);
|
|
148
|
+
|
|
149
|
+
if ((n as any).type === 'Color') {
|
|
150
|
+
const color = n as any;
|
|
151
|
+
const value: Record<string, unknown> = {};
|
|
152
|
+
if (color._nodeValue !== undefined) {
|
|
153
|
+
value.node = color._nodeValue;
|
|
154
|
+
}
|
|
155
|
+
if (color._rgbChannels !== undefined) {
|
|
156
|
+
value.rgb = color.rgb;
|
|
157
|
+
}
|
|
158
|
+
if (color._hslChannels !== undefined) {
|
|
159
|
+
value.hsl = color.hsl;
|
|
160
|
+
}
|
|
161
|
+
if (color._alphaValue !== undefined) {
|
|
162
|
+
value.alpha = color.alpha;
|
|
163
|
+
}
|
|
164
|
+
return Object.keys(value).length > 0 ? value : undefined;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (Array.isArray(childKeys)) {
|
|
168
|
+
if (childKeys.length === 1) {
|
|
169
|
+
return (n as any)[childKeys[0]!];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const obj: Record<string, unknown> = {};
|
|
173
|
+
for (const key of childKeys) {
|
|
174
|
+
const value = (n as any)[key];
|
|
175
|
+
if (value !== undefined) {
|
|
176
|
+
obj[key] = value;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
for (const key of Object.keys(n)) {
|
|
180
|
+
if (key.startsWith('_') || NODE_INTERNAL.has(key) || childKeys.includes(key)) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const value = (n as any)[key];
|
|
184
|
+
if (value !== undefined) {
|
|
185
|
+
obj[key] = value;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return Object.keys(obj).length > 0 ? obj : undefined;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const directValue = (n as any).value as unknown;
|
|
192
|
+
if (directValue !== undefined) {
|
|
193
|
+
return directValue;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const obj: Record<string, unknown> = {};
|
|
197
|
+
for (const key of Object.keys(n)) {
|
|
198
|
+
if (key.startsWith('_') || NODE_INTERNAL.has(key)) {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const value = (n as any)[key];
|
|
202
|
+
if (value !== undefined && !isJessNode(value) && !Array.isArray(value)) {
|
|
203
|
+
obj[key] = value;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return Object.keys(obj).length > 0 ? obj : undefined;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function serializeNode(n: Node, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
|
|
210
|
+
const typeName = opts.useShortType ? (n as any).shortType : (n as any).type;
|
|
211
|
+
const pad = indent(depth, opts.indentSize);
|
|
212
|
+
const role = getNodeRole(n);
|
|
213
|
+
const meta = role ? ` [role=${role}]` : '';
|
|
214
|
+
const open = `${pad}(${typeName}${meta}`;
|
|
215
|
+
|
|
216
|
+
// Protect against cycles
|
|
217
|
+
if (visiting.has(n)) {
|
|
218
|
+
return `${open} …)`;
|
|
219
|
+
}
|
|
220
|
+
visiting.add(n);
|
|
221
|
+
|
|
222
|
+
const value = getNodeValue(n);
|
|
223
|
+
const optionsStr = serializeNodeOptions(n, depth, opts, visiting);
|
|
224
|
+
|
|
225
|
+
// If the main value is a primitive, include it inline
|
|
226
|
+
if (
|
|
227
|
+
value === null
|
|
228
|
+
|| value === undefined
|
|
229
|
+
|| typeof value === 'string'
|
|
230
|
+
|| typeof value === 'number'
|
|
231
|
+
|| typeof value === 'boolean'
|
|
232
|
+
) {
|
|
233
|
+
visiting.delete(n);
|
|
234
|
+
if (optionsStr) {
|
|
235
|
+
if (opts.showValues && value !== undefined) {
|
|
236
|
+
const rendered = formatPrimitive(value, opts);
|
|
237
|
+
return `${open}\n${optionsStr}\n${indent(depth + 1, opts.indentSize)}${rendered}\n${pad})`;
|
|
238
|
+
}
|
|
239
|
+
return `${open}\n${optionsStr}\n${pad})`;
|
|
240
|
+
}
|
|
241
|
+
if (opts.showValues && value !== undefined) {
|
|
242
|
+
const rendered = formatPrimitive(value, opts);
|
|
243
|
+
return `${open} ${rendered})`;
|
|
244
|
+
}
|
|
245
|
+
return `${open})`;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// If the main value is a Node, print it on next line
|
|
249
|
+
if (isJessNode(value)) {
|
|
250
|
+
const inner = '\n' + serializeNode(value, depth + 1, opts, visiting);
|
|
251
|
+
visiting.delete(n);
|
|
252
|
+
if (optionsStr) {
|
|
253
|
+
return `${open}\n${optionsStr}${inner}\n${pad})`;
|
|
254
|
+
}
|
|
255
|
+
return `${open}${inner}\n${pad})`;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Special-case Number plain object: print compact form
|
|
259
|
+
if (typeName === 'Num' && isPlainObject(value)) {
|
|
260
|
+
const num = (value as any).number;
|
|
261
|
+
const keys = Object.keys(value as Record<string, unknown>).filter(k => (value as any)[k] !== undefined);
|
|
262
|
+
if (typeof num === 'number' && (keys.length === 1 || (keys.length === 0))) {
|
|
263
|
+
visiting.delete(n);
|
|
264
|
+
if (optionsStr) {
|
|
265
|
+
return `${open}\n${optionsStr}\n${indent(depth + 1, opts.indentSize)}${num}\n${pad})`;
|
|
266
|
+
}
|
|
267
|
+
return `${open} ${num})`;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// If the main value is an array
|
|
272
|
+
if (Array.isArray(value)) {
|
|
273
|
+
const arrStr = serializeArray(value, depth + 1, opts, visiting);
|
|
274
|
+
visiting.delete(n);
|
|
275
|
+
if (optionsStr) {
|
|
276
|
+
return `${open}\n${optionsStr}\n${arrStr}\n${pad})`;
|
|
277
|
+
}
|
|
278
|
+
return `${open}\n${arrStr}\n${pad})`;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// If the main value is a plain object, print key: value summaries
|
|
282
|
+
if (isPlainObject(value)) {
|
|
283
|
+
const inner = serializePlainObject(value as Record<string, unknown>, depth, opts, visiting);
|
|
284
|
+
visiting.delete(n);
|
|
285
|
+
if (optionsStr) {
|
|
286
|
+
return `${open}\n${optionsStr}${inner ? '\n' + inner : ''}\n${pad})`;
|
|
287
|
+
}
|
|
288
|
+
return inner ? `${open}\n${inner}\n${pad})` : `${open})`;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
visiting.delete(n);
|
|
292
|
+
if (optionsStr) {
|
|
293
|
+
return `${open}\n${optionsStr}\n${pad})`;
|
|
294
|
+
}
|
|
295
|
+
return `${open})`;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
function serializeUnknown(value: unknown, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
|
|
299
|
+
if (isJessNode(value)) {
|
|
300
|
+
return serializeNode(value, depth, opts, visiting);
|
|
301
|
+
}
|
|
302
|
+
if (Array.isArray(value)) {
|
|
303
|
+
const arr = summarizeArray(value, opts);
|
|
304
|
+
return `${indent(depth, opts.indentSize)}[${arr}]`;
|
|
305
|
+
}
|
|
306
|
+
if (isPlainObject(value)) {
|
|
307
|
+
const keys = Object.keys(value);
|
|
308
|
+
const parts = keys.map(k => `${k}: ${formatPrimitive((value as Record<string, unknown>)[k], opts)}`);
|
|
309
|
+
return `${indent(depth, opts.indentSize)}{ ${parts.join(', ')} }`;
|
|
310
|
+
}
|
|
311
|
+
return `${indent(depth, opts.indentSize)}${formatPrimitive(value, opts)}`;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export function serializeTypes(value: unknown, options?: SerializeTypesOptions): string {
|
|
315
|
+
const opts: Required<SerializeTypesOptions> = { ...defaultOptions, ...(options ?? {}) };
|
|
316
|
+
const visiting = new Set<Node>();
|
|
317
|
+
return serializeUnknown(value, 0, opts, visiting);
|
|
318
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { MathMode } from '../../types/modes.js';
|
|
2
|
+
import type { Operator } from './calculate.js';
|
|
3
|
+
import { isNode } from './is-node.js';
|
|
4
|
+
import { N } from '../node-type.js';
|
|
5
|
+
import type { Node } from '../node.js';
|
|
6
|
+
|
|
7
|
+
export type MathFrameState = {
|
|
8
|
+
mathMode: MathMode;
|
|
9
|
+
/**
|
|
10
|
+
* Boolean stack. The current frame is the top-most value.
|
|
11
|
+
* - `true` enables Less/Sass "math in parens" semantics
|
|
12
|
+
* - `false` explicitly disables it (e.g. for call args)
|
|
13
|
+
*/
|
|
14
|
+
parenFrames: ReadonlyArray<boolean>;
|
|
15
|
+
/** Number stack, modeled as a depth counter */
|
|
16
|
+
calcFrames: number;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export function isInParens(parenFrames: ReadonlyArray<boolean>): boolean {
|
|
20
|
+
return parenFrames.at(-1) ?? false;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Shared calculation decision logic for both eval-time (`Context.shouldOperate`)
|
|
25
|
+
* and parse-time decisions (Less→Jess conversion).
|
|
26
|
+
*
|
|
27
|
+
* This must remain behaviorally equivalent to `Context.shouldOperate`.
|
|
28
|
+
*/
|
|
29
|
+
export function shouldOperateWithMathFrames(
|
|
30
|
+
state: MathFrameState,
|
|
31
|
+
op: Operator,
|
|
32
|
+
left: Node,
|
|
33
|
+
right: Node
|
|
34
|
+
): boolean {
|
|
35
|
+
const { mathMode, calcFrames } = state;
|
|
36
|
+
const inParens = isInParens(state.parenFrames);
|
|
37
|
+
const inCalc = calcFrames !== 0;
|
|
38
|
+
|
|
39
|
+
if (inCalc) {
|
|
40
|
+
/** Only collapse safe units */
|
|
41
|
+
if (isNode(left, N.Dimension) && isNode(right, N.Dimension)) {
|
|
42
|
+
const lUnit = left.unit;
|
|
43
|
+
const rUnit = right.unit;
|
|
44
|
+
if ((op === '+' || op === '-') && lUnit === rUnit) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
/** Can't make square units */
|
|
48
|
+
if (op === '*' && (!lUnit || !rUnit)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/** Can't divide by a unit */
|
|
52
|
+
if (op === '/' && !rUnit) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Preserve CSS/Less slash syntax such as `font: small/20px` even under
|
|
61
|
+
// aggressive math modes. Keyword-like `Any` operands are overwhelmingly
|
|
62
|
+
// shorthand/value syntax, not arithmetic.
|
|
63
|
+
if (op === '/' && (isNode(left, N.Any) || isNode(right, N.Any))) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Parens for Less/SCSS will set `canOperate` to true */
|
|
68
|
+
if (mathMode === 'always' || inParens) {
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
if (mathMode === 'parens-division') {
|
|
72
|
+
return op !== '/';
|
|
73
|
+
}
|
|
74
|
+
if (mathMode === 'parens' || mathMode === 'strict') {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GenMapping,
|
|
3
|
+
addMapping,
|
|
4
|
+
setSourceContent,
|
|
5
|
+
toEncodedMap
|
|
6
|
+
} from '@jridgewell/gen-mapping';
|
|
7
|
+
import type { OutputWriter, SourceSegment } from './print.js';
|
|
8
|
+
|
|
9
|
+
export type BuildSourceMapOptions = {
|
|
10
|
+
file?: string;
|
|
11
|
+
sourcesContent?: Map<string, string>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export function buildSourceMap(writer: OutputWriter, opts: BuildSourceMapOptions = {}) {
|
|
15
|
+
const map = new GenMapping({ file: opts.file });
|
|
16
|
+
const segs: SourceSegment[] = writer.getSegments();
|
|
17
|
+
|
|
18
|
+
for (const s of segs) {
|
|
19
|
+
if (s.source) {
|
|
20
|
+
addMapping(map, {
|
|
21
|
+
generated: { line: s.genLine + 1, column: s.genColumn },
|
|
22
|
+
source: s.source,
|
|
23
|
+
original: { line: s.origLine + 1, column: s.origColumn }
|
|
24
|
+
});
|
|
25
|
+
const content = opts.sourcesContent?.get(s.source);
|
|
26
|
+
if (content !== undefined) {
|
|
27
|
+
setSourceContent(map, s.source, content);
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
addMapping(map, {
|
|
31
|
+
generated: { line: s.genLine + 1, column: s.genColumn }
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return toEncodedMap(map);
|
|
37
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import type { EqualityMode, MathMode, UnitMode } from './modes.js';
|
|
2
|
+
|
|
3
|
+
export type { EqualityMode, MathMode, UnitMode };
|
|
4
|
+
export type ExtendSelectorKind = 'simple' | 'basic' | 'pseudo' | 'complex' | 'compound';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Less compiler options.
|
|
8
|
+
*
|
|
9
|
+
* Kept in `@jesscss/core` to avoid cyclic workspace dependencies with `styles-config`.
|
|
10
|
+
* Based on less.js default-options.js and bin/lessc.
|
|
11
|
+
*/
|
|
12
|
+
export interface LessOptions {
|
|
13
|
+
/**
|
|
14
|
+
* Restrict which selector shapes are allowed in extend targets.
|
|
15
|
+
* When set, any other selector kind is a parse error.
|
|
16
|
+
*
|
|
17
|
+
* Supported kinds mirror selector node types in lowercase:
|
|
18
|
+
* - `simple`
|
|
19
|
+
* - `basic`
|
|
20
|
+
* - `pseudo`
|
|
21
|
+
* - `compound`
|
|
22
|
+
* - `complex`
|
|
23
|
+
*
|
|
24
|
+
* @default undefined
|
|
25
|
+
*/
|
|
26
|
+
allowExtendSelectors?: ExtendSelectorKind[];
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Inline Javascript - @plugin still allowed
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
javascriptEnabled?: boolean;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Outputs a makefile import dependency list to stdout.
|
|
36
|
+
* @default false
|
|
37
|
+
*/
|
|
38
|
+
depends?: boolean;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated Compress using less built-in compression.
|
|
42
|
+
* This does an okay job but does not utilise all the tricks of
|
|
43
|
+
* dedicated css compression.
|
|
44
|
+
* @default false
|
|
45
|
+
*/
|
|
46
|
+
compress?: boolean;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Runs the less parser and just reports errors without any output.
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
lint?: boolean;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Sets available include paths.
|
|
56
|
+
* If the file in an @import rule does not exist at that exact location,
|
|
57
|
+
* less will look for it at the location(s) passed to this option.
|
|
58
|
+
* @default []
|
|
59
|
+
*/
|
|
60
|
+
paths?: string[];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Color output in the terminal
|
|
64
|
+
* @default true
|
|
65
|
+
*/
|
|
66
|
+
color?: boolean;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @deprecated This option has confusing behavior and may be removed in a future version.
|
|
70
|
+
*
|
|
71
|
+
* Controls how @import statements for .less files are handled inside selector blocks (rulesets).
|
|
72
|
+
*
|
|
73
|
+
* Behavior:
|
|
74
|
+
* - @import at root level: Always processed
|
|
75
|
+
* - @import inside @-rules (@media, @supports, etc.): Processed (these are not selector blocks)
|
|
76
|
+
* - @import inside selector blocks (.class, #id, etc.): Behavior depends on this option
|
|
77
|
+
*
|
|
78
|
+
* Options:
|
|
79
|
+
* - `false` (default): All @import statements are processed regardless of context.
|
|
80
|
+
* - `true`: @import statements inside selector blocks are silently ignored and not output.
|
|
81
|
+
* - `'error'`: @import statements inside selector blocks will throw an error instead of being silently ignored.
|
|
82
|
+
*
|
|
83
|
+
* Note: Only affects .less file imports. CSS imports (url(...) or .css files) are
|
|
84
|
+
* always output as CSS @import statements regardless of this setting.
|
|
85
|
+
*
|
|
86
|
+
* @see https://github.com/less/less.js/issues/656
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
strictImports?: boolean | 'error';
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Allow Imports from Insecure HTTPS Hosts
|
|
93
|
+
* @default false
|
|
94
|
+
*/
|
|
95
|
+
insecure?: boolean;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Allows you to add a path to every generated import and url in your css.
|
|
99
|
+
* This does not affect less import statements that are processed, just ones
|
|
100
|
+
* that are left in the output css.
|
|
101
|
+
* @default ''
|
|
102
|
+
*/
|
|
103
|
+
rootpath?: string;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* By default URLs are kept as-is, so if you import a file in a sub-directory
|
|
107
|
+
* that references an image, exactly the same URL will be output in the css.
|
|
108
|
+
* This option allows you to re-write URL's in imported files so that the
|
|
109
|
+
* URL is always relative to the base imported file
|
|
110
|
+
* @default false
|
|
111
|
+
*/
|
|
112
|
+
rewriteUrls?: boolean | 'all' | 'local' | 'off';
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* How to process math operations
|
|
116
|
+
* - 'always': eagerly try to solve all operations
|
|
117
|
+
* - 'parens-division': require parens for division "/"
|
|
118
|
+
* - 'parens' or 'strict': require parens for all operations
|
|
119
|
+
* @default 'parens-division'
|
|
120
|
+
*/
|
|
121
|
+
mathMode?: MathMode;
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* How to handle unit conversions in math operations
|
|
125
|
+
* - 'loose': Less's default 1.x-4.x behavior
|
|
126
|
+
* - 'preserve': Create calc() expressions for unit errors
|
|
127
|
+
* - 'strict': strict unit mode
|
|
128
|
+
* @default 'loose'
|
|
129
|
+
*/
|
|
130
|
+
unitMode?: UnitMode;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* How to handle equality/coercion in guards and comparisons.
|
|
134
|
+
* - 'coerce': Less-compatible coercion behavior
|
|
135
|
+
* - 'strict': type-strict behavior
|
|
136
|
+
* @default 'coerce'
|
|
137
|
+
*/
|
|
138
|
+
equalityMode?: EqualityMode;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @deprecated Use `mathMode` instead. This option maps to `mathMode` as follows:
|
|
142
|
+
* - 0 or 'always' → 'always'
|
|
143
|
+
* - 1 or 'parens-division' → 'parens-division'
|
|
144
|
+
* - 2 or 'parens' or 'strict' → 'parens'
|
|
145
|
+
* - 3 or 'strict-legacy' → 'parens' (removed, will default to 'strict)
|
|
146
|
+
* @default undefined (uses mathMode if provided, otherwise 'parens-division')
|
|
147
|
+
*/
|
|
148
|
+
math?: 0 | 1 | 2 | 3 | MathMode | 'strict-legacy';
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* @deprecated Use `unitMode` instead. If `true`, sets `unitMode` to 'strict'.
|
|
152
|
+
* If `false` or undefined, uses the `unitMode` value (defaults to 'loose').
|
|
153
|
+
* @default false
|
|
154
|
+
*/
|
|
155
|
+
strictUnits?: boolean;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Effectively the declaration is put at the top of your base Less file,
|
|
159
|
+
* meaning it can be used but it also can be overridden if this variable
|
|
160
|
+
* is defined in the file.
|
|
161
|
+
* @default null
|
|
162
|
+
*/
|
|
163
|
+
globalVars?: Record<string, string> | null;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* As opposed to the global variable option, this puts the declaration at the
|
|
167
|
+
* end of your base file, meaning it will override anything defined in your Less file.
|
|
168
|
+
* @default null
|
|
169
|
+
*/
|
|
170
|
+
modifyVars?: Record<string, string> | null;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* This option allows you to specify a argument to go on to every URL.
|
|
174
|
+
* @default ''
|
|
175
|
+
*/
|
|
176
|
+
urlArgs?: string;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @removed The dumpLineNumbers option is not useful nor supported in browsers. Use sourcemaps instead.
|
|
180
|
+
*
|
|
181
|
+
* @default undefined
|
|
182
|
+
*/
|
|
183
|
+
dumpLineNumbers?: string;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Source map options
|
|
187
|
+
* @default undefined
|
|
188
|
+
*/
|
|
189
|
+
sourceMap?: boolean | {
|
|
190
|
+
sourceMapFullFilename?: string;
|
|
191
|
+
sourceMapRootpath?: string;
|
|
192
|
+
sourceMapBasepath?: string;
|
|
193
|
+
sourceMapURL?: string;
|
|
194
|
+
sourceMapFileInline?: boolean;
|
|
195
|
+
outputSourceFiles?: boolean;
|
|
196
|
+
disableSourcemapAnnotation?: boolean;
|
|
197
|
+
sourceMapOutputFilename?: string;
|
|
198
|
+
sourceMapFilename?: string;
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Verbose output
|
|
203
|
+
* @default false
|
|
204
|
+
*/
|
|
205
|
+
verbose?: boolean;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Silent mode (suppress errors)
|
|
209
|
+
* @default false
|
|
210
|
+
*/
|
|
211
|
+
silent?: boolean;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Quiet mode (suppress warnings)
|
|
215
|
+
* @default false
|
|
216
|
+
*/
|
|
217
|
+
quiet?: boolean;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @deprecated This is legacy Less behavior.
|
|
221
|
+
*
|
|
222
|
+
* Controls whether mixins and detached rulesets "leak" their inner rules.
|
|
223
|
+
* When true:
|
|
224
|
+
* - Mixins: Mixin and VarDeclaration nodes are 'public' and 'optional' respectively
|
|
225
|
+
* - Detached rulesets: Mixin and VarDeclaration nodes are 'public' and 'private' respectively
|
|
226
|
+
* When false:
|
|
227
|
+
* - Both mixins and detached rulesets: Mixin and VarDeclaration nodes are 'private'
|
|
228
|
+
* @default true
|
|
229
|
+
*/
|
|
230
|
+
leakyRules?: boolean;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Whether to collapse nested selectors (Less 1.x-4.x style flattening)
|
|
234
|
+
* When true, nested selectors like `.parent { .child { } }` are flattened to `.parent .child { }`
|
|
235
|
+
* @default false
|
|
236
|
+
*/
|
|
237
|
+
collapseNesting?: boolean;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* @deprecated This is legacy Less behavior.
|
|
241
|
+
*
|
|
242
|
+
* Whether to bubble root-only at-rules (@font-face, @keyframes, etc.) to the root
|
|
243
|
+
* when they are nested inside rulesets. Modern CSS supports nesting these at-rules.
|
|
244
|
+
* @default true
|
|
245
|
+
*/
|
|
246
|
+
bubbleRootAtRules?: boolean;
|
|
247
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ILexingResult, type IRecognitionException, type IToken } from '@chevrotain/types';
|
|
2
|
+
import type { Node } from '../tree/index.js';
|
|
3
|
+
|
|
4
|
+
export * from './modes.js';
|
|
5
|
+
export * from './config.js';
|
|
6
|
+
|
|
7
|
+
export interface IParseResult<T extends Node = Node> {
|
|
8
|
+
lexerResult: ILexingResult;
|
|
9
|
+
errors: IRecognitionException[];
|
|
10
|
+
tree: T;
|
|
11
|
+
warnings?: Array<{ message: string; token?: IToken; deprecation?: string }>;
|
|
12
|
+
}
|