@jesscss/core 2.0.0-alpha.5 → 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 -98
- package/lib/tree/ampersand.d.ts.map +0 -1
- package/lib/tree/ampersand.js +0 -319
- 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,117 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { OutputWriter, getPrintOptions } from '../print.js';
|
|
3
|
+
import { buildSourceMap } from '../sourcemap.js';
|
|
4
|
+
import { rules, decl, any, ruleset, sellist, sel, el } from '../../index.js';
|
|
5
|
+
|
|
6
|
+
describe('source map segments', () => {
|
|
7
|
+
it('collects segments for simple declaration', () => {
|
|
8
|
+
const w = new OutputWriter();
|
|
9
|
+
const root = rules([
|
|
10
|
+
decl({ name: any('color'), value: any('red') })
|
|
11
|
+
]);
|
|
12
|
+
// fake location & file for mapping
|
|
13
|
+
(root.value[0] as any)._location = [0, 1, 1, 0, 1, 6];
|
|
14
|
+
(root as any).treeContext.file = { name: 'root.jess', path: '.', fullPath: '/abs/root.jess' };
|
|
15
|
+
const css = root.toString(getPrintOptions({ writer: w }));
|
|
16
|
+
expect(css).toBe('color: red;\n');
|
|
17
|
+
const segs = w.getSegments();
|
|
18
|
+
// Should have at least one segment at start
|
|
19
|
+
expect(segs[0]?.genLine).toBe(0);
|
|
20
|
+
expect(segs[0]?.genColumn).toBe(0);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('maps nested rules content lines', () => {
|
|
24
|
+
const w = new OutputWriter();
|
|
25
|
+
const nested = rules([
|
|
26
|
+
ruleset({
|
|
27
|
+
selector: sellist([sel([el('.a')])]),
|
|
28
|
+
rules: rules([
|
|
29
|
+
decl({ name: any('x'), value: any('y') })
|
|
30
|
+
])
|
|
31
|
+
})
|
|
32
|
+
]);
|
|
33
|
+
// attach fake locations and files
|
|
34
|
+
const rs = (nested.value[0] as any).rules;
|
|
35
|
+
(rs.value[0] as any)._location = [0, 1, 3, 0, 1, 8];
|
|
36
|
+
(nested as any).treeContext.file = { name: 'nested.jess', path: '.', fullPath: '/abs/nested.jess' };
|
|
37
|
+
const css = nested.toString(getPrintOptions({ writer: w }));
|
|
38
|
+
expect(css).toBe('.a {\n x: y;\n}\n');
|
|
39
|
+
const segs = w.getSegments();
|
|
40
|
+
// Segment should exist on the generated line containing "x: y;"
|
|
41
|
+
const lines = css.split('\n');
|
|
42
|
+
const lineIdx = lines.findIndex(l => l.includes('x: y;'));
|
|
43
|
+
const hasInnerLine = segs.some(s => s.genLine === lineIdx);
|
|
44
|
+
expect(hasInnerLine, `expected a segment on generated line ${lineIdx}`).toBe(true);
|
|
45
|
+
const map = buildSourceMap(w, { file: 'out.css' });
|
|
46
|
+
expect(map.version).toBe(3);
|
|
47
|
+
expect(map.file).toBe('out.css');
|
|
48
|
+
expect(Array.isArray(map.sources)).toBe(true);
|
|
49
|
+
expect(typeof map.mappings).toBe('string');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('writer line/column advance for newlines between rules', () => {
|
|
53
|
+
const w = new OutputWriter();
|
|
54
|
+
const a = decl({ name: any('a'), value: any('1') });
|
|
55
|
+
a.post = ['\n\n\n'];
|
|
56
|
+
const b = decl({ name: any('b'), value: any('2') });
|
|
57
|
+
// Attach fake locations so segments are recorded (orig lines are 1-based here)
|
|
58
|
+
a._location = [0, 1, 1, 0, 1, 5]; // original line 1 (0-based 0)
|
|
59
|
+
b._location = [0, 4, 1, 0, 4, 5]; // original line 2 (0-based 1)
|
|
60
|
+
const root = rules([a, b]);
|
|
61
|
+
const css = root.toString(getPrintOptions({ writer: w }));
|
|
62
|
+
expect(css).toBe('a: 1;\n' + 'b: 2;\n');
|
|
63
|
+
// After first declaration 'a: 1;', writer should have advanced one line on the newline
|
|
64
|
+
// Find index of newline and validate writer's internal line/column
|
|
65
|
+
const idx = css.indexOf('\n');
|
|
66
|
+
expect(idx).toBeGreaterThan(0);
|
|
67
|
+
// Simulate writer state by splitting lines
|
|
68
|
+
const lines = css.split('\n');
|
|
69
|
+
// Current serializer emits trailing newline for root rules output
|
|
70
|
+
expect(css.endsWith('\n')).toBe(true);
|
|
71
|
+
// First and second lines are correct
|
|
72
|
+
expect(lines[0]).toBe('a: 1;');
|
|
73
|
+
expect(lines[1]).toBe('b: 2;');
|
|
74
|
+
|
|
75
|
+
// Confirm that a segment exists at the generated start of 'b: 2;'
|
|
76
|
+
const segs = w.getSegments();
|
|
77
|
+
// Assert segment for 'a' is on generated line 0 and maps to original line 0
|
|
78
|
+
const aLineIdx = 0;
|
|
79
|
+
const aColIdx = lines[aLineIdx]!.indexOf('a');
|
|
80
|
+
const aSeg = segs.find(s => s.genLine === aLineIdx && s.genColumn === aColIdx);
|
|
81
|
+
expect(aSeg && aSeg.origLine === 0).toBe(true);
|
|
82
|
+
|
|
83
|
+
// Assert segment for 'b' is on generated line 1 but maps to original line 3 (line 4 in 1-based),
|
|
84
|
+
// because we compressed three newlines in serialization
|
|
85
|
+
const bLineIdx = 1; // generated is 0-based: second line
|
|
86
|
+
const bColIdx = lines[bLineIdx]!.indexOf('b');
|
|
87
|
+
const bSeg = segs.find(s => s.genLine === bLineIdx && s.genColumn === bColIdx);
|
|
88
|
+
expect(bSeg && bSeg.origLine === 3).toBe(true);
|
|
89
|
+
expect(bSeg?.genLine).toBe(1);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('combines segments from different trees (files)', () => {
|
|
93
|
+
const w = new OutputWriter();
|
|
94
|
+
const left = rules([
|
|
95
|
+
decl({ name: any('a'), value: any('1') })
|
|
96
|
+
]);
|
|
97
|
+
// attach file+location to the declaration itself so segments carry sources
|
|
98
|
+
(left.value[0] as any).treeContext.file = { name: 'left.jess', path: '.', fullPath: '/abs/left.jess' };
|
|
99
|
+
(left.value[0] as any)._location = [0, 1, 1, 0, 1, 5];
|
|
100
|
+
|
|
101
|
+
const right = rules([
|
|
102
|
+
decl({ name: any('b'), value: any('2') })
|
|
103
|
+
]);
|
|
104
|
+
(right.value[0] as any).treeContext.file = { name: 'right.jess', path: '.', fullPath: '/abs/right.jess' };
|
|
105
|
+
(right.value[0] as any)._location = [0, 1, 1, 0, 1, 5];
|
|
106
|
+
|
|
107
|
+
const root = rules([left, right]);
|
|
108
|
+
const css = root.toString(getPrintOptions({ writer: w }));
|
|
109
|
+
expect(css).toBe('a: 1;' + '\n' + 'b: 2;\n');
|
|
110
|
+
|
|
111
|
+
const map = buildSourceMap(w, { file: 'out.css' });
|
|
112
|
+
expect(map.version).toBe(3);
|
|
113
|
+
const srcs = map.sources.filter((s): s is string => typeof s === 'string');
|
|
114
|
+
expect(srcs.some(s => s.includes('left.jess'))).toBe(true);
|
|
115
|
+
expect(srcs.some(s => s.includes('right.jess'))).toBe(true);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selector-like ampersand template payloads.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - suffix/prefix forms like `-1`, `.foo`, `b`
|
|
6
|
+
* - explicit insertion templates containing `&`
|
|
7
|
+
* - selector-ish fragments, but reserves `nil` for `&(nil)`
|
|
8
|
+
*/
|
|
9
|
+
export const AMPERSAND_TEMPLATE_CONTENTS_REGEX = /(?:[.#\w\u0080-\uffff-]|\d)(?:[.#\w\u0080-\uffff-]|&)*|(?:[.#\w\u0080-\uffff-]|&)*&(?:[.#\w\u0080-\uffff-]|&)*/;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { default as OriginalBitSet } from 'bitset';
|
|
2
|
+
|
|
3
|
+
export class BitSet<T = unknown> extends OriginalBitSet {
|
|
4
|
+
_library: BitSetLibrary<T> | undefined;
|
|
5
|
+
|
|
6
|
+
override or(other: BitSet<T>): BitSet<T> {
|
|
7
|
+
let set = super.or(other) as BitSet<T>;
|
|
8
|
+
set._library = this._library;
|
|
9
|
+
return set;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
override clone(): BitSet<T> {
|
|
13
|
+
let set: any = new BitSet<T>();
|
|
14
|
+
/**
|
|
15
|
+
* Clone like the regular bitset does but preserve this as the constructor.
|
|
16
|
+
* Otherwise cloned objects won't preserve the library reference.
|
|
17
|
+
*/
|
|
18
|
+
set.data = (this as any).data.slice();
|
|
19
|
+
set._ = (this as any)._;
|
|
20
|
+
set._library = this._library;
|
|
21
|
+
return set;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override and(other: BitSet<T>): BitSet<T> {
|
|
25
|
+
let set = super.and(other) as BitSet<T>;
|
|
26
|
+
set._library = this._library;
|
|
27
|
+
return set;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override xor(other: BitSet<T>): BitSet<T> {
|
|
31
|
+
let set = super.xor(other) as BitSet<T>;
|
|
32
|
+
set._library = this._library;
|
|
33
|
+
return set;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
override not(): BitSet<T> {
|
|
37
|
+
let set = super.not() as BitSet<T>;
|
|
38
|
+
set._library = this._library;
|
|
39
|
+
return set;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class BitSetLibrary<T = unknown> {
|
|
44
|
+
private _bitset: BitSet<T>;
|
|
45
|
+
/** Value to Bitset position map */
|
|
46
|
+
private _values = new Map<T, number>();
|
|
47
|
+
/** Bitset position to value map */
|
|
48
|
+
private _positions: T[] = [];
|
|
49
|
+
|
|
50
|
+
constructor(values?: T[]) {
|
|
51
|
+
this._bitset = new BitSet();
|
|
52
|
+
this._bitset._library = this;
|
|
53
|
+
if (values) {
|
|
54
|
+
for (let i = 0; i < values.length; i++) {
|
|
55
|
+
this._values.set(values[i]!, i);
|
|
56
|
+
this._bitset.set(i, 0);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get size() {
|
|
62
|
+
return this._values.size;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Returns position */
|
|
66
|
+
add(value: T): number {
|
|
67
|
+
let values = this._values;
|
|
68
|
+
let pos = values.get(value);
|
|
69
|
+
if (pos !== undefined) {
|
|
70
|
+
return pos;
|
|
71
|
+
}
|
|
72
|
+
pos = this.size;
|
|
73
|
+
values.set(value, pos);
|
|
74
|
+
this._positions[pos] = value;
|
|
75
|
+
this._bitset.set(pos, 0);
|
|
76
|
+
return pos;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
has(value: T) {
|
|
80
|
+
return this._values.has(value);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Get Bitset from an iterable of values */
|
|
84
|
+
getBitset(values?: Iterable<T>): BitSet<T> {
|
|
85
|
+
let bitset = this._bitset.clone();
|
|
86
|
+
if (values) {
|
|
87
|
+
for (const value of values) {
|
|
88
|
+
let pos = this.add(value);
|
|
89
|
+
bitset.set(pos, 1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return bitset;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
getValue(position: number): T | undefined {
|
|
96
|
+
return this._positions[position];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
hasBit(bitset: BitSet<T>, value: T): boolean {
|
|
100
|
+
if (bitset._library !== this) {
|
|
101
|
+
throw new Error('Bitset must be from this library');
|
|
102
|
+
}
|
|
103
|
+
const pos = this._values.get(value);
|
|
104
|
+
return pos !== undefined ? Boolean(bitset.get(pos)) : false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
forEachValue(bitset: BitSet<T>, fn: (value: T, position: number) => void): void {
|
|
108
|
+
if (bitset._library !== this) {
|
|
109
|
+
throw new Error('Bitset must be from this library');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const data = (bitset as { data?: number[] }).data;
|
|
113
|
+
if (!data) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (let wordIndex = 0; wordIndex < data.length; wordIndex++) {
|
|
118
|
+
let word = data[wordIndex]! >>> 0;
|
|
119
|
+
while (word !== 0) {
|
|
120
|
+
const lowestBit = word & -word;
|
|
121
|
+
const bitIndex = 31 - Math.clz32(lowestBit);
|
|
122
|
+
const position = (wordIndex * 32) + bitIndex;
|
|
123
|
+
const value = this._positions[position];
|
|
124
|
+
if (value !== undefined) {
|
|
125
|
+
fn(value, position);
|
|
126
|
+
}
|
|
127
|
+
word &= word - 1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
valuesOf(bitset: BitSet<T>): T[] {
|
|
133
|
+
const values: T[] = [];
|
|
134
|
+
this.forEachValue(bitset, (value) => {
|
|
135
|
+
values.push(value);
|
|
136
|
+
});
|
|
137
|
+
return values;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* All bits in a that are true must be true in b
|
|
143
|
+
*/
|
|
144
|
+
export function isSubsetOf(a: BitSet, b: BitSet): boolean {
|
|
145
|
+
if (a._library !== b._library) {
|
|
146
|
+
throw new Error('Bitsets must be from the same library');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const aInternal = a as { data?: number[]; _?: number };
|
|
150
|
+
const bInternal = b as { data?: number[]; _?: number };
|
|
151
|
+
if (aInternal._ || bInternal._) {
|
|
152
|
+
return a.and(b).equals(a);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
const aData = aInternal.data;
|
|
156
|
+
const bData = bInternal.data;
|
|
157
|
+
if (!aData) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
for (let i = 0; i < aData.length; i++) {
|
|
162
|
+
const aWord = aData[i] ?? 0;
|
|
163
|
+
if (!aWord) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const bWord = bData?.[i] ?? 0;
|
|
168
|
+
if ((aWord & ~bWord) !== 0) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** True when `a` and `b` share no set bits. */
|
|
177
|
+
export function isDisjoint(a: BitSet, b: BitSet): boolean {
|
|
178
|
+
if (a._library !== b._library) {
|
|
179
|
+
throw new Error('Bitsets must be from the same library');
|
|
180
|
+
}
|
|
181
|
+
const intersection = a.and(b) as BitSet;
|
|
182
|
+
const data = (intersection as { data?: number[] }).data;
|
|
183
|
+
if (!data) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
for (let i = 0; i < data.length; i++) {
|
|
188
|
+
if (data[i]) {
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Operator = '+' | '-' | '*' | '/' | '%';
|
|
2
|
+
|
|
3
|
+
export function calculate(a: number, op: Operator, b: number) {
|
|
4
|
+
switch (op) {
|
|
5
|
+
case '+': return a + b;
|
|
6
|
+
case '-': return a - b;
|
|
7
|
+
case '*': return a * b;
|
|
8
|
+
case '/': return a / b;
|
|
9
|
+
case '%': return a % b;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { Node } from '../node.js';
|
|
2
|
+
import { Nil } from '../nil.js';
|
|
3
|
+
import { List } from '../list.js';
|
|
4
|
+
// Dimension and Num are NOT imported here to break circular dependency:
|
|
5
|
+
// dimension.ts → color.ts → call.ts → cast.ts → dimension.ts
|
|
6
|
+
// Instead, we use createRequire to access them synchronously at runtime
|
|
7
|
+
import { Any } from '../any.js';
|
|
8
|
+
import { Color } from '../color.js';
|
|
9
|
+
import { JsFunction } from '../js-function.js';
|
|
10
|
+
import { JsObject } from '../js-object.js';
|
|
11
|
+
import { Bool } from '../bool.js';
|
|
12
|
+
import { isNode } from './is-node.js';
|
|
13
|
+
import { isPlainObject } from './collections.js';
|
|
14
|
+
import { createRequire } from 'node:module';
|
|
15
|
+
|
|
16
|
+
const { isArray } = Array;
|
|
17
|
+
|
|
18
|
+
// Create a synchronous require function for ES modules
|
|
19
|
+
const require = createRequire(import.meta.url);
|
|
20
|
+
|
|
21
|
+
// Lazy getters for Dimension and Num to break circular dependency
|
|
22
|
+
// These use require() to access modules at runtime, not at module load time
|
|
23
|
+
// By the time cast() is called, dimension.ts and number.ts will be fully loaded
|
|
24
|
+
function getDimension() {
|
|
25
|
+
// Use require() to access module at runtime - breaks circular dependency at module load time
|
|
26
|
+
return require('../dimension.js').Dimension;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getNum() {
|
|
30
|
+
// Use require() to access module at runtime - breaks circular dependency at module load time
|
|
31
|
+
return require('../number.js').Num;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function getNodeType(value: any): Node {
|
|
35
|
+
if (isNode(value)) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
if (value === undefined || value === null) {
|
|
39
|
+
return new Nil();
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === 'boolean') {
|
|
42
|
+
return new Bool(value);
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === 'function') {
|
|
45
|
+
// Hmm, the LLM added this, is it needed?
|
|
46
|
+
// Preserve function options (e.g., params metadata from getFunctionFromMixins)
|
|
47
|
+
const options = (value as Function & { options?: Record<string, unknown> }).options;
|
|
48
|
+
return new JsFunction(value, options);
|
|
49
|
+
}
|
|
50
|
+
if (isPlainObject(value)) {
|
|
51
|
+
return new JsObject(value);
|
|
52
|
+
}
|
|
53
|
+
if (isArray(value)) {
|
|
54
|
+
return new List(value.map(val => cast(val)));
|
|
55
|
+
}
|
|
56
|
+
if (value.constructor === Number) {
|
|
57
|
+
const Num = getNum();
|
|
58
|
+
return new Num(value as unknown as number);
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === 'string') {
|
|
61
|
+
if (value.startsWith('#')) {
|
|
62
|
+
return new Color(value);
|
|
63
|
+
} else {
|
|
64
|
+
let result = value.match(/^(\d*(?:\.\d+))([a-z]*)$/i);
|
|
65
|
+
if (result) {
|
|
66
|
+
const Dimension = getDimension();
|
|
67
|
+
return new Dimension({ number: parseFloat(result[1]!), unit: result[2] });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return new Any(value.toString());
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Casts a primitive JavaScript value to a Jess node
|
|
76
|
+
* (if not already).
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* cast(area(5))
|
|
80
|
+
*/
|
|
81
|
+
export function cast(value: any): Node {
|
|
82
|
+
const node = getNodeType(value);
|
|
83
|
+
/**
|
|
84
|
+
* If converting from a primitive, then
|
|
85
|
+
* the value should be considered evaluated.
|
|
86
|
+
*/
|
|
87
|
+
// Cast from primitive — F_STATIC on Any/Num/etc prevents re-eval.
|
|
88
|
+
return node;
|
|
89
|
+
}
|