legend-doctor 0.5.0 → 0.6.2
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/EXAMPLES.md +353 -93
- package/README.md +16 -8
- package/REPORT.md +222 -47
- package/dist/src/analysis/analyze-source.d.ts +3 -5
- package/dist/src/analysis/analyze-source.d.ts.map +1 -1
- package/dist/src/analysis/analyze-source.js +33 -41
- package/dist/src/analysis/analyze-source.js.map +1 -1
- package/dist/src/analysis/assumptions/assumed-leaf-contracts.d.ts +11 -3
- package/dist/src/analysis/assumptions/assumed-leaf-contracts.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/assumed-leaf-contracts.js +24 -5
- package/dist/src/analysis/assumptions/assumed-leaf-contracts.js.map +1 -1
- package/dist/src/analysis/assumptions/atomic-stretch.d.ts +9 -0
- package/dist/src/analysis/assumptions/atomic-stretch.d.ts.map +1 -0
- package/dist/src/analysis/assumptions/atomic-stretch.js +37 -0
- package/dist/src/analysis/assumptions/atomic-stretch.js.map +1 -0
- package/dist/src/analysis/assumptions/confirmations.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/confirmations.js +1 -6
- package/dist/src/analysis/assumptions/confirmations.js.map +1 -1
- package/dist/src/analysis/assumptions/effect-assumptions.d.ts +5 -15
- package/dist/src/analysis/assumptions/effect-assumptions.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/effect-assumptions.js +33 -76
- package/dist/src/analysis/assumptions/effect-assumptions.js.map +1 -1
- package/dist/src/analysis/assumptions/group-assumptions.d.ts +0 -1
- package/dist/src/analysis/assumptions/group-assumptions.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/group-assumptions.js +10 -23
- package/dist/src/analysis/assumptions/group-assumptions.js.map +1 -1
- package/dist/src/analysis/assumptions/hypotheses.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/hypotheses.js +49 -14
- package/dist/src/analysis/assumptions/hypotheses.js.map +1 -1
- package/dist/src/analysis/assumptions/review-assumptions.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/review-assumptions.js +16 -2
- package/dist/src/analysis/assumptions/review-assumptions.js.map +1 -1
- package/dist/src/analysis/assumptions/state-assumptions.d.ts +3 -2
- package/dist/src/analysis/assumptions/state-assumptions.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/state-assumptions.js +11 -3
- package/dist/src/analysis/assumptions/state-assumptions.js.map +1 -1
- package/dist/src/analysis/assumptions/verification.d.ts.map +1 -1
- package/dist/src/analysis/assumptions/verification.js +17 -6
- package/dist/src/analysis/assumptions/verification.js.map +1 -1
- package/dist/src/analysis/ast-helpers.d.ts +8 -3
- package/dist/src/analysis/ast-helpers.d.ts.map +1 -1
- package/dist/src/analysis/ast-helpers.js +43 -20
- package/dist/src/analysis/ast-helpers.js.map +1 -1
- package/dist/src/analysis/branch-unmount.js +2 -11
- package/dist/src/analysis/branch-unmount.js.map +1 -1
- package/dist/src/analysis/callbacks/deferred-events.d.ts +2 -0
- package/dist/src/analysis/callbacks/deferred-events.d.ts.map +1 -1
- package/dist/src/analysis/callbacks/deferred-events.js +7 -10
- package/dist/src/analysis/callbacks/deferred-events.js.map +1 -1
- package/dist/src/analysis/callbacks/local-callbacks.d.ts.map +1 -1
- package/dist/src/analysis/callbacks/local-callbacks.js +2 -8
- package/dist/src/analysis/callbacks/local-callbacks.js.map +1 -1
- package/dist/src/analysis/callbacks/memoized-options.d.ts +2 -0
- package/dist/src/analysis/callbacks/memoized-options.d.ts.map +1 -1
- package/dist/src/analysis/callbacks/memoized-options.js +5 -10
- package/dist/src/analysis/callbacks/memoized-options.js.map +1 -1
- package/dist/src/analysis/candidates.d.ts.map +1 -1
- package/dist/src/analysis/candidates.js +3 -9
- package/dist/src/analysis/candidates.js.map +1 -1
- package/dist/src/analysis/clusters/cowritten-clusters.d.ts +1 -0
- package/dist/src/analysis/clusters/cowritten-clusters.d.ts.map +1 -1
- package/dist/src/analysis/clusters/cowritten-clusters.js +34 -10
- package/dist/src/analysis/clusters/cowritten-clusters.js.map +1 -1
- package/dist/src/analysis/clusters/cowritten-edit.d.ts +13 -0
- package/dist/src/analysis/clusters/cowritten-edit.d.ts.map +1 -0
- package/dist/src/analysis/clusters/cowritten-edit.js +55 -0
- package/dist/src/analysis/clusters/cowritten-edit.js.map +1 -0
- package/dist/src/analysis/clusters/gated-feedback-cluster.d.ts.map +1 -1
- package/dist/src/analysis/clusters/gated-feedback-cluster.js +5 -2
- package/dist/src/analysis/clusters/gated-feedback-cluster.js.map +1 -1
- package/dist/src/analysis/clusters/observable-clusters.d.ts +2 -2
- package/dist/src/analysis/clusters/observable-clusters.d.ts.map +1 -1
- package/dist/src/analysis/clusters/observable-clusters.js +15 -19
- package/dist/src/analysis/clusters/observable-clusters.js.map +1 -1
- package/dist/src/analysis/clusters/scalar-dialog-cluster.d.ts.map +1 -1
- package/dist/src/analysis/clusters/scalar-dialog-cluster.js +1 -1
- package/dist/src/analysis/clusters/scalar-dialog-cluster.js.map +1 -1
- package/dist/src/analysis/clusters/subtree-clusters.d.ts +1 -1
- package/dist/src/analysis/clusters/subtree-clusters.d.ts.map +1 -1
- package/dist/src/analysis/clusters/subtree-clusters.js +4 -4
- package/dist/src/analysis/clusters/subtree-clusters.js.map +1 -1
- package/dist/src/analysis/clusters/text-draft-cluster.d.ts.map +1 -1
- package/dist/src/analysis/clusters/text-draft-cluster.js +2 -11
- package/dist/src/analysis/clusters/text-draft-cluster.js.map +1 -1
- package/dist/src/analysis/commands/effect-owned-presentation.d.ts.map +1 -1
- package/dist/src/analysis/commands/effect-owned-presentation.js +2 -8
- package/dist/src/analysis/commands/effect-owned-presentation.js.map +1 -1
- package/dist/src/analysis/commands/memoized-option-command.d.ts +0 -2
- package/dist/src/analysis/commands/memoized-option-command.d.ts.map +1 -1
- package/dist/src/analysis/commands/memoized-option-command.js +4 -15
- package/dist/src/analysis/commands/memoized-option-command.js.map +1 -1
- package/dist/src/analysis/commands/reactive-mutation-paths.d.ts.map +1 -1
- package/dist/src/analysis/commands/reactive-mutation-paths.js +1 -2
- package/dist/src/analysis/commands/reactive-mutation-paths.js.map +1 -1
- package/dist/src/analysis/commands/self-refreshing-command.d.ts.map +1 -1
- package/dist/src/analysis/commands/self-refreshing-command.js +2 -8
- package/dist/src/analysis/commands/self-refreshing-command.js.map +1 -1
- package/dist/src/analysis/commit-sensitive-state.d.ts +2 -0
- package/dist/src/analysis/commit-sensitive-state.d.ts.map +1 -1
- package/dist/src/analysis/commit-sensitive-state.js +13 -0
- package/dist/src/analysis/commit-sensitive-state.js.map +1 -1
- package/dist/src/analysis/companion-writes.d.ts.map +1 -1
- package/dist/src/analysis/companion-writes.js +2 -10
- package/dist/src/analysis/companion-writes.js.map +1 -1
- package/dist/src/analysis/constants.d.ts +2 -1
- package/dist/src/analysis/constants.d.ts.map +1 -1
- package/dist/src/analysis/constants.js +9 -1
- package/dist/src/analysis/constants.js.map +1 -1
- package/dist/src/analysis/context/context-held-state.d.ts.map +1 -1
- package/dist/src/analysis/context/context-held-state.js +40 -56
- package/dist/src/analysis/context/context-held-state.js.map +1 -1
- package/dist/src/analysis/controlled-leaf-call-site.js +2 -13
- package/dist/src/analysis/controlled-leaf-call-site.js.map +1 -1
- package/dist/src/analysis/controlled-leaf-cuts.d.ts.map +1 -1
- package/dist/src/analysis/controlled-leaf-cuts.js +4 -2
- package/dist/src/analysis/controlled-leaf-cuts.js.map +1 -1
- package/dist/src/analysis/delayed-pending.js +2 -5
- package/dist/src/analysis/delayed-pending.js.map +1 -1
- package/dist/src/analysis/dialog/dialog-gates.d.ts.map +1 -1
- package/dist/src/analysis/dialog/dialog-gates.js +5 -3
- package/dist/src/analysis/dialog/dialog-gates.js.map +1 -1
- package/dist/src/analysis/dialog/nullable-payload-cut.d.ts.map +1 -1
- package/dist/src/analysis/dialog/nullable-payload-cut.js +3 -2
- package/dist/src/analysis/dialog/nullable-payload-cut.js.map +1 -1
- package/dist/src/analysis/discard-confidence.d.ts.map +1 -1
- package/dist/src/analysis/discard-confidence.js +4 -15
- package/dist/src/analysis/discard-confidence.js.map +1 -1
- package/dist/src/analysis/effect-findings.d.ts +1 -1
- package/dist/src/analysis/effect-findings.d.ts.map +1 -1
- package/dist/src/analysis/effect-findings.js +89 -18
- package/dist/src/analysis/effect-findings.js.map +1 -1
- package/dist/src/analysis/filter/collection-work.d.ts +0 -1
- package/dist/src/analysis/filter/collection-work.d.ts.map +1 -1
- package/dist/src/analysis/filter/collection-work.js +4 -16
- package/dist/src/analysis/filter/collection-work.js.map +1 -1
- package/dist/src/analysis/filter/filter-leaf-cut.d.ts.map +1 -1
- package/dist/src/analysis/filter/filter-leaf-cut.js +11 -22
- package/dist/src/analysis/filter/filter-leaf-cut.js.map +1 -1
- package/dist/src/analysis/finding-clusters.d.ts.map +1 -1
- package/dist/src/analysis/finding-clusters.js +7 -2
- package/dist/src/analysis/finding-clusters.js.map +1 -1
- package/dist/src/analysis/findings.d.ts.map +1 -1
- package/dist/src/analysis/findings.js +66 -19
- package/dist/src/analysis/findings.js.map +1 -1
- package/dist/src/analysis/lone-write-stretches.d.ts +9 -0
- package/dist/src/analysis/lone-write-stretches.d.ts.map +1 -0
- package/dist/src/analysis/lone-write-stretches.js +226 -0
- package/dist/src/analysis/lone-write-stretches.js.map +1 -0
- package/dist/src/analysis/membership-toggle.d.ts.map +1 -1
- package/dist/src/analysis/membership-toggle.js +1 -5
- package/dist/src/analysis/membership-toggle.js.map +1 -1
- package/dist/src/analysis/model.d.ts +9 -0
- package/dist/src/analysis/model.d.ts.map +1 -1
- package/dist/src/analysis/owner-bindings.js +1 -1
- package/dist/src/analysis/owner-bindings.js.map +1 -1
- package/dist/src/analysis/owner-scan.d.ts +0 -1
- package/dist/src/analysis/owner-scan.d.ts.map +1 -1
- package/dist/src/analysis/owner-scan.js +0 -32
- package/dist/src/analysis/owner-scan.js.map +1 -1
- package/dist/src/analysis/proofs/cluster-proofs.d.ts.map +1 -1
- package/dist/src/analysis/proofs/cluster-proofs.js +23 -13
- package/dist/src/analysis/proofs/cluster-proofs.js.map +1 -1
- package/dist/src/analysis/proofs/contracts.d.ts +5 -3
- package/dist/src/analysis/proofs/contracts.d.ts.map +1 -1
- package/dist/src/analysis/proofs/effect-proofs.js +2 -2
- package/dist/src/analysis/proofs/effect-proofs.js.map +1 -1
- package/dist/src/analysis/proofs/event-callbacks.js +1 -1
- package/dist/src/analysis/proofs/event-callbacks.js.map +1 -1
- package/dist/src/analysis/proofs/ownership-proofs.d.ts.map +1 -1
- package/dist/src/analysis/proofs/ownership-proofs.js +2 -0
- package/dist/src/analysis/proofs/ownership-proofs.js.map +1 -1
- package/dist/src/analysis/proofs/rule-proofs.d.ts.map +1 -1
- package/dist/src/analysis/proofs/rule-proofs.js +2 -0
- package/dist/src/analysis/proofs/rule-proofs.js.map +1 -1
- package/dist/src/analysis/render-phase-writes.d.ts +3 -0
- package/dist/src/analysis/render-phase-writes.d.ts.map +1 -0
- package/dist/src/analysis/render-phase-writes.js +62 -0
- package/dist/src/analysis/render-phase-writes.js.map +1 -0
- package/dist/src/analysis/return-call-sites.d.ts +1 -0
- package/dist/src/analysis/return-call-sites.d.ts.map +1 -1
- package/dist/src/analysis/return-call-sites.js +1 -1
- package/dist/src/analysis/return-call-sites.js.map +1 -1
- package/dist/src/analysis/review-guidance.js +1 -1
- package/dist/src/analysis/review-guidance.js.map +1 -1
- package/dist/src/analysis/sibling-render-cut.d.ts +5 -1
- package/dist/src/analysis/sibling-render-cut.d.ts.map +1 -1
- package/dist/src/analysis/sibling-render-cut.js +11 -9
- package/dist/src/analysis/sibling-render-cut.js.map +1 -1
- package/dist/src/analysis/split-commit-companions.d.ts +12 -0
- package/dist/src/analysis/split-commit-companions.d.ts.map +1 -0
- package/dist/src/analysis/split-commit-companions.js +94 -0
- package/dist/src/analysis/split-commit-companions.js.map +1 -0
- package/dist/src/analysis/state-usage.d.ts.map +1 -1
- package/dist/src/analysis/state-usage.js +14 -6
- package/dist/src/analysis/state-usage.js.map +1 -1
- package/dist/src/analysis/subtree/analyze-subtree.d.ts.map +1 -1
- package/dist/src/analysis/subtree/analyze-subtree.js +23 -16
- package/dist/src/analysis/subtree/analyze-subtree.js.map +1 -1
- package/dist/src/analysis/subtree/effect-split.d.ts.map +1 -1
- package/dist/src/analysis/subtree/effect-split.js +8 -5
- package/dist/src/analysis/subtree/effect-split.js.map +1 -1
- package/dist/src/analysis/subtree/extracted-render-work.d.ts +11 -0
- package/dist/src/analysis/subtree/extracted-render-work.d.ts.map +1 -0
- package/dist/src/analysis/subtree/extracted-render-work.js +197 -0
- package/dist/src/analysis/subtree/extracted-render-work.js.map +1 -0
- package/dist/src/analysis/subtree/materiality.d.ts +1 -1
- package/dist/src/analysis/subtree/materiality.d.ts.map +1 -1
- package/dist/src/analysis/subtree/materiality.js +5 -3
- package/dist/src/analysis/subtree/materiality.js.map +1 -1
- package/dist/src/analysis/subtree/projection-writes.d.ts.map +1 -1
- package/dist/src/analysis/subtree/projection-writes.js +7 -33
- package/dist/src/analysis/subtree/projection-writes.js.map +1 -1
- package/dist/src/analysis/transition-evidence.d.ts +4 -1
- package/dist/src/analysis/transition-evidence.d.ts.map +1 -1
- package/dist/src/analysis/transition-evidence.js +7 -3
- package/dist/src/analysis/transition-evidence.js.map +1 -1
- package/dist/src/analysis/verdicts/callee-transitions.d.ts +10 -0
- package/dist/src/analysis/verdicts/callee-transitions.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/callee-transitions.js +98 -0
- package/dist/src/analysis/verdicts/callee-transitions.js.map +1 -0
- package/dist/src/analysis/verdicts/classification-context.d.ts +11 -0
- package/dist/src/analysis/verdicts/classification-context.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/classification-context.js +15 -0
- package/dist/src/analysis/verdicts/classification-context.js.map +1 -1
- package/dist/src/analysis/verdicts/classify-state.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/classify-state.js +22 -1
- package/dist/src/analysis/verdicts/classify-state.js.map +1 -1
- package/dist/src/analysis/verdicts/control-flow-gate.d.ts +9 -0
- package/dist/src/analysis/verdicts/control-flow-gate.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/control-flow-gate.js +66 -0
- package/dist/src/analysis/verdicts/control-flow-gate.js.map +1 -0
- package/dist/src/analysis/verdicts/controlled-verdicts.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/controlled-verdicts.js +3 -1
- package/dist/src/analysis/verdicts/controlled-verdicts.js.map +1 -1
- package/dist/src/analysis/verdicts/intrinsic-verdicts.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/intrinsic-verdicts.js +6 -5
- package/dist/src/analysis/verdicts/intrinsic-verdicts.js.map +1 -1
- package/dist/src/analysis/verdicts/mount-identity.d.ts +17 -0
- package/dist/src/analysis/verdicts/mount-identity.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/mount-identity.js +211 -0
- package/dist/src/analysis/verdicts/mount-identity.js.map +1 -0
- package/dist/src/analysis/verdicts/no-smaller-boundary.d.ts +9 -0
- package/dist/src/analysis/verdicts/no-smaller-boundary.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/no-smaller-boundary.js +132 -0
- package/dist/src/analysis/verdicts/no-smaller-boundary.js.map +1 -0
- package/dist/src/analysis/verdicts/pass-through-leaf.d.ts +24 -0
- package/dist/src/analysis/verdicts/pass-through-leaf.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/pass-through-leaf.js +62 -0
- package/dist/src/analysis/verdicts/pass-through-leaf.js.map +1 -0
- package/dist/src/analysis/verdicts/residual-verdicts.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/residual-verdicts.js +40 -13
- package/dist/src/analysis/verdicts/residual-verdicts.js.map +1 -1
- package/dist/src/analysis/verdicts/setter-forwarding.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/setter-forwarding.js +1 -1
- package/dist/src/analysis/verdicts/setter-forwarding.js.map +1 -1
- package/dist/src/analysis/verdicts/site-subscription-verdict.d.ts +16 -10
- package/dist/src/analysis/verdicts/site-subscription-verdict.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/site-subscription-verdict.js +46 -44
- package/dist/src/analysis/verdicts/site-subscription-verdict.js.map +1 -1
- package/dist/src/analysis/verdicts/site-write-roots.d.ts +7 -0
- package/dist/src/analysis/verdicts/site-write-roots.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/site-write-roots.js +19 -13
- package/dist/src/analysis/verdicts/site-write-roots.js.map +1 -1
- package/dist/src/analysis/verdicts/split-commit-verdict.d.ts +8 -0
- package/dist/src/analysis/verdicts/split-commit-verdict.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/split-commit-verdict.js +18 -0
- package/dist/src/analysis/verdicts/split-commit-verdict.js.map +1 -0
- package/dist/src/analysis/verdicts/subtree-verdicts.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/subtree-verdicts.js +19 -9
- package/dist/src/analysis/verdicts/subtree-verdicts.js.map +1 -1
- package/dist/src/analysis/verdicts/transport-mount-identity.d.ts +16 -0
- package/dist/src/analysis/verdicts/transport-mount-identity.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/transport-mount-identity.js +57 -0
- package/dist/src/analysis/verdicts/transport-mount-identity.js.map +1 -0
- package/dist/src/analysis/verdicts/transport-verdicts.d.ts +22 -0
- package/dist/src/analysis/verdicts/transport-verdicts.d.ts.map +1 -1
- package/dist/src/analysis/verdicts/transport-verdicts.js +71 -9
- package/dist/src/analysis/verdicts/transport-verdicts.js.map +1 -1
- package/dist/src/analysis/verdicts/wrap-site-verdict.d.ts +13 -0
- package/dist/src/analysis/verdicts/wrap-site-verdict.d.ts.map +1 -0
- package/dist/src/analysis/verdicts/wrap-site-verdict.js +195 -0
- package/dist/src/analysis/verdicts/wrap-site-verdict.js.map +1 -0
- package/dist/src/cli/config.d.ts +0 -2
- package/dist/src/cli/config.d.ts.map +1 -1
- package/dist/src/cli/config.js +3 -8
- package/dist/src/cli/config.js.map +1 -1
- package/dist/src/cli/failures.d.ts +2 -1
- package/dist/src/cli/failures.d.ts.map +1 -1
- package/dist/src/cli/failures.js +7 -0
- package/dist/src/cli/failures.js.map +1 -1
- package/dist/src/cli/help.d.ts +1 -1
- package/dist/src/cli/help.d.ts.map +1 -1
- package/dist/src/cli/help.js +16 -12
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/options.d.ts.map +1 -1
- package/dist/src/cli/options.js +6 -38
- package/dist/src/cli/options.js.map +1 -1
- package/dist/src/cli.js +8 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/analysis-ast.d.ts +8 -1
- package/dist/src/core/analysis-ast.d.ts.map +1 -1
- package/dist/src/core/analysis-ast.js +41 -0
- package/dist/src/core/analysis-ast.js.map +1 -1
- package/dist/src/core/ast.d.ts +5 -0
- package/dist/src/core/ast.d.ts.map +1 -1
- package/dist/src/core/ast.js +49 -24
- package/dist/src/core/ast.js.map +1 -1
- package/dist/src/core/binding-references.d.ts +11 -0
- package/dist/src/core/binding-references.d.ts.map +1 -0
- package/dist/src/core/binding-references.js +68 -0
- package/dist/src/core/binding-references.js.map +1 -0
- package/dist/src/core/execution-units.d.ts +27 -0
- package/dist/src/core/execution-units.d.ts.map +1 -0
- package/dist/src/core/execution-units.js +97 -0
- package/dist/src/core/execution-units.js.map +1 -0
- package/dist/src/core/imports.d.ts +7 -3
- package/dist/src/core/imports.d.ts.map +1 -1
- package/dist/src/core/imports.js +25 -3
- package/dist/src/core/imports.js.map +1 -1
- package/dist/src/core/json.d.ts +9 -0
- package/dist/src/core/json.d.ts.map +1 -0
- package/dist/src/core/json.js +17 -0
- package/dist/src/core/json.js.map +1 -0
- package/dist/src/core/lexical-bindings.d.ts +27 -0
- package/dist/src/core/lexical-bindings.d.ts.map +1 -0
- package/dist/src/core/lexical-bindings.js +194 -0
- package/dist/src/core/lexical-bindings.js.map +1 -0
- package/dist/src/core/path-identity.d.ts +5 -1
- package/dist/src/core/path-identity.d.ts.map +1 -1
- package/dist/src/core/path-identity.js +19 -5
- package/dist/src/core/path-identity.js.map +1 -1
- package/dist/src/core/react-compiler-units.d.ts +9 -0
- package/dist/src/core/react-compiler-units.d.ts.map +1 -0
- package/dist/src/core/react-compiler-units.js +244 -0
- package/dist/src/core/react-compiler-units.js.map +1 -0
- package/dist/src/core/react-component-wrappers.d.ts.map +1 -1
- package/dist/src/core/react-component-wrappers.js +19 -9
- package/dist/src/core/react-component-wrappers.js.map +1 -1
- package/dist/src/core/render-output.d.ts +10 -0
- package/dist/src/core/render-output.d.ts.map +1 -0
- package/dist/src/core/render-output.js +67 -0
- package/dist/src/core/render-output.js.map +1 -0
- package/dist/src/core/scope-references.d.ts +9 -0
- package/dist/src/core/scope-references.d.ts.map +1 -0
- package/dist/src/core/scope-references.js +97 -0
- package/dist/src/core/scope-references.js.map +1 -0
- package/dist/src/core/subscriptions.d.ts +32 -4
- package/dist/src/core/subscriptions.d.ts.map +1 -1
- package/dist/src/core/subscriptions.js +61 -1
- package/dist/src/core/subscriptions.js.map +1 -1
- package/dist/src/core/text-edits.d.ts +22 -0
- package/dist/src/core/text-edits.d.ts.map +1 -0
- package/dist/src/core/text-edits.js +83 -0
- package/dist/src/core/text-edits.js.map +1 -0
- package/dist/src/core/types.d.ts +66 -24
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +86 -2
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/core/use-value-import.d.ts +46 -0
- package/dist/src/core/use-value-import.d.ts.map +1 -0
- package/dist/src/core/use-value-import.js +139 -0
- package/dist/src/core/use-value-import.js.map +1 -0
- package/dist/src/practices/analyze-legend-practices.d.ts +16 -4
- package/dist/src/practices/analyze-legend-practices.d.ts.map +1 -1
- package/dist/src/practices/analyze-legend-practices.js +71 -29
- package/dist/src/practices/analyze-legend-practices.js.map +1 -1
- package/dist/src/practices/model.d.ts +21 -0
- package/dist/src/practices/model.d.ts.map +1 -1
- package/dist/src/practices/observable-bindings.d.ts.map +1 -1
- package/dist/src/practices/observable-bindings.js +178 -45
- package/dist/src/practices/observable-bindings.js.map +1 -1
- package/dist/src/practices/observable-paths.d.ts.map +1 -1
- package/dist/src/practices/observable-paths.js +20 -3
- package/dist/src/practices/observable-paths.js.map +1 -1
- package/dist/src/practices/observable-prop-types.d.ts +9 -0
- package/dist/src/practices/observable-prop-types.d.ts.map +1 -0
- package/dist/src/practices/observable-prop-types.js +111 -0
- package/dist/src/practices/observable-prop-types.js.map +1 -0
- package/dist/src/practices/observable-trackers.d.ts +11 -0
- package/dist/src/practices/observable-trackers.d.ts.map +1 -0
- package/dist/src/practices/observable-trackers.js +58 -0
- package/dist/src/practices/observable-trackers.js.map +1 -0
- package/dist/src/practices/observable-writes.d.ts.map +1 -1
- package/dist/src/practices/observable-writes.js +1 -10
- package/dist/src/practices/observable-writes.js.map +1 -1
- package/dist/src/practices/practice-rules.d.ts +7 -3
- package/dist/src/practices/practice-rules.d.ts.map +1 -1
- package/dist/src/practices/practice-rules.js +60 -31
- package/dist/src/practices/practice-rules.js.map +1 -1
- package/dist/src/practices/sole-binding-facts.d.ts +7 -0
- package/dist/src/practices/sole-binding-facts.d.ts.map +1 -0
- package/dist/src/practices/sole-binding-facts.js +18 -0
- package/dist/src/practices/sole-binding-facts.js.map +1 -0
- package/dist/src/practices/transaction-findings.d.ts +6 -1
- package/dist/src/practices/transaction-findings.d.ts.map +1 -1
- package/dist/src/practices/transaction-findings.js +13 -12
- package/dist/src/practices/transaction-findings.js.map +1 -1
- package/dist/src/practices/transaction-runs.d.ts.map +1 -1
- package/dist/src/practices/transaction-runs.js +9 -3
- package/dist/src/practices/transaction-runs.js.map +1 -1
- package/dist/src/project/analysis-coverage.d.ts +1 -1
- package/dist/src/project/analysis-coverage.d.ts.map +1 -1
- package/dist/src/project/analysis-coverage.js +2 -7
- package/dist/src/project/analysis-coverage.js.map +1 -1
- package/dist/src/project/analysis-project.d.ts +4 -1
- package/dist/src/project/analysis-project.d.ts.map +1 -1
- package/dist/src/project/analysis-project.js +26 -10
- package/dist/src/project/analysis-project.js.map +1 -1
- package/dist/src/project/analyze-path/analysis-context.d.ts +3 -2
- package/dist/src/project/analyze-path/analysis-context.d.ts.map +1 -1
- package/dist/src/project/analyze-path/analysis-context.js +9 -4
- package/dist/src/project/analyze-path/analysis-context.js.map +1 -1
- package/dist/src/project/analyze-path/analysis-pass.d.ts +5 -10
- package/dist/src/project/analyze-path/analysis-pass.d.ts.map +1 -1
- package/dist/src/project/analyze-path/analysis-pass.js +64 -39
- package/dist/src/project/analyze-path/analysis-pass.js.map +1 -1
- package/dist/src/project/analyze-path/analyze-path.d.ts.map +1 -1
- package/dist/src/project/analyze-path/analyze-path.js +10 -4
- package/dist/src/project/analyze-path/analyze-path.js.map +1 -1
- package/dist/src/project/analyze-path/child-contracts.d.ts.map +1 -1
- package/dist/src/project/analyze-path/child-contracts.js +39 -33
- package/dist/src/project/analyze-path/child-contracts.js.map +1 -1
- package/dist/src/project/analyze-path/component-prop-data.d.ts.map +1 -1
- package/dist/src/project/analyze-path/component-prop-data.js +10 -85
- package/dist/src/project/analyze-path/component-prop-data.js.map +1 -1
- package/dist/src/project/analyze-path/component-references.d.ts +15 -0
- package/dist/src/project/analyze-path/component-references.d.ts.map +1 -0
- package/dist/src/project/analyze-path/component-references.js +74 -0
- package/dist/src/project/analyze-path/component-references.js.map +1 -0
- package/dist/src/project/analyze-path/contract-cache.d.ts +2 -0
- package/dist/src/project/analyze-path/contract-cache.d.ts.map +1 -0
- package/dist/src/project/analyze-path/contract-cache.js +10 -0
- package/dist/src/project/analyze-path/contract-cache.js.map +1 -0
- package/dist/src/project/analyze-path/file-results.d.ts +14 -0
- package/dist/src/project/analyze-path/file-results.d.ts.map +1 -0
- package/dist/src/project/analyze-path/file-results.js +21 -0
- package/dist/src/project/analyze-path/file-results.js.map +1 -0
- package/dist/src/project/analyze-path/hook-closure-index.d.ts +44 -0
- package/dist/src/project/analyze-path/hook-closure-index.d.ts.map +1 -0
- package/dist/src/project/analyze-path/hook-closure-index.js +262 -0
- package/dist/src/project/analyze-path/hook-closure-index.js.map +1 -0
- package/dist/src/project/analyze-path/hook-closure-outside.d.ts +13 -0
- package/dist/src/project/analyze-path/hook-closure-outside.d.ts.map +1 -0
- package/dist/src/project/analyze-path/hook-closure-outside.js +54 -0
- package/dist/src/project/analyze-path/hook-closure-outside.js.map +1 -0
- package/dist/src/project/analyze-path/hook-consumer-closure.d.ts +30 -0
- package/dist/src/project/analyze-path/hook-consumer-closure.d.ts.map +1 -0
- package/dist/src/project/analyze-path/hook-consumer-closure.js +184 -0
- package/dist/src/project/analyze-path/hook-consumer-closure.js.map +1 -0
- package/dist/src/project/analyze-path/hook-consumers.d.ts.map +1 -1
- package/dist/src/project/analyze-path/hook-consumers.js +9 -4
- package/dist/src/project/analyze-path/hook-consumers.js.map +1 -1
- package/dist/src/project/analyze-path/parent-rerenders.d.ts +27 -0
- package/dist/src/project/analyze-path/parent-rerenders.d.ts.map +1 -0
- package/dist/src/project/analyze-path/parent-rerenders.js +267 -0
- package/dist/src/project/analyze-path/parent-rerenders.js.map +1 -0
- package/dist/src/project/analyze-path/source-declarations.d.ts +3 -0
- package/dist/src/project/analyze-path/source-declarations.d.ts.map +1 -1
- package/dist/src/project/analyze-path/source-declarations.js +22 -0
- package/dist/src/project/analyze-path/source-declarations.js.map +1 -1
- package/dist/src/project/analyze-path/unreferenced-components.d.ts +11 -0
- package/dist/src/project/analyze-path/unreferenced-components.d.ts.map +1 -0
- package/dist/src/project/analyze-path/unreferenced-components.js +135 -0
- package/dist/src/project/analyze-path/unreferenced-components.js.map +1 -0
- package/dist/src/project/capabilities.d.ts +3 -2
- package/dist/src/project/capabilities.d.ts.map +1 -1
- package/dist/src/project/capabilities.js +8 -1
- package/dist/src/project/capabilities.js.map +1 -1
- package/dist/src/project/git-scope.d.ts +0 -1
- package/dist/src/project/git-scope.d.ts.map +1 -1
- package/dist/src/project/git-scope.js.map +1 -1
- package/dist/src/project/react-compiler-package.d.ts +14 -4
- package/dist/src/project/react-compiler-package.d.ts.map +1 -1
- package/dist/src/project/react-compiler-package.js +36 -45
- package/dist/src/project/react-compiler-package.js.map +1 -1
- package/dist/src/project/read-optional-text.d.ts +3 -0
- package/dist/src/project/read-optional-text.d.ts.map +1 -0
- package/dist/src/project/read-optional-text.js +11 -0
- package/dist/src/project/read-optional-text.js.map +1 -0
- package/dist/src/project/scan-failure.d.ts +11 -0
- package/dist/src/project/scan-failure.d.ts.map +1 -0
- package/dist/src/project/scan-failure.js +11 -0
- package/dist/src/project/scan-failure.js.map +1 -0
- package/dist/src/project/source-components/context-readers.d.ts +6 -0
- package/dist/src/project/source-components/context-readers.d.ts.map +1 -1
- package/dist/src/project/source-components/context-readers.js +64 -16
- package/dist/src/project/source-components/context-readers.js.map +1 -1
- package/dist/src/project/source-components/context-value-stability.d.ts +19 -0
- package/dist/src/project/source-components/context-value-stability.d.ts.map +1 -0
- package/dist/src/project/source-components/context-value-stability.js +87 -0
- package/dist/src/project/source-components/context-value-stability.js.map +1 -0
- package/dist/src/project/source-components/declaration-shapes.d.ts +0 -1
- package/dist/src/project/source-components/declaration-shapes.d.ts.map +1 -1
- package/dist/src/project/source-components/declaration-shapes.js +1 -11
- package/dist/src/project/source-components/declaration-shapes.js.map +1 -1
- package/dist/src/project/source-components/deferred-registrations.d.ts.map +1 -1
- package/dist/src/project/source-components/deferred-registrations.js +1 -2
- package/dist/src/project/source-components/deferred-registrations.js.map +1 -1
- package/dist/src/project/source-components/function-declarations.d.ts.map +1 -1
- package/dist/src/project/source-components/function-declarations.js +4 -4
- package/dist/src/project/source-components/function-declarations.js.map +1 -1
- package/dist/src/project/source-components/function-references.d.ts +16 -0
- package/dist/src/project/source-components/function-references.d.ts.map +1 -0
- package/dist/src/project/source-components/function-references.js +88 -0
- package/dist/src/project/source-components/function-references.js.map +1 -0
- package/dist/src/project/source-components/import-signals.d.ts.map +1 -1
- package/dist/src/project/source-components/import-signals.js +5 -1
- package/dist/src/project/source-components/import-signals.js.map +1 -1
- package/dist/src/project/source-components/legend-value-bridges.js +1 -1
- package/dist/src/project/source-components/legend-value-bridges.js.map +1 -1
- package/dist/src/project/source-components/model.d.ts +18 -1
- package/dist/src/project/source-components/model.d.ts.map +1 -1
- package/dist/src/project/source-components/module-bindings.d.ts +5 -1
- package/dist/src/project/source-components/module-bindings.d.ts.map +1 -1
- package/dist/src/project/source-components/module-bindings.js +45 -11
- package/dist/src/project/source-components/module-bindings.js.map +1 -1
- package/dist/src/project/source-components/module-record.d.ts.map +1 -1
- package/dist/src/project/source-components/module-record.js +16 -0
- package/dist/src/project/source-components/module-record.js.map +1 -1
- package/dist/src/project/source-components/module-resolution.d.ts +7 -2
- package/dist/src/project/source-components/module-resolution.d.ts.map +1 -1
- package/dist/src/project/source-components/module-resolution.js +7 -0
- package/dist/src/project/source-components/module-resolution.js.map +1 -1
- package/dist/src/project/source-components/observable-containers.d.ts.map +1 -1
- package/dist/src/project/source-components/observable-containers.js +2 -13
- package/dist/src/project/source-components/observable-containers.js.map +1 -1
- package/dist/src/project/source-components/observable-contexts.d.ts +13 -0
- package/dist/src/project/source-components/observable-contexts.d.ts.map +1 -0
- package/dist/src/project/source-components/observable-contexts.js +84 -0
- package/dist/src/project/source-components/observable-contexts.js.map +1 -0
- package/dist/src/project/source-components/observable-declarations.d.ts.map +1 -1
- package/dist/src/project/source-components/observable-declarations.js +2 -10
- package/dist/src/project/source-components/observable-declarations.js.map +1 -1
- package/dist/src/project/source-components/observable-in-place-writes.d.ts +32 -0
- package/dist/src/project/source-components/observable-in-place-writes.d.ts.map +1 -0
- package/dist/src/project/source-components/observable-in-place-writes.js +251 -0
- package/dist/src/project/source-components/observable-in-place-writes.js.map +1 -0
- package/dist/src/project/source-components/observable-primitive-paths.d.ts +5 -0
- package/dist/src/project/source-components/observable-primitive-paths.d.ts.map +1 -1
- package/dist/src/project/source-components/observable-primitive-paths.js +22 -6
- package/dist/src/project/source-components/observable-primitive-paths.js.map +1 -1
- package/dist/src/project/source-components/plain-constants.d.ts +8 -0
- package/dist/src/project/source-components/plain-constants.d.ts.map +1 -0
- package/dist/src/project/source-components/plain-constants.js +21 -0
- package/dist/src/project/source-components/plain-constants.js.map +1 -0
- package/dist/src/project/source-components/reach-resolvers.d.ts +10 -0
- package/dist/src/project/source-components/reach-resolvers.d.ts.map +1 -0
- package/dist/src/project/source-components/reach-resolvers.js +137 -0
- package/dist/src/project/source-components/reach-resolvers.js.map +1 -0
- package/dist/src/project/source-components/react-traits.d.ts.map +1 -1
- package/dist/src/project/source-components/react-traits.js +1 -2
- package/dist/src/project/source-components/react-traits.js.map +1 -1
- package/dist/src/project/source-components/source-components.d.ts +27 -1
- package/dist/src/project/source-components/source-components.d.ts.map +1 -1
- package/dist/src/project/source-components/source-components.js +56 -24
- package/dist/src/project/source-components/source-components.js.map +1 -1
- package/dist/src/project/source-components/source-context.d.ts +2 -1
- package/dist/src/project/source-components/source-context.d.ts.map +1 -1
- package/dist/src/project/source-components/source-context.js +5 -0
- package/dist/src/project/source-components/source-context.js.map +1 -1
- package/dist/src/project/source-components/symbol-resolution.d.ts.map +1 -1
- package/dist/src/project/source-components/symbol-resolution.js +1 -0
- package/dist/src/project/source-components/symbol-resolution.js.map +1 -1
- package/dist/src/project/source-components/synchronous-reach.d.ts +64 -0
- package/dist/src/project/source-components/synchronous-reach.d.ts.map +1 -0
- package/dist/src/project/source-components/synchronous-reach.js +298 -0
- package/dist/src/project/source-components/synchronous-reach.js.map +1 -0
- package/dist/src/project/source-components/variable-declarations.d.ts.map +1 -1
- package/dist/src/project/source-components/variable-declarations.js +35 -7
- package/dist/src/project/source-components/variable-declarations.js.map +1 -1
- package/dist/src/project/source-components/write-units.d.ts +18 -0
- package/dist/src/project/source-components/write-units.d.ts.map +1 -0
- package/dist/src/project/source-components/write-units.js +152 -0
- package/dist/src/project/source-components/write-units.js.map +1 -0
- package/dist/src/project/state-flow/expression-lowering.d.ts.map +1 -1
- package/dist/src/project/state-flow/expression-lowering.js +8 -5
- package/dist/src/project/state-flow/expression-lowering.js.map +1 -1
- package/dist/src/project/state-flow/model.d.ts +2 -0
- package/dist/src/project/state-flow/model.d.ts.map +1 -1
- package/dist/src/project/state-flow/state-flow.d.ts +7 -0
- package/dist/src/project/state-flow/state-flow.d.ts.map +1 -1
- package/dist/src/project/state-flow/state-flow.js +33 -0
- package/dist/src/project/state-flow/state-flow.js.map +1 -1
- package/dist/src/project/subscription-measurements.d.ts.map +1 -1
- package/dist/src/project/subscription-measurements.js +7 -9
- package/dist/src/project/subscription-measurements.js.map +1 -1
- package/dist/src/project/workspace/link-index.d.ts +8 -0
- package/dist/src/project/workspace/link-index.d.ts.map +1 -0
- package/dist/src/project/workspace/link-index.js +44 -0
- package/dist/src/project/workspace/link-index.js.map +1 -0
- package/dist/src/project/workspace/link-policy.d.ts +10 -0
- package/dist/src/project/workspace/link-policy.d.ts.map +1 -0
- package/dist/src/project/workspace/link-policy.js +114 -0
- package/dist/src/project/workspace/link-policy.js.map +1 -0
- package/dist/src/project/workspace/packages.d.ts +8 -2
- package/dist/src/project/workspace/packages.d.ts.map +1 -1
- package/dist/src/project/workspace/packages.js +30 -9
- package/dist/src/project/workspace/packages.js.map +1 -1
- package/dist/src/project/workspace/resolution-host.d.ts.map +1 -1
- package/dist/src/project/workspace/resolution-host.js +3 -12
- package/dist/src/project/workspace/resolution-host.js.map +1 -1
- package/dist/src/project/workspace/source-closure.d.ts +2 -2
- package/dist/src/project/workspace/source-closure.d.ts.map +1 -1
- package/dist/src/project/workspace/source-closure.js +13 -11
- package/dist/src/project/workspace/source-closure.js.map +1 -1
- package/dist/src/report/finding-ids.d.ts +5 -0
- package/dist/src/report/finding-ids.d.ts.map +1 -0
- package/dist/src/report/finding-ids.js +51 -0
- package/dist/src/report/finding-ids.js.map +1 -0
- package/dist/src/report/format.d.ts +10 -2
- package/dist/src/report/format.d.ts.map +1 -1
- package/dist/src/report/format.js +23 -4
- package/dist/src/report/format.js.map +1 -1
- package/dist/src/report/subscription-plans.d.ts.map +1 -1
- package/dist/src/report/subscription-plans.js +2 -3
- package/dist/src/report/subscription-plans.js.map +1 -1
- package/dist/src/rules/async-leaf-status/async-leaf-status.d.ts.map +1 -1
- package/dist/src/rules/async-leaf-status/async-leaf-status.js +2 -6
- package/dist/src/rules/async-leaf-status/async-leaf-status.js.map +1 -1
- package/dist/src/rules/async-leaf-status/event-rooted-commands.d.ts.map +1 -1
- package/dist/src/rules/async-leaf-status/event-rooted-commands.js +5 -14
- package/dist/src/rules/async-leaf-status/event-rooted-commands.js.map +1 -1
- package/dist/src/rules/async-leaf-status/leaf-call-sites.d.ts.map +1 -1
- package/dist/src/rules/async-leaf-status/leaf-call-sites.js +4 -6
- package/dist/src/rules/async-leaf-status/leaf-call-sites.js.map +1 -1
- package/dist/src/rules/async-leaf-status/pending-command.d.ts +0 -1
- package/dist/src/rules/async-leaf-status/pending-command.d.ts.map +1 -1
- package/dist/src/rules/async-leaf-status/pending-command.js +2 -7
- package/dist/src/rules/async-leaf-status/pending-command.js.map +1 -1
- package/dist/src/rules/async-leaf-status/pending-segment.d.ts.map +1 -1
- package/dist/src/rules/async-leaf-status/pending-segment.js +2 -1
- package/dist/src/rules/async-leaf-status/pending-segment.js.map +1 -1
- package/dist/src/rules/callable-state.d.ts +7 -1
- package/dist/src/rules/callable-state.d.ts.map +1 -1
- package/dist/src/rules/callable-state.js +3 -3
- package/dist/src/rules/callable-state.js.map +1 -1
- package/dist/src/rules/child-contract/array-item-callbacks.d.ts.map +1 -1
- package/dist/src/rules/child-contract/array-item-callbacks.js +6 -6
- package/dist/src/rules/child-contract/array-item-callbacks.js.map +1 -1
- package/dist/src/rules/child-contract/array-prop-tracking.d.ts.map +1 -1
- package/dist/src/rules/child-contract/array-prop-tracking.js +4 -5
- package/dist/src/rules/child-contract/array-prop-tracking.js.map +1 -1
- package/dist/src/rules/child-contract/base-ui-render-events.js +2 -3
- package/dist/src/rules/child-contract/base-ui-render-events.js.map +1 -1
- package/dist/src/rules/child-contract/callback-hosting.d.ts.map +1 -1
- package/dist/src/rules/child-contract/callback-hosting.js +4 -13
- package/dist/src/rules/child-contract/callback-hosting.js.map +1 -1
- package/dist/src/rules/child-contract/carried-values.d.ts +0 -1
- package/dist/src/rules/child-contract/carried-values.d.ts.map +1 -1
- package/dist/src/rules/child-contract/carried-values.js +2 -14
- package/dist/src/rules/child-contract/carried-values.js.map +1 -1
- package/dist/src/rules/child-contract/child-contract.d.ts +6 -3
- package/dist/src/rules/child-contract/child-contract.d.ts.map +1 -1
- package/dist/src/rules/child-contract/child-contract.js +10 -4
- package/dist/src/rules/child-contract/child-contract.js.map +1 -1
- package/dist/src/rules/child-contract/context-consumers.js +5 -5
- package/dist/src/rules/child-contract/context-consumers.js.map +1 -1
- package/dist/src/rules/child-contract/context-publication.d.ts.map +1 -1
- package/dist/src/rules/child-contract/context-publication.js +3 -5
- package/dist/src/rules/child-contract/context-publication.js.map +1 -1
- package/dist/src/rules/child-contract/declared-prop-types.d.ts +4 -0
- package/dist/src/rules/child-contract/declared-prop-types.d.ts.map +1 -1
- package/dist/src/rules/child-contract/declared-prop-types.js +6 -8
- package/dist/src/rules/child-contract/declared-prop-types.js.map +1 -1
- package/dist/src/rules/child-contract/element-identity.d.ts +43 -0
- package/dist/src/rules/child-contract/element-identity.d.ts.map +1 -0
- package/dist/src/rules/child-contract/element-identity.js +227 -0
- package/dist/src/rules/child-contract/element-identity.js.map +1 -0
- package/dist/src/rules/child-contract/expression-stages.d.ts.map +1 -1
- package/dist/src/rules/child-contract/expression-stages.js +4 -4
- package/dist/src/rules/child-contract/expression-stages.js.map +1 -1
- package/dist/src/rules/child-contract/higher-order-factories.d.ts.map +1 -1
- package/dist/src/rules/child-contract/higher-order-factories.js +5 -5
- package/dist/src/rules/child-contract/higher-order-factories.js.map +1 -1
- package/dist/src/rules/child-contract/hook-boundary-paths.d.ts.map +1 -1
- package/dist/src/rules/child-contract/hook-boundary-paths.js +5 -5
- package/dist/src/rules/child-contract/hook-boundary-paths.js.map +1 -1
- package/dist/src/rules/child-contract/invocation-boolean-props.d.ts.map +1 -1
- package/dist/src/rules/child-contract/invocation-boolean-props.js +2 -3
- package/dist/src/rules/child-contract/invocation-boolean-props.js.map +1 -1
- package/dist/src/rules/child-contract/invocation-trace.d.ts.map +1 -1
- package/dist/src/rules/child-contract/invocation-trace.js +2 -3
- package/dist/src/rules/child-contract/invocation-trace.js.map +1 -1
- package/dist/src/rules/child-contract/jsx-event-attributes.js +2 -2
- package/dist/src/rules/child-contract/jsx-event-attributes.js.map +1 -1
- package/dist/src/rules/child-contract/jsx-owner.d.ts +1 -0
- package/dist/src/rules/child-contract/jsx-owner.d.ts.map +1 -1
- package/dist/src/rules/child-contract/jsx-owner.js +1 -1
- package/dist/src/rules/child-contract/jsx-owner.js.map +1 -1
- package/dist/src/rules/child-contract/leaf-render.d.ts +2 -1
- package/dist/src/rules/child-contract/leaf-render.d.ts.map +1 -1
- package/dist/src/rules/child-contract/leaf-render.js +48 -9
- package/dist/src/rules/child-contract/leaf-render.js.map +1 -1
- package/dist/src/rules/child-contract/model.d.ts +30 -3
- package/dist/src/rules/child-contract/model.d.ts.map +1 -1
- package/dist/src/rules/child-contract/model.js.map +1 -1
- package/dist/src/rules/child-contract/pass-through-hosts.d.ts +8 -0
- package/dist/src/rules/child-contract/pass-through-hosts.d.ts.map +1 -0
- package/dist/src/rules/child-contract/pass-through-hosts.js +75 -0
- package/dist/src/rules/child-contract/pass-through-hosts.js.map +1 -0
- package/dist/src/rules/child-contract/path-trace.d.ts.map +1 -1
- package/dist/src/rules/child-contract/path-trace.js +3 -3
- package/dist/src/rules/child-contract/path-trace.js.map +1 -1
- package/dist/src/rules/child-contract/prop-bindings.d.ts +0 -2
- package/dist/src/rules/child-contract/prop-bindings.d.ts.map +1 -1
- package/dist/src/rules/child-contract/prop-bindings.js +3 -19
- package/dist/src/rules/child-contract/prop-bindings.js.map +1 -1
- package/dist/src/rules/child-contract/react-effect-usage.d.ts.map +1 -1
- package/dist/src/rules/child-contract/react-effect-usage.js +6 -22
- package/dist/src/rules/child-contract/react-effect-usage.js.map +1 -1
- package/dist/src/rules/command-only-state/command-only-state.d.ts.map +1 -1
- package/dist/src/rules/command-only-state/command-only-state.js +5 -10
- package/dist/src/rules/command-only-state/command-only-state.js.map +1 -1
- package/dist/src/rules/command-only-state/local-callable-reads.d.ts +1 -0
- package/dist/src/rules/command-only-state/local-callable-reads.d.ts.map +1 -1
- package/dist/src/rules/command-only-state/local-callable-reads.js +2 -9
- package/dist/src/rules/command-only-state/local-callable-reads.js.map +1 -1
- package/dist/src/rules/command-only-state/published-getter.d.ts +5 -0
- package/dist/src/rules/command-only-state/published-getter.d.ts.map +1 -1
- package/dist/src/rules/command-only-state/published-getter.js +49 -20
- package/dist/src/rules/command-only-state/published-getter.js.map +1 -1
- package/dist/src/rules/command-only-state/returned-switch-command.d.ts.map +1 -1
- package/dist/src/rules/command-only-state/returned-switch-command.js +3 -9
- package/dist/src/rules/command-only-state/returned-switch-command.js.map +1 -1
- package/dist/src/rules/command-only-state/unknown-hook-escape.js +2 -8
- package/dist/src/rules/command-only-state/unknown-hook-escape.js.map +1 -1
- package/dist/src/rules/control-flow-components/control-flow-slots.d.ts +60 -0
- package/dist/src/rules/control-flow-components/control-flow-slots.d.ts.map +1 -0
- package/dist/src/rules/control-flow-components/control-flow-slots.js +233 -0
- package/dist/src/rules/control-flow-components/control-flow-slots.js.map +1 -0
- package/dist/src/rules/deferred-reveal/deferred-reveal.d.ts.map +1 -1
- package/dist/src/rules/deferred-reveal/deferred-reveal.js +1 -9
- package/dist/src/rules/deferred-reveal/deferred-reveal.js.map +1 -1
- package/dist/src/rules/deferred-reveal/safe-projections.d.ts.map +1 -1
- package/dist/src/rules/deferred-reveal/safe-projections.js +48 -84
- package/dist/src/rules/deferred-reveal/safe-projections.js.map +1 -1
- package/dist/src/rules/effect-drafts/draft-mutations.d.ts.map +1 -1
- package/dist/src/rules/effect-drafts/draft-mutations.js +3 -26
- package/dist/src/rules/effect-drafts/draft-mutations.js.map +1 -1
- package/dist/src/rules/effect-drafts/draft-render-cuts.js +4 -3
- package/dist/src/rules/effect-drafts/draft-render-cuts.js.map +1 -1
- package/dist/src/rules/effect-drafts/effect-drafts.d.ts.map +1 -1
- package/dist/src/rules/effect-drafts/effect-drafts.js +2 -1
- package/dist/src/rules/effect-drafts/effect-drafts.js.map +1 -1
- package/dist/src/rules/effect-drafts/member-boundary-controls.d.ts +6 -0
- package/dist/src/rules/effect-drafts/member-boundary-controls.d.ts.map +1 -1
- package/dist/src/rules/effect-drafts/member-boundary-controls.js +51 -36
- package/dist/src/rules/effect-drafts/member-boundary-controls.js.map +1 -1
- package/dist/src/rules/effect-drafts/model.d.ts +2 -6
- package/dist/src/rules/effect-drafts/model.d.ts.map +1 -1
- package/dist/src/rules/effects/browser-storage-persistence.d.ts +2 -7
- package/dist/src/rules/effects/browser-storage-persistence.d.ts.map +1 -1
- package/dist/src/rules/effects/browser-storage-persistence.js +3 -20
- package/dist/src/rules/effects/browser-storage-persistence.js.map +1 -1
- package/dist/src/rules/effects/callback-shape.d.ts +0 -2
- package/dist/src/rules/effects/callback-shape.d.ts.map +1 -1
- package/dist/src/rules/effects/callback-shape.js +0 -14
- package/dist/src/rules/effects/callback-shape.js.map +1 -1
- package/dist/src/rules/effects/command-support-calls.d.ts +1 -0
- package/dist/src/rules/effects/command-support-calls.d.ts.map +1 -1
- package/dist/src/rules/effects/command-support-calls.js +1 -1
- package/dist/src/rules/effects/command-support-calls.js.map +1 -1
- package/dist/src/rules/effects/committed-ref-integration.d.ts.map +1 -1
- package/dist/src/rules/effects/committed-ref-integration.js +1 -2
- package/dist/src/rules/effects/committed-ref-integration.js.map +1 -1
- package/dist/src/rules/effects/committed-ref-mirrors.d.ts.map +1 -1
- package/dist/src/rules/effects/committed-ref-mirrors.js +2 -8
- package/dist/src/rules/effects/committed-ref-mirrors.js.map +1 -1
- package/dist/src/rules/effects/declared-primitive-paths.d.ts +10 -0
- package/dist/src/rules/effects/declared-primitive-paths.d.ts.map +1 -0
- package/dist/src/rules/effects/declared-primitive-paths.js +111 -0
- package/dist/src/rules/effects/declared-primitive-paths.js.map +1 -0
- package/dist/src/rules/effects/dependency-identity.d.ts +11 -0
- package/dist/src/rules/effects/dependency-identity.d.ts.map +1 -0
- package/dist/src/rules/effects/dependency-identity.js +160 -0
- package/dist/src/rules/effects/dependency-identity.js.map +1 -0
- package/dist/src/rules/effects/derived-setters.d.ts.map +1 -1
- package/dist/src/rules/effects/derived-setters.js +2 -7
- package/dist/src/rules/effects/derived-setters.js.map +1 -1
- package/dist/src/rules/effects/effect-verdicts.d.ts +12 -5
- package/dist/src/rules/effects/effect-verdicts.d.ts.map +1 -1
- package/dist/src/rules/effects/effect-verdicts.js +53 -18
- package/dist/src/rules/effects/effect-verdicts.js.map +1 -1
- package/dist/src/rules/effects/effects.d.ts +5 -0
- package/dist/src/rules/effects/effects.d.ts.map +1 -1
- package/dist/src/rules/effects/effects.js +69 -46
- package/dist/src/rules/effects/effects.js.map +1 -1
- package/dist/src/rules/effects/guarded-mount-writes.d.ts +10 -0
- package/dist/src/rules/effects/guarded-mount-writes.d.ts.map +1 -0
- package/dist/src/rules/effects/guarded-mount-writes.js +122 -0
- package/dist/src/rules/effects/guarded-mount-writes.js.map +1 -0
- package/dist/src/rules/effects/incidental-observable-reads.d.ts +32 -0
- package/dist/src/rules/effects/incidental-observable-reads.d.ts.map +1 -0
- package/dist/src/rules/effects/incidental-observable-reads.js +311 -0
- package/dist/src/rules/effects/incidental-observable-reads.js.map +1 -0
- package/dist/src/rules/effects/model.d.ts +2 -2
- package/dist/src/rules/effects/model.d.ts.map +1 -1
- package/dist/src/rules/effects/model.js.map +1 -1
- package/dist/src/rules/effects/observable-reactions.d.ts +6 -0
- package/dist/src/rules/effects/observable-reactions.d.ts.map +1 -0
- package/dist/src/rules/effects/observable-reactions.js +54 -0
- package/dist/src/rules/effects/observable-reactions.js.map +1 -0
- package/dist/src/rules/effects/owner-snapshot-captures.d.ts +5 -0
- package/dist/src/rules/effects/owner-snapshot-captures.d.ts.map +1 -0
- package/dist/src/rules/effects/owner-snapshot-captures.js +22 -0
- package/dist/src/rules/effects/owner-snapshot-captures.js.map +1 -0
- package/dist/src/rules/effects/render-phase-resets.d.ts +31 -0
- package/dist/src/rules/effects/render-phase-resets.d.ts.map +1 -0
- package/dist/src/rules/effects/render-phase-resets.js +207 -0
- package/dist/src/rules/effects/render-phase-resets.js.map +1 -0
- package/dist/src/rules/effects/setter-event-boundaries.d.ts.map +1 -1
- package/dist/src/rules/effects/setter-event-boundaries.js +4 -12
- package/dist/src/rules/effects/setter-event-boundaries.js.map +1 -1
- package/dist/src/rules/effects/state-independent-effects.d.ts.map +1 -1
- package/dist/src/rules/effects/state-independent-effects.js +30 -15
- package/dist/src/rules/effects/state-independent-effects.js.map +1 -1
- package/dist/src/rules/effects/synchronous-dependency-reads.d.ts +3 -0
- package/dist/src/rules/effects/synchronous-dependency-reads.d.ts.map +1 -1
- package/dist/src/rules/effects/synchronous-dependency-reads.js +2 -2
- package/dist/src/rules/effects/synchronous-dependency-reads.js.map +1 -1
- package/dist/src/rules/event-scalar-leaf/event-owned-scalars.d.ts.map +1 -1
- package/dist/src/rules/event-scalar-leaf/event-owned-scalars.js +2 -5
- package/dist/src/rules/event-scalar-leaf/event-owned-scalars.js.map +1 -1
- package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.d.ts.map +1 -1
- package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.js +4 -3
- package/dist/src/rules/event-scalar-leaf/event-scalar-leaf.js.map +1 -1
- package/dist/src/rules/fresh-selector-results.d.ts +14 -0
- package/dist/src/rules/fresh-selector-results.d.ts.map +1 -0
- package/dist/src/rules/fresh-selector-results.js +198 -0
- package/dist/src/rules/fresh-selector-results.js.map +1 -0
- package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.d.ts +5 -2
- package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.d.ts.map +1 -1
- package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.js +16 -7
- package/dist/src/rules/hook-consumer-contract/hook-consumer-contract.js.map +1 -1
- package/dist/src/rules/hook-consumer-contract/presentation-consumer.d.ts +2 -1
- package/dist/src/rules/hook-consumer-contract/presentation-consumer.d.ts.map +1 -1
- package/dist/src/rules/hook-consumer-contract/presentation-consumer.js +4 -4
- package/dist/src/rules/hook-consumer-contract/presentation-consumer.js.map +1 -1
- package/dist/src/rules/hook-keyed-cursor-contract/binding-references.d.ts +0 -1
- package/dist/src/rules/hook-keyed-cursor-contract/binding-references.d.ts.map +1 -1
- package/dist/src/rules/hook-keyed-cursor-contract/binding-references.js +6 -32
- package/dist/src/rules/hook-keyed-cursor-contract/binding-references.js.map +1 -1
- package/dist/src/rules/hook-keyed-cursor-contract/hook-keyed-cursor-contract.js +2 -1
- package/dist/src/rules/hook-keyed-cursor-contract/hook-keyed-cursor-contract.js.map +1 -1
- package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.d.ts.map +1 -1
- package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.js +2 -1
- package/dist/src/rules/hook-keyed-cursor-contract/memoized-row-renderer.js.map +1 -1
- package/dist/src/rules/in-place-memo-keys/compiler-memos.d.ts +9 -0
- package/dist/src/rules/in-place-memo-keys/compiler-memos.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/compiler-memos.js +101 -0
- package/dist/src/rules/in-place-memo-keys/compiler-memos.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/finding.d.ts +4 -0
- package/dist/src/rules/in-place-memo-keys/finding.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/finding.js +102 -0
- package/dist/src/rules/in-place-memo-keys/finding.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/identity-readers.d.ts +17 -0
- package/dist/src/rules/in-place-memo-keys/identity-readers.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/identity-readers.js +112 -0
- package/dist/src/rules/in-place-memo-keys/identity-readers.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.d.ts +4 -0
- package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.js +73 -0
- package/dist/src/rules/in-place-memo-keys/in-place-memo-keys.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/memo-dependencies.d.ts +11 -0
- package/dist/src/rules/in-place-memo-keys/memo-dependencies.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/memo-dependencies.js +68 -0
- package/dist/src/rules/in-place-memo-keys/memo-dependencies.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/memo-reads.d.ts +12 -0
- package/dist/src/rules/in-place-memo-keys/memo-reads.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/memo-reads.js +192 -0
- package/dist/src/rules/in-place-memo-keys/memo-reads.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/model.d.ts +51 -0
- package/dist/src/rules/in-place-memo-keys/model.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/model.js +2 -0
- package/dist/src/rules/in-place-memo-keys/model.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/primitive-selection.d.ts +10 -0
- package/dist/src/rules/in-place-memo-keys/primitive-selection.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/primitive-selection.js +57 -0
- package/dist/src/rules/in-place-memo-keys/primitive-selection.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/raw-value-bindings.d.ts +9 -0
- package/dist/src/rules/in-place-memo-keys/raw-value-bindings.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/raw-value-bindings.js +47 -0
- package/dist/src/rules/in-place-memo-keys/raw-value-bindings.js.map +1 -0
- package/dist/src/rules/in-place-memo-keys/write-conflicts.d.ts +14 -0
- package/dist/src/rules/in-place-memo-keys/write-conflicts.d.ts.map +1 -0
- package/dist/src/rules/in-place-memo-keys/write-conflicts.js +23 -0
- package/dist/src/rules/in-place-memo-keys/write-conflicts.js.map +1 -0
- package/dist/src/rules/keyed-selection/collection-summaries.d.ts +1 -1
- package/dist/src/rules/keyed-selection/collection-summaries.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/collection-summaries.js +11 -9
- package/dist/src/rules/keyed-selection/collection-summaries.js.map +1 -1
- package/dist/src/rules/keyed-selection/imperative-handle-exposure.js +2 -11
- package/dist/src/rules/keyed-selection/imperative-handle-exposure.js.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-collections.d.ts +1 -1
- package/dist/src/rules/keyed-selection/keyed-collections.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-collections.js +15 -10
- package/dist/src/rules/keyed-selection/keyed-collections.js.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-records.d.ts +5 -1
- package/dist/src/rules/keyed-selection/keyed-records.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-records.js +2 -2
- package/dist/src/rules/keyed-selection/keyed-records.js.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-scalars.d.ts +2 -2
- package/dist/src/rules/keyed-selection/keyed-scalars.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-scalars.js +22 -31
- package/dist/src/rules/keyed-selection/keyed-scalars.js.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-selection.d.ts +1 -0
- package/dist/src/rules/keyed-selection/keyed-selection.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/keyed-selection.js +13 -21
- package/dist/src/rules/keyed-selection/keyed-selection.js.map +1 -1
- package/dist/src/rules/keyed-selection/rendered-record-entries.d.ts +1 -1
- package/dist/src/rules/keyed-selection/rendered-record-entries.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/rendered-record-entries.js +4 -4
- package/dist/src/rules/keyed-selection/rendered-record-entries.js.map +1 -1
- package/dist/src/rules/keyed-selection/scalar-key-comparisons.d.ts +1 -1
- package/dist/src/rules/keyed-selection/scalar-key-comparisons.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/scalar-key-comparisons.js +7 -7
- package/dist/src/rules/keyed-selection/scalar-key-comparisons.js.map +1 -1
- package/dist/src/rules/keyed-selection/written-record-entries.d.ts.map +1 -1
- package/dist/src/rules/keyed-selection/written-record-entries.js +3 -12
- package/dist/src/rules/keyed-selection/written-record-entries.js.map +1 -1
- package/dist/src/rules/lazy-callback-leaf.d.ts.map +1 -1
- package/dist/src/rules/lazy-callback-leaf.js +3 -16
- package/dist/src/rules/lazy-callback-leaf.js.map +1 -1
- package/dist/src/rules/legacy-use-value-edits.d.ts +11 -0
- package/dist/src/rules/legacy-use-value-edits.d.ts.map +1 -0
- package/dist/src/rules/legacy-use-value-edits.js +120 -0
- package/dist/src/rules/legacy-use-value-edits.js.map +1 -0
- package/dist/src/rules/legacy-use-value.d.ts +3 -3
- package/dist/src/rules/legacy-use-value.d.ts.map +1 -1
- package/dist/src/rules/legacy-use-value.js +51 -40
- package/dist/src/rules/legacy-use-value.js.map +1 -1
- package/dist/src/rules/listener-ref-state/listener-callbacks.js +2 -7
- package/dist/src/rules/listener-ref-state/listener-callbacks.js.map +1 -1
- package/dist/src/rules/listener-ref-state/listener-ref-candidates.js +2 -10
- package/dist/src/rules/listener-ref-state/listener-ref-candidates.js.map +1 -1
- package/dist/src/rules/listener-ref-state/listener-ref-state.d.ts.map +1 -1
- package/dist/src/rules/listener-ref-state/listener-ref-state.js +2 -10
- package/dist/src/rules/listener-ref-state/listener-ref-state.js.map +1 -1
- package/dist/src/rules/listener-ref-state/synchronous-regions.d.ts.map +1 -1
- package/dist/src/rules/listener-ref-state/synchronous-regions.js +2 -5
- package/dist/src/rules/listener-ref-state/synchronous-regions.js.map +1 -1
- package/dist/src/rules/literal-boolean-leaf/boolean-setters.d.ts +1 -0
- package/dist/src/rules/literal-boolean-leaf/boolean-setters.d.ts.map +1 -1
- package/dist/src/rules/literal-boolean-leaf/boolean-setters.js +13 -44
- package/dist/src/rules/literal-boolean-leaf/boolean-setters.js.map +1 -1
- package/dist/src/rules/literal-boolean-leaf/presentation-surfaces.js +1 -12
- package/dist/src/rules/literal-boolean-leaf/presentation-surfaces.js.map +1 -1
- package/dist/src/rules/memo-parent-captures/captured-values.d.ts +15 -0
- package/dist/src/rules/memo-parent-captures/captured-values.d.ts.map +1 -0
- package/dist/src/rules/memo-parent-captures/captured-values.js +310 -0
- package/dist/src/rules/memo-parent-captures/captured-values.js.map +1 -0
- package/dist/src/rules/memo-parent-captures/computed-edits.d.ts +14 -0
- package/dist/src/rules/memo-parent-captures/computed-edits.d.ts.map +1 -0
- package/dist/src/rules/memo-parent-captures/computed-edits.js +124 -0
- package/dist/src/rules/memo-parent-captures/computed-edits.js.map +1 -0
- package/dist/src/rules/memo-parent-captures/finding.d.ts +4 -0
- package/dist/src/rules/memo-parent-captures/finding.d.ts.map +1 -0
- package/dist/src/rules/memo-parent-captures/finding.js +48 -0
- package/dist/src/rules/memo-parent-captures/finding.js.map +1 -0
- package/dist/src/rules/memo-parent-captures/memo-parent-captures.d.ts +10 -0
- package/dist/src/rules/memo-parent-captures/memo-parent-captures.d.ts.map +1 -0
- package/dist/src/rules/memo-parent-captures/memo-parent-captures.js +119 -0
- package/dist/src/rules/memo-parent-captures/memo-parent-captures.js.map +1 -0
- package/dist/src/rules/memo-parent-captures/model.d.ts +43 -0
- package/dist/src/rules/memo-parent-captures/model.d.ts.map +1 -0
- package/dist/src/rules/memo-parent-captures/model.js +2 -0
- package/dist/src/rules/memo-parent-captures/model.js.map +1 -0
- package/dist/src/rules/object-draft/independent-sinks.d.ts.map +1 -1
- package/dist/src/rules/object-draft/independent-sinks.js +9 -22
- package/dist/src/rules/object-draft/independent-sinks.js.map +1 -1
- package/dist/src/rules/object-draft/object-draft.d.ts.map +1 -1
- package/dist/src/rules/object-draft/object-draft.js +2 -16
- package/dist/src/rules/object-draft/object-draft.js.map +1 -1
- package/dist/src/rules/object-draft/property-writes.d.ts.map +1 -1
- package/dist/src/rules/object-draft/property-writes.js +4 -15
- package/dist/src/rules/object-draft/property-writes.js.map +1 -1
- package/dist/src/rules/observable-clone-writes/observable-clone-writes.d.ts +2 -0
- package/dist/src/rules/observable-clone-writes/observable-clone-writes.d.ts.map +1 -1
- package/dist/src/rules/observable-clone-writes/observable-clone-writes.js +9 -11
- package/dist/src/rules/observable-clone-writes/observable-clone-writes.js.map +1 -1
- package/dist/src/rules/{derived-use-value/derived-use-value.d.ts → observable-lists/observable-lists.d.ts} +3 -3
- package/dist/src/rules/observable-lists/observable-lists.d.ts.map +1 -0
- package/dist/src/rules/observable-lists/observable-lists.js +134 -0
- package/dist/src/rules/observable-lists/observable-lists.js.map +1 -0
- package/dist/src/rules/observable-lists/tracked-row-keys.d.ts +11 -0
- package/dist/src/rules/observable-lists/tracked-row-keys.d.ts.map +1 -0
- package/dist/src/rules/observable-lists/tracked-row-keys.js +108 -0
- package/dist/src/rules/observable-lists/tracked-row-keys.js.map +1 -0
- package/dist/src/rules/observable-ownership/observable-ownership.d.ts.map +1 -1
- package/dist/src/rules/observable-ownership/observable-ownership.js +1 -3
- package/dist/src/rules/observable-ownership/observable-ownership.js.map +1 -1
- package/dist/src/rules/observable-reads/conditional-jsx-slots.d.ts +9 -0
- package/dist/src/rules/observable-reads/conditional-jsx-slots.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/conditional-jsx-slots.js +5 -10
- package/dist/src/rules/observable-reads/conditional-jsx-slots.js.map +1 -1
- package/dist/src/rules/observable-reads/control-flow-move-down.d.ts +13 -0
- package/dist/src/rules/observable-reads/control-flow-move-down.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/control-flow-move-down.js +36 -0
- package/dist/src/rules/observable-reads/control-flow-move-down.js.map +1 -0
- package/dist/src/rules/observable-reads/field-writes.d.ts +33 -0
- package/dist/src/rules/observable-reads/field-writes.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/field-writes.js +48 -0
- package/dist/src/rules/observable-reads/field-writes.js.map +1 -0
- package/dist/src/rules/observable-reads/flow-expressions.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/flow-expressions.js +48 -9
- package/dist/src/rules/observable-reads/flow-expressions.js.map +1 -1
- package/dist/src/rules/observable-reads/independent-subscription-bindings.d.ts +2 -0
- package/dist/src/rules/observable-reads/independent-subscription-bindings.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/independent-subscription-bindings.js +12 -6
- package/dist/src/rules/observable-reads/independent-subscription-bindings.js.map +1 -1
- package/dist/src/rules/observable-reads/keyed-narrowing.d.ts +9 -0
- package/dist/src/rules/observable-reads/keyed-narrowing.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/keyed-narrowing.js +165 -0
- package/dist/src/rules/observable-reads/keyed-narrowing.js.map +1 -0
- package/dist/src/rules/observable-reads/model.d.ts +6 -1
- package/dist/src/rules/observable-reads/model.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/move-down.d.ts +3 -1
- package/dist/src/rules/observable-reads/move-down.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/move-down.js +24 -20
- package/dist/src/rules/observable-reads/move-down.js.map +1 -1
- package/dist/src/rules/observable-reads/move-into-child.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/move-into-child.js +18 -8
- package/dist/src/rules/observable-reads/move-into-child.js.map +1 -1
- package/dist/src/rules/observable-reads/narrow-use-value.d.ts +1 -1
- package/dist/src/rules/observable-reads/narrow-use-value.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/narrow-use-value.js +49 -22
- package/dist/src/rules/observable-reads/narrow-use-value.js.map +1 -1
- package/dist/src/rules/observable-reads/non-tracking-snapshots.d.ts +2 -0
- package/dist/src/rules/observable-reads/non-tracking-snapshots.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/non-tracking-snapshots.js +18 -6
- package/dist/src/rules/observable-reads/non-tracking-snapshots.js.map +1 -1
- package/dist/src/rules/observable-reads/observable-paths.d.ts +14 -1
- package/dist/src/rules/observable-reads/observable-paths.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/observable-paths.js +41 -18
- package/dist/src/rules/observable-reads/observable-paths.js.map +1 -1
- package/dist/src/rules/observable-reads/observable-reads.d.ts +4 -1
- package/dist/src/rules/observable-reads/observable-reads.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/observable-reads.js +24 -10
- package/dist/src/rules/observable-reads/observable-reads.js.map +1 -1
- package/dist/src/rules/observable-reads/owner-subscription-work.d.ts +6 -1
- package/dist/src/rules/observable-reads/owner-subscription-work.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/owner-subscription-work.js +19 -33
- package/dist/src/rules/observable-reads/owner-subscription-work.js.map +1 -1
- package/dist/src/rules/observable-reads/plain-seed-paths.d.ts +13 -0
- package/dist/src/rules/observable-reads/plain-seed-paths.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/plain-seed-paths.js +102 -0
- package/dist/src/rules/observable-reads/plain-seed-paths.js.map +1 -0
- package/dist/src/rules/observable-reads/primitive-paths.d.ts +2 -0
- package/dist/src/rules/observable-reads/primitive-paths.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/primitive-paths.js +12 -16
- package/dist/src/rules/observable-reads/primitive-paths.js.map +1 -1
- package/dist/src/rules/observable-reads/raw-value-paths.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/raw-value-paths.js +3 -14
- package/dist/src/rules/observable-reads/raw-value-paths.js.map +1 -1
- package/dist/src/rules/observable-reads/render-exclusion.d.ts +10 -0
- package/dist/src/rules/observable-reads/render-exclusion.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/render-exclusion.js +134 -0
- package/dist/src/rules/observable-reads/render-exclusion.js.map +1 -0
- package/dist/src/rules/observable-reads/render-gates.d.ts +17 -0
- package/dist/src/rules/observable-reads/render-gates.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/render-gates.js +97 -0
- package/dist/src/rules/observable-reads/render-gates.js.map +1 -0
- package/dist/src/rules/observable-reads/selector-expressions.d.ts +19 -0
- package/dist/src/rules/observable-reads/selector-expressions.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/selector-expressions.js +301 -0
- package/dist/src/rules/observable-reads/selector-expressions.js.map +1 -0
- package/dist/src/rules/observable-reads/selector-subscriptions.d.ts +24 -0
- package/dist/src/rules/observable-reads/selector-subscriptions.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/selector-subscriptions.js +104 -0
- package/dist/src/rules/observable-reads/selector-subscriptions.js.map +1 -0
- package/dist/src/rules/observable-reads/sibling-writes.d.ts +24 -0
- package/dist/src/rules/observable-reads/sibling-writes.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/sibling-writes.js +52 -0
- package/dist/src/rules/observable-reads/sibling-writes.js.map +1 -0
- package/dist/src/rules/observable-reads/snapshot-safe-reads.d.ts +17 -0
- package/dist/src/rules/observable-reads/snapshot-safe-reads.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/snapshot-safe-reads.js +110 -0
- package/dist/src/rules/observable-reads/snapshot-safe-reads.js.map +1 -0
- package/dist/src/rules/observable-reads/split-leaves.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/split-leaves.js +76 -24
- package/dist/src/rules/observable-reads/split-leaves.js.map +1 -1
- package/dist/src/rules/observable-reads/stable-effect-dependencies.d.ts +12 -2
- package/dist/src/rules/observable-reads/stable-effect-dependencies.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/stable-effect-dependencies.js +135 -6
- package/dist/src/rules/observable-reads/stable-effect-dependencies.js.map +1 -1
- package/dist/src/rules/observable-reads/subscription-flow.d.ts +8 -2
- package/dist/src/rules/observable-reads/subscription-flow.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/subscription-flow.js +110 -29
- package/dist/src/rules/observable-reads/subscription-flow.js.map +1 -1
- package/dist/src/rules/observable-reads/subscription-inventory.d.ts +4 -2
- package/dist/src/rules/observable-reads/subscription-inventory.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/subscription-inventory.js +73 -26
- package/dist/src/rules/observable-reads/subscription-inventory.js.map +1 -1
- package/dist/src/rules/observable-reads/subscription-leaf-targets.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/subscription-leaf-targets.js +24 -7
- package/dist/src/rules/observable-reads/subscription-leaf-targets.js.map +1 -1
- package/dist/src/rules/observable-reads/unrendered-subscriptions.d.ts +12 -0
- package/dist/src/rules/observable-reads/unrendered-subscriptions.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/unrendered-subscriptions.js +262 -0
- package/dist/src/rules/observable-reads/unrendered-subscriptions.js.map +1 -0
- package/dist/src/rules/observable-reads/untracked-render-reads.d.ts +10 -0
- package/dist/src/rules/observable-reads/untracked-render-reads.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/untracked-render-reads.js +48 -0
- package/dist/src/rules/observable-reads/untracked-render-reads.js.map +1 -0
- package/dist/src/rules/observable-reads/use-value-bindings.d.ts +18 -0
- package/dist/src/rules/observable-reads/use-value-bindings.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/use-value-bindings.js +57 -0
- package/dist/src/rules/observable-reads/use-value-bindings.js.map +1 -0
- package/dist/src/rules/observable-reads/use-value-inputs.d.ts +5 -3
- package/dist/src/rules/observable-reads/use-value-inputs.d.ts.map +1 -1
- package/dist/src/rules/observable-reads/use-value-inputs.js +24 -11
- package/dist/src/rules/observable-reads/use-value-inputs.js.map +1 -1
- package/dist/src/rules/observable-reads/wrapped-use-value-results.d.ts +17 -0
- package/dist/src/rules/observable-reads/wrapped-use-value-results.d.ts.map +1 -0
- package/dist/src/rules/observable-reads/wrapped-use-value-results.js +98 -0
- package/dist/src/rules/observable-reads/wrapped-use-value-results.js.map +1 -0
- package/dist/src/rules/observable-toggle.d.ts.map +1 -1
- package/dist/src/rules/observable-toggle.js +2 -1
- package/dist/src/rules/observable-toggle.js.map +1 -1
- package/dist/src/rules/observable-tracking/model.d.ts +6 -0
- package/dist/src/rules/observable-tracking/model.d.ts.map +1 -1
- package/dist/src/rules/observable-tracking/observable-tracking.d.ts.map +1 -1
- package/dist/src/rules/observable-tracking/observable-tracking.js +1 -8
- package/dist/src/rules/observable-tracking/observable-tracking.js.map +1 -1
- package/dist/src/rules/observable-tracking/reactive-inputs.d.ts +16 -13
- package/dist/src/rules/observable-tracking/reactive-inputs.d.ts.map +1 -1
- package/dist/src/rules/observable-tracking/reactive-inputs.js +52 -125
- package/dist/src/rules/observable-tracking/reactive-inputs.js.map +1 -1
- package/dist/src/rules/observable-tracking/render-owners.d.ts +2 -0
- package/dist/src/rules/observable-tracking/render-owners.d.ts.map +1 -1
- package/dist/src/rules/observable-tracking/render-owners.js +1 -1
- package/dist/src/rules/observable-tracking/render-owners.js.map +1 -1
- package/dist/src/rules/observable-tracking/render-read-edits.d.ts +13 -0
- package/dist/src/rules/observable-tracking/render-read-edits.d.ts.map +1 -0
- package/dist/src/rules/observable-tracking/render-read-edits.js +44 -0
- package/dist/src/rules/observable-tracking/render-read-edits.js.map +1 -0
- package/dist/src/rules/observable-tracking/render-reads.d.ts +6 -3
- package/dist/src/rules/observable-tracking/render-reads.d.ts.map +1 -1
- package/dist/src/rules/observable-tracking/render-reads.js +119 -24
- package/dist/src/rules/observable-tracking/render-reads.js.map +1 -1
- package/dist/src/rules/observable-tracking/write-guards.d.ts +9 -0
- package/dist/src/rules/observable-tracking/write-guards.d.ts.map +1 -0
- package/dist/src/rules/observable-tracking/write-guards.js +45 -0
- package/dist/src/rules/observable-tracking/write-guards.js.map +1 -0
- package/dist/src/rules/opaque-instance-state.d.ts +8 -0
- package/dist/src/rules/opaque-instance-state.d.ts.map +1 -0
- package/dist/src/rules/opaque-instance-state.js +58 -0
- package/dist/src/rules/opaque-instance-state.js.map +1 -0
- package/dist/src/rules/primitive-projection/owner-hooks.d.ts +17 -0
- package/dist/src/rules/primitive-projection/owner-hooks.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/owner-hooks.js +112 -0
- package/dist/src/rules/primitive-projection/owner-hooks.js.map +1 -0
- package/dist/src/rules/primitive-projection/primitive-projection.d.ts +9 -0
- package/dist/src/rules/primitive-projection/primitive-projection.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/primitive-projection.js +148 -0
- package/dist/src/rules/primitive-projection/primitive-projection.js.map +1 -0
- package/dist/src/rules/primitive-projection/projection-domain.d.ts +18 -0
- package/dist/src/rules/primitive-projection/projection-domain.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/projection-domain.js +145 -0
- package/dist/src/rules/primitive-projection/projection-domain.js.map +1 -0
- package/dist/src/rules/primitive-projection/projection-sites.d.ts +29 -0
- package/dist/src/rules/primitive-projection/projection-sites.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/projection-sites.js +235 -0
- package/dist/src/rules/primitive-projection/projection-sites.js.map +1 -0
- package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts +52 -0
- package/dist/src/rules/primitive-projection/projection-subscriptions.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/projection-subscriptions.js +109 -0
- package/dist/src/rules/primitive-projection/projection-subscriptions.js.map +1 -0
- package/dist/src/rules/primitive-projection/stale-render-reads.d.ts +22 -0
- package/dist/src/rules/primitive-projection/stale-render-reads.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/stale-render-reads.js +54 -0
- package/dist/src/rules/primitive-projection/stale-render-reads.js.map +1 -0
- package/dist/src/rules/primitive-projection/subscription-overlap.d.ts +19 -0
- package/dist/src/rules/primitive-projection/subscription-overlap.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/subscription-overlap.js +84 -0
- package/dist/src/rules/primitive-projection/subscription-overlap.js.map +1 -0
- package/dist/src/rules/primitive-projection/truthiness-projection.d.ts +9 -0
- package/dist/src/rules/primitive-projection/truthiness-projection.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/truthiness-projection.js +104 -0
- package/dist/src/rules/primitive-projection/truthiness-projection.js.map +1 -0
- package/dist/src/rules/primitive-projection/truthiness-sites.d.ts +16 -0
- package/dist/src/rules/primitive-projection/truthiness-sites.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/truthiness-sites.js +86 -0
- package/dist/src/rules/primitive-projection/truthiness-sites.js.map +1 -0
- package/dist/src/rules/primitive-projection/value-domains.d.ts +28 -0
- package/dist/src/rules/primitive-projection/value-domains.d.ts.map +1 -0
- package/dist/src/rules/primitive-projection/value-domains.js +241 -0
- package/dist/src/rules/primitive-projection/value-domains.js.map +1 -0
- package/dist/src/rules/react-commit-sensitivity/binding-resolution.d.ts.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/binding-resolution.js +2 -1
- package/dist/src/rules/react-commit-sensitivity/binding-resolution.js.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/direct-transitions.d.ts.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/direct-transitions.js +2 -7
- package/dist/src/rules/react-commit-sensitivity/direct-transitions.js.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/react-commit-sensitivity.js +2 -1
- package/dist/src/rules/react-commit-sensitivity/react-commit-sensitivity.js.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/ref-identity.d.ts.map +1 -1
- package/dist/src/rules/react-commit-sensitivity/ref-identity.js +18 -11
- package/dist/src/rules/react-commit-sensitivity/ref-identity.js.map +1 -1
- package/dist/src/rules/source-callback-contract/latest-callback-ref.d.ts.map +1 -1
- package/dist/src/rules/source-callback-contract/latest-callback-ref.js +3 -2
- package/dist/src/rules/source-callback-contract/latest-callback-ref.js.map +1 -1
- package/dist/src/rules/source-callback-contract/react-effects.d.ts +0 -1
- package/dist/src/rules/source-callback-contract/react-effects.d.ts.map +1 -1
- package/dist/src/rules/source-callback-contract/react-effects.js +2 -4
- package/dist/src/rules/source-callback-contract/react-effects.js.map +1 -1
- package/dist/src/rules/source-callback-contract/source-callback-contract.d.ts.map +1 -1
- package/dist/src/rules/source-callback-contract/source-callback-contract.js +7 -13
- package/dist/src/rules/source-callback-contract/source-callback-contract.js.map +1 -1
- package/dist/src/rules/state-proofs/binding-lookup.d.ts +0 -1
- package/dist/src/rules/state-proofs/binding-lookup.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/binding-lookup.js +19 -14
- package/dist/src/rules/state-proofs/binding-lookup.js.map +1 -1
- package/dist/src/rules/state-proofs/builtin-read-calls.d.ts +19 -0
- package/dist/src/rules/state-proofs/builtin-read-calls.d.ts.map +1 -0
- package/dist/src/rules/state-proofs/builtin-read-calls.js +317 -0
- package/dist/src/rules/state-proofs/builtin-read-calls.js.map +1 -0
- package/dist/src/rules/state-proofs/callback-sites.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/callback-sites.js +2 -9
- package/dist/src/rules/state-proofs/callback-sites.js.map +1 -1
- package/dist/src/rules/state-proofs/event-roots.d.ts +2 -0
- package/dist/src/rules/state-proofs/event-roots.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/event-roots.js +10 -19
- package/dist/src/rules/state-proofs/event-roots.js.map +1 -1
- package/dist/src/rules/state-proofs/jsx-subtrees.d.ts +10 -1
- package/dist/src/rules/state-proofs/jsx-subtrees.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/jsx-subtrees.js +62 -2
- package/dist/src/rules/state-proofs/jsx-subtrees.js.map +1 -1
- package/dist/src/rules/state-proofs/presentation-calls.d.ts +28 -0
- package/dist/src/rules/state-proofs/presentation-calls.d.ts.map +1 -0
- package/dist/src/rules/state-proofs/presentation-calls.js +200 -0
- package/dist/src/rules/state-proofs/presentation-calls.js.map +1 -0
- package/dist/src/rules/state-proofs/projection-hops.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/projection-hops.js +3 -16
- package/dist/src/rules/state-proofs/projection-hops.js.map +1 -1
- package/dist/src/rules/state-proofs/receiver-types.d.ts +25 -0
- package/dist/src/rules/state-proofs/receiver-types.d.ts.map +1 -0
- package/dist/src/rules/state-proofs/receiver-types.js +202 -0
- package/dist/src/rules/state-proofs/receiver-types.js.map +1 -0
- package/dist/src/rules/state-proofs/state-proofs.d.ts +8 -1
- package/dist/src/rules/state-proofs/state-proofs.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/state-proofs.js +40 -19
- package/dist/src/rules/state-proofs/state-proofs.js.map +1 -1
- package/dist/src/rules/state-proofs/unique-repeated-selection.d.ts +1 -0
- package/dist/src/rules/state-proofs/unique-repeated-selection.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/unique-repeated-selection.js +6 -17
- package/dist/src/rules/state-proofs/unique-repeated-selection.js.map +1 -1
- package/dist/src/rules/state-proofs/uniqueness-filters.d.ts.map +1 -1
- package/dist/src/rules/state-proofs/uniqueness-filters.js +12 -5
- package/dist/src/rules/state-proofs/uniqueness-filters.js.map +1 -1
- package/package.json +5 -2
- package/skills/legend-doctor/SKILL.md +16 -13
- package/dist/src/index.d.ts +0 -18
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -9
- package/dist/src/index.js.map +0 -1
- package/dist/src/project/legend-state-package.d.ts +0 -4
- package/dist/src/project/legend-state-package.d.ts.map +0 -1
- package/dist/src/project/legend-state-package.js +0 -109
- package/dist/src/project/legend-state-package.js.map +0 -1
- package/dist/src/project/source-components/pure-projections.d.ts +0 -4
- package/dist/src/project/source-components/pure-projections.d.ts.map +0 -1
- package/dist/src/project/source-components/pure-projections.js +0 -65
- package/dist/src/project/source-components/pure-projections.js.map +0 -1
- package/dist/src/rules/derived-use-value/derived-memos.d.ts +0 -28
- package/dist/src/rules/derived-use-value/derived-memos.d.ts.map +0 -1
- package/dist/src/rules/derived-use-value/derived-memos.js +0 -162
- package/dist/src/rules/derived-use-value/derived-memos.js.map +0 -1
- package/dist/src/rules/derived-use-value/derived-use-value.d.ts.map +0 -1
- package/dist/src/rules/derived-use-value/derived-use-value.js +0 -76
- package/dist/src/rules/derived-use-value/derived-use-value.js.map +0 -1
- package/dist/src/rules/derived-use-value/migration-owner.d.ts +0 -4
- package/dist/src/rules/derived-use-value/migration-owner.d.ts.map +0 -1
- package/dist/src/rules/derived-use-value/migration-owner.js +0 -100
- package/dist/src/rules/derived-use-value/migration-owner.js.map +0 -1
- package/dist/src/rules/derived-use-value/migration-proof.d.ts +0 -5
- package/dist/src/rules/derived-use-value/migration-proof.d.ts.map +0 -1
- package/dist/src/rules/derived-use-value/migration-proof.js +0 -168
- package/dist/src/rules/derived-use-value/migration-proof.js.map +0 -1
- package/dist/src/rules/derived-use-value/primitive-results.d.ts +0 -9
- package/dist/src/rules/derived-use-value/primitive-results.d.ts.map +0 -1
- package/dist/src/rules/derived-use-value/primitive-results.js +0 -154
- package/dist/src/rules/derived-use-value/primitive-results.js.map +0 -1
- package/dist/src/rules/effects/setup-only-mount.d.ts +0 -6
- package/dist/src/rules/effects/setup-only-mount.d.ts.map +0 -1
- package/dist/src/rules/effects/setup-only-mount.js +0 -65
- package/dist/src/rules/effects/setup-only-mount.js.map +0 -1
- package/dist/src/rules/observable-ownership/written-computed-initializers.d.ts +0 -5
- package/dist/src/rules/observable-ownership/written-computed-initializers.d.ts.map +0 -1
- package/dist/src/rules/observable-ownership/written-computed-initializers.js +0 -159
- package/dist/src/rules/observable-ownership/written-computed-initializers.js.map +0 -1
- package/dist/src/rules/observable-reads/fresh-selector-results.d.ts +0 -10
- package/dist/src/rules/observable-reads/fresh-selector-results.d.ts.map +0 -1
- package/dist/src/rules/observable-reads/fresh-selector-results.js +0 -191
- package/dist/src/rules/observable-reads/fresh-selector-results.js.map +0 -1
- package/dist/src/rules/observable-tracking/helper-summary.d.ts +0 -26
- package/dist/src/rules/observable-tracking/helper-summary.d.ts.map +0 -1
- package/dist/src/rules/observable-tracking/helper-summary.js +0 -247
- package/dist/src/rules/observable-tracking/helper-summary.js.map +0 -1
- package/dist/src/rules/observable-tracking/helper-tracking.d.ts +0 -5
- package/dist/src/rules/observable-tracking/helper-tracking.d.ts.map +0 -1
- package/dist/src/rules/observable-tracking/helper-tracking.js +0 -77
- package/dist/src/rules/observable-tracking/helper-tracking.js.map +0 -1
- package/dist/src/rules/plain-primitive-projection.d.ts +0 -12
- package/dist/src/rules/plain-primitive-projection.d.ts.map +0 -1
- package/dist/src/rules/plain-primitive-projection.js +0 -232
- package/dist/src/rules/plain-primitive-projection.js.map +0 -1
package/EXAMPLES.md
CHANGED
|
@@ -5,7 +5,8 @@ Use these examples after reading a finding. They show the shape of an edit, not
|
|
|
5
5
|
- Apply `change` findings as written.
|
|
6
6
|
- Inspect `candidate` findings first.
|
|
7
7
|
- Preserve ownership, timing, mount identity, keys, cleanup, and atomic updates.
|
|
8
|
-
-
|
|
8
|
+
- When a finding carries `edits`, apply those instead of retyping the example. See
|
|
9
|
+
[REPORT.md](REPORT.md#machine-applicable-edits).
|
|
9
10
|
|
|
10
11
|
The snippets assume these imports when needed:
|
|
11
12
|
|
|
@@ -13,10 +14,11 @@ The snippets assume these imports when needed:
|
|
|
13
14
|
import { batch, type Observable } from "@legendapp/state";
|
|
14
15
|
import {
|
|
15
16
|
Computed,
|
|
16
|
-
|
|
17
|
+
For,
|
|
18
|
+
Show,
|
|
19
|
+
Switch,
|
|
17
20
|
useObservable,
|
|
18
21
|
useObserveEffect,
|
|
19
|
-
useUnmount,
|
|
20
22
|
useValue,
|
|
21
23
|
} from "@legendapp/state/react";
|
|
22
24
|
import { $React } from "@legendapp/state/react-web";
|
|
@@ -41,11 +43,12 @@ const refresh = () => {
|
|
|
41
43
|
|
|
42
44
|
### Calculate derived values during render
|
|
43
45
|
|
|
44
|
-
`delete-derived-state` removes the stale
|
|
46
|
+
`delete-derived-state` removes the render that shows a stale value after an input changes and the effect-driven
|
|
47
|
+
render that corrects it.
|
|
45
48
|
|
|
46
49
|
```tsx
|
|
47
50
|
// Before
|
|
48
|
-
const [total, setTotal] = useState(
|
|
51
|
+
const [total, setTotal] = useState(price * quantity);
|
|
49
52
|
useEffect(() => setTotal(price * quantity), [price, quantity]);
|
|
50
53
|
|
|
51
54
|
// After
|
|
@@ -54,6 +57,9 @@ const total = price * quantity;
|
|
|
54
57
|
|
|
55
58
|
If that was the effect's only work, `delete-effect` removes the empty effect too.
|
|
56
59
|
|
|
60
|
+
When the initializer differs from the value the effect writes, such as `useState(0)`, the first commit shows the
|
|
61
|
+
initializer. Calculating during render would change that first commit, so the finding is `keep-state`.
|
|
62
|
+
|
|
57
63
|
### Remove a React mirror
|
|
58
64
|
|
|
59
65
|
`use-value` keeps the Legend value as the only owner.
|
|
@@ -202,15 +208,79 @@ const name = profile.name;
|
|
|
202
208
|
const name = useValue(profile$.name);
|
|
203
209
|
```
|
|
204
210
|
|
|
211
|
+
The finding needs a production write that changes another field under the subscribed parent without touching the
|
|
212
|
+
read one. Otherwise nothing the narrow subscription skips ever changes, and the action abstains. That covers a parent
|
|
213
|
+
passed in as a prop, a parent that is only replaced whole, and a field only ever written together with the read one.
|
|
214
|
+
|
|
215
|
+
A single-property destructure such as `const { name } = useValue(profile$)` carries `edits` that produce
|
|
216
|
+
`const name = useValue(profile$.name)`. Renaming reads of a whole-value binding stays prose.
|
|
217
|
+
|
|
218
|
+
A map read at one key narrows the same way:
|
|
219
|
+
|
|
220
|
+
```tsx
|
|
221
|
+
// Before: a write to any area wakes this label
|
|
222
|
+
const allAreas = useValue(areas$);
|
|
223
|
+
return <span>{allAreas[areaId]?.name}</span>;
|
|
224
|
+
|
|
225
|
+
// After: only areas$[areaId] can wake it
|
|
226
|
+
const area = useValue(areas$[areaId]);
|
|
227
|
+
return <span>{area?.name}</span>;
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Every read must index the value with the same key, and the key must be fixed for the render: a literal, a prop or
|
|
231
|
+
parameter, or a `const`. When that `const` comes after the subscription, the finding says to declare the narrowed
|
|
232
|
+
subscription after it, which holds only when nothing in between reads the value, returns, or throws. The finding
|
|
233
|
+
needs a production write that changes one entry without replacing the map, and no other subscription, observer
|
|
234
|
+
read, dependency-free effect, ref or `peek()` render read, or subscribing parent that renders the owner on the same
|
|
235
|
+
change.
|
|
236
|
+
|
|
205
237
|
For a derived primitive, keep the comparison inside the selector:
|
|
206
238
|
|
|
207
239
|
```tsx
|
|
208
240
|
const selected = useValue(() => selectedId$.get() === id);
|
|
209
241
|
```
|
|
210
242
|
|
|
243
|
+
### Drop a subscription no render reads
|
|
244
|
+
|
|
245
|
+
Use `peek-unrendered-use-value` when a `useValue` result feeds only a hook initial value or a synchronous event
|
|
246
|
+
handler. The subscription reruns the component on every update for a value its output never shows.
|
|
247
|
+
|
|
248
|
+
```tsx
|
|
249
|
+
// Before: every play or pause renders the whole playlist
|
|
250
|
+
const isPlaying = useValue(player$.isPlaying);
|
|
251
|
+
const wasPlayingRef = useRef(isPlaying);
|
|
252
|
+
const toggle = useCallback(() => setPlaying(!isPlaying), [isPlaying]);
|
|
253
|
+
|
|
254
|
+
// After: reads take a snapshot when they run
|
|
255
|
+
const wasPlayingRef = useRef(player$.isPlaying.peek());
|
|
256
|
+
const toggle = useCallback(() => setPlaying(!player$.isPlaying.peek()), []);
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The path must be seeded with plain data or a module constant of a literal, so dropping the subscription never
|
|
260
|
+
delays a lazy `synced` or computed source. A persisted store is lazy: its first read starts the load, so it stays
|
|
261
|
+
out of scope. The result may sit behind `!`, a type assertion, or `?? fallback`; each rewritten read keeps the
|
|
262
|
+
fallback, which must be a literal or a module `const`. The action abstains when a render reads a ref, `peek()`,
|
|
263
|
+
or an untracked `get()` that could depend on the forced rerender, and when a read is awaited, deferred, or captured
|
|
264
|
+
by a callback that omits the value from its dependencies. A `path$.get()` directly inside the synchronous selector of
|
|
265
|
+
`useValue`, `use$`, or `useSelector` is tracked by that hook and does not block it.
|
|
266
|
+
|
|
267
|
+
Two more reads take a snapshot safely. A compare-and-set guard, `if (value !== next) path$.set(next)`, in an inline
|
|
268
|
+
handler or a bare owner-level callback skips only writes Legend drops anyway, since `set` notifies nothing when the
|
|
269
|
+
stored value is identical; `next` must be a literal or a local name, and the comparison must be the guard's last
|
|
270
|
+
condition with no `else`. The initializer of an owner-level `const` that nothing references, and that assigns
|
|
271
|
+
nothing, never reaches output, so its read becomes a `peek()` as well.
|
|
272
|
+
|
|
211
273
|
### Split unrelated leaves
|
|
212
274
|
|
|
213
|
-
`split-use-value-leaves` gives each leaf its own field subscription.
|
|
275
|
+
`split-use-value-leaves` gives each leaf its own field subscription. It requires an object-literal initial value
|
|
276
|
+
that proves the field set, and a production write that changes an unread data field without touching a read one.
|
|
277
|
+
When every field that changes is already read, or the only unread fields are constants and functions, the split
|
|
278
|
+
removes no render and the action abstains.
|
|
279
|
+
|
|
280
|
+
Both actions count writes by synchronous stretch, not by line. Writes in the same function body before an `await`,
|
|
281
|
+
or inside one `batch` or array callback, land in one render, so an unread field written beside a read one proves
|
|
282
|
+
nothing. A write after an `await`, or in a separate handler or listener, is its own stretch. Writes in the
|
|
283
|
+
module body run while the module loads, before any importer renders, so they never count.
|
|
214
284
|
|
|
215
285
|
```tsx
|
|
216
286
|
function Profile() {
|
|
@@ -267,7 +337,8 @@ separate subscriptions add overhead and are justified only when their combined r
|
|
|
267
337
|
|
|
268
338
|
### Remove selector work and legacy names
|
|
269
339
|
|
|
270
|
-
Use `pass-observable-to-use-value` for a direct value and `replace-legacy-use-value` for
|
|
340
|
+
Use `pass-observable-to-use-value` for a direct value and `replace-legacy-use-value` for `use$` and `useSelector`,
|
|
341
|
+
which Legend State deprecates in favor of `useValue` and plans to remove.
|
|
271
342
|
|
|
272
343
|
```tsx
|
|
273
344
|
useValue(() => profile$.name.get()); // Before
|
|
@@ -277,6 +348,14 @@ useSelector(profile$.name); // Before
|
|
|
277
348
|
useValue(profile$.name); // After
|
|
278
349
|
```
|
|
279
350
|
|
|
351
|
+
The rename is `style`, since `useValue` is the same function, except for a `use$` call in a function the React Compiler
|
|
352
|
+
compiles. The Compiler gives hook semantics only to callees named `/^use[A-Z0-9]/`, so it can cache the `use$` result
|
|
353
|
+
and render a stale value; there the rename is `change`. `useSelector`, and an alias whose imported or local name passes
|
|
354
|
+
that test, stay `style`. A function counts as compiled when the project's config enables the Compiler and its default
|
|
355
|
+
`infer` mode compiles it: a component or hook by name that calls a hook or creates JSX, a `memo` or `forwardRef`
|
|
356
|
+
callback, or a `"use memo"` function, with no `"use no memo"` directive and no ESLint suppression of a React hook rule.
|
|
357
|
+
A function passed inline to `observer` is not compiled.
|
|
358
|
+
|
|
280
359
|
The same-node synchronous selector rewrite without options is `style`: it selects the same value, with no proven
|
|
281
360
|
render or lifecycle saving. Inside `observer`, direct input can use the enclosing observer's tracking instead of a
|
|
282
361
|
separate selector hook. Async selectors and calls with options remain unchanged because their Promise or tracking
|
|
@@ -284,31 +363,60 @@ contracts can differ. An eager `useValue(profile$.name.get())` is still `change`
|
|
|
284
363
|
an ordinary component or avoids redundant selector hooks inside `observer`. Keep `useValue(() => ...)` when the
|
|
285
364
|
selector derives a value from one or more observables, including boolean projections and formatted computed values.
|
|
286
365
|
|
|
287
|
-
|
|
366
|
+
Both actions carry `edits`. A legacy migration renames every legacy call in the file and removes the legacy import
|
|
367
|
+
specifiers together, so each of those findings carries the same file-wide edit set.
|
|
368
|
+
|
|
369
|
+
### Select a derived primitive
|
|
288
370
|
|
|
289
|
-
|
|
290
|
-
|
|
371
|
+
This is a manual pattern; no action reports it on its own. When a `useMemo` derives a primitive from observable reads
|
|
372
|
+
that nothing else in the component reads, select the primitive instead.
|
|
291
373
|
|
|
292
374
|
```tsx
|
|
293
|
-
// Before:
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
[selectedView, selectedPlaylistId],
|
|
375
|
+
// Before: every write under habits$.streaks renders the component
|
|
376
|
+
const streaks = useValue(habits$.streaks);
|
|
377
|
+
const longest = useMemo(
|
|
378
|
+
() => Math.max(0, ...Object.values(streaks).map((s) => s.longest)),
|
|
379
|
+
[streaks],
|
|
299
380
|
);
|
|
300
381
|
|
|
301
|
-
// After: the
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
? `playlist-${library$.selectedPlaylistId.get()}`
|
|
305
|
-
: "Library",
|
|
382
|
+
// After: the selector reruns on each render, and a write renders only when the number changes
|
|
383
|
+
const longest = useValue(() =>
|
|
384
|
+
Math.max(0, ...Object.values(habits$.streaks.get()).map((s) => s.longest)),
|
|
306
385
|
);
|
|
307
|
-
const title = useValue(title$);
|
|
308
386
|
```
|
|
309
387
|
|
|
310
|
-
Keep the memo when
|
|
311
|
-
|
|
388
|
+
Keep the memo when an input is also read elsewhere in the component, since that read renders on every write anyway,
|
|
389
|
+
or when the result is an object or array, since `useValue` compares by reference and a new result always renders.
|
|
390
|
+
`snapshot-mutated-use-value` recommends this rewrite when an in-place write leaves such a memo stale.
|
|
391
|
+
|
|
392
|
+
### Select fields instead of a new object
|
|
393
|
+
|
|
394
|
+
`select-stable-selector-result` asks about a selector that builds a new object or array on every run.
|
|
395
|
+
|
|
396
|
+
```tsx
|
|
397
|
+
// Before: every viewport$.width change renders, even while `wide` stays false
|
|
398
|
+
const layout = useValue(() => ({
|
|
399
|
+
label: viewport$.label.get(),
|
|
400
|
+
wide: viewport$.width.get() > 800,
|
|
401
|
+
}));
|
|
402
|
+
|
|
403
|
+
// After: a width change renders only when `wide` flips
|
|
404
|
+
const label = useValue(viewport$.label);
|
|
405
|
+
const wide = useValue(() => viewport$.width.get() > 800);
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
`useValue` reruns its selector on each change to an observable the selector read and renders when the result `!==`
|
|
409
|
+
the result of the last render; Legend State offers no shallow or custom equality option. A new literal never equals
|
|
410
|
+
the last one, so the component renders on every tracked change. That costs a render only when a change can leave the
|
|
411
|
+
contents equal: a field built from raw reads (`{ width: viewport$.width.get() }`) changes on every write anyway, and
|
|
412
|
+
the rule stays silent.
|
|
413
|
+
|
|
414
|
+
Every finding is a `candidate`, since only the app knows whether such changes happen. It is reported for a literal
|
|
415
|
+
result when a tracked path reaches it only through comparisons, negations, conditions, or `typeof`, and that path's
|
|
416
|
+
declared domain, when known, holds objects or three or more values; and for `filter`, `map`, `flatMap`, `Object.keys`,
|
|
417
|
+
`Object.values`, or `Object.entries` of a tracked read, where you can select the primitives the render needs or render
|
|
418
|
+
the items with `<For each={items$}>`. A selector that returns a fresh value on only some paths, passes options, reads
|
|
419
|
+
no proven observable, or shares its path with another subscription in the owner stays silent.
|
|
312
420
|
|
|
313
421
|
### Update one host prop
|
|
314
422
|
|
|
@@ -383,9 +491,15 @@ batch(() => {
|
|
|
383
491
|
|
|
384
492
|
This preserves an atomic transition: subscribers see one completed update.
|
|
385
493
|
|
|
494
|
+
React already commits writes from one synchronous stretch in one render, so neither action saves a React render. Both
|
|
495
|
+
appear only when one non-React tracker in the same file reads two or more of the written paths: an `observe`,
|
|
496
|
+
`useObserve`, `useObserveEffect`, or `useComputed` body, or an `onChange` listener on a shared parent. Separate writes
|
|
497
|
+
rerun that tracker once per write, on torn state in between. `syncObservable` persistence queues changes until a
|
|
498
|
+
microtask, so it saves them together either way.
|
|
499
|
+
|
|
386
500
|
### Preserve a conditional child's mount behavior
|
|
387
501
|
|
|
388
|
-
Keep the observable at the owner.
|
|
502
|
+
Keep the observable at the owner. Let `Show` hold the condition.
|
|
389
503
|
|
|
390
504
|
```tsx
|
|
391
505
|
function Page() {
|
|
@@ -394,17 +508,26 @@ function Page() {
|
|
|
394
508
|
<>
|
|
395
509
|
<Canvas />
|
|
396
510
|
<button onClick={() => open$.set(true)}>Open</button>
|
|
397
|
-
<
|
|
511
|
+
<Show if={open$}>{() => <Panel />}</Show>
|
|
398
512
|
</>
|
|
399
513
|
);
|
|
400
514
|
}
|
|
401
|
-
|
|
402
|
-
function PanelGate({ open$ }: { open$: Observable<boolean> }) {
|
|
403
|
-
return useValue(open$) ? <Panel /> : null;
|
|
404
|
-
}
|
|
405
515
|
```
|
|
406
516
|
|
|
407
|
-
`
|
|
517
|
+
`Show` stays mounted as the only subscriber and calls its child function only while the condition holds, so
|
|
518
|
+
`Panel` keeps its original conditional mount. It re-renders with the owner, so values the child captures stay
|
|
519
|
+
current. `cond ? <A /> : <B />` becomes `<Show if={cond$} else={() => <B />}>{() => <A />}</Show>`, and a chain
|
|
520
|
+
of `tab === "posts" ? ... : tab === "media" ? ... : ...` becomes `<Switch value={tab$}>` with one arm per value
|
|
521
|
+
and a `default` arm. Both return the selected element from one position, so a branch keeps its state across
|
|
522
|
+
toggles exactly when it did before. A finding uses this form only when it renders the same thing:
|
|
523
|
+
|
|
524
|
+
- A `&&` condition must be boolean. A falsy `0` or `""` would render under `&&` but not under `Show`.
|
|
525
|
+
- A value narrowed by the condition is not read in a branch, because `get()` would lose the narrowing.
|
|
526
|
+
- The slot reads no other observable with `get()` and calls no hook, since `Show` tracks its child function.
|
|
527
|
+
- A ternary sits directly in a host element or fragment, which never inspects its children.
|
|
528
|
+
- `Switch` needs every value the state can hold to be a string literal outside `Object.prototype`.
|
|
529
|
+
|
|
530
|
+
Otherwise the finding asks for an always-mounted wrapper component that evaluates the slot as written.
|
|
408
531
|
|
|
409
532
|
### Subscribe once per keyed row
|
|
410
533
|
|
|
@@ -421,6 +544,39 @@ rows.map((row) => <RowState key={row.id} id={row.id} selectedId$={selectedId$} /
|
|
|
421
544
|
|
|
422
545
|
Index keys and state-controlled row mounts need review.
|
|
423
546
|
|
|
547
|
+
### Render an observable list with For
|
|
548
|
+
|
|
549
|
+
`render-list-with-for` changes a component whose only read of an observable array is a keyed map.
|
|
550
|
+
|
|
551
|
+
```tsx
|
|
552
|
+
// Before: a change to one todo renders Todos and every row
|
|
553
|
+
const todos = useValue(todos$);
|
|
554
|
+
return (
|
|
555
|
+
<ul>
|
|
556
|
+
{todos.map((todo) => (
|
|
557
|
+
<TodoRow key={todo.id} todo={todo} />
|
|
558
|
+
))}
|
|
559
|
+
</ul>
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
// After: a change to one todo renders its row
|
|
563
|
+
return (
|
|
564
|
+
<ul>
|
|
565
|
+
<For each={todos$}>
|
|
566
|
+
{(todo$) => {
|
|
567
|
+
const todo = todo$.get();
|
|
568
|
+
return <TodoRow todo={todo} />;
|
|
569
|
+
}}
|
|
570
|
+
</For>
|
|
571
|
+
</ul>
|
|
572
|
+
);
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
`For` subscribes to the array shallowly and renders each row in its own observer, keyed by the item's `id`.
|
|
576
|
+
Rows do not re-render with the component, so a row that captures a prop, state, or other render value would keep
|
|
577
|
+
its first value; those maps, index keys, keys other than `item.id`, rows that read other observables, and maps
|
|
578
|
+
inside a component that inspects its children stay unchanged.
|
|
579
|
+
|
|
424
580
|
## Keep command state out of renders
|
|
425
581
|
|
|
426
582
|
### Replace render-free state with a ref
|
|
@@ -445,24 +601,39 @@ const send = () => socketRef.current?.send("ping");
|
|
|
445
601
|
|
|
446
602
|
### Use a non-tracking snapshot
|
|
447
603
|
|
|
448
|
-
`use-peek-for-snapshot`
|
|
604
|
+
`use-peek-for-snapshot` marks a read that needs a snapshot, not a dependency. Handlers, effects, and `onChange`
|
|
605
|
+
listeners run outside any tracker, where `get()` already reads without subscribing, so there the finding is style. It is
|
|
606
|
+
a change only for a `useState` initializer inside an `observer` render, where `get()` would subscribe the component.
|
|
449
607
|
|
|
450
608
|
```tsx
|
|
451
609
|
const save = () => persist(settings$.theme.get()); // Before
|
|
452
610
|
const save = () => persist(settings$.theme.peek()); // After
|
|
453
611
|
```
|
|
454
612
|
|
|
455
|
-
Render reads and reactive callbacks keep tracking reads.
|
|
613
|
+
Render reads and reactive callbacks keep tracking reads. The finding's `edits` rename `get` to `peek`.
|
|
614
|
+
|
|
615
|
+
A row `key` read with `get()` inside an `observer` render or a `Computed`, `Memo`, `Show`, or `For` child function
|
|
616
|
+
is a `candidate`. The tracked read subscribes the parent to every row's key; `For` derives keys without tracking
|
|
617
|
+
them. The two differ only when code rewrites a key in place, which remounts the row under `get()` and keeps it
|
|
618
|
+
under `peek()`, so confirm no such write exists.
|
|
619
|
+
|
|
620
|
+
```tsx
|
|
621
|
+
<For each={todos$}>{(todo$) => <TodoRow key={todo$.id.get()} todo$={todo$} />}</For> // Before
|
|
622
|
+
<For each={todos$}>{(todo$) => <TodoRow key={todo$.id.peek()} todo$={todo$} />}</For> // After
|
|
623
|
+
```
|
|
456
624
|
|
|
457
625
|
## Track every render read
|
|
458
626
|
|
|
459
627
|
Legend tracks a `get()` only inside a tracking context: `useValue`, `observer`, a reactive component's selector, or
|
|
460
|
-
`observe`/`when`. These findings catch reads that fall outside one.
|
|
628
|
+
`observe`/`when`. These findings catch reads that fall outside one, or whose change a memo hides. Legend State
|
|
629
|
+
discourages render-time `get()` even inside `observer`; read rendered values through `useValue`.
|
|
461
630
|
|
|
462
631
|
### Subscribe to a render read
|
|
463
632
|
|
|
464
633
|
`use-value-for-render-read` changes a `get()` that runs in a component's or custom hook's render, including
|
|
465
|
-
synchronous `.map`-style callbacks, with nothing tracking it.
|
|
634
|
+
synchronous `.map`-style callbacks, with nothing tracking it. When the package's Babel config lists
|
|
635
|
+
`@legendapp/state/babel`, reads among the element children of `Computed`, `Memo`, and `Show` are tracked, because the
|
|
636
|
+
plugin wraps those children in a function.
|
|
466
637
|
|
|
467
638
|
```tsx
|
|
468
639
|
// Before: Counter renders the value once and never again
|
|
@@ -478,55 +649,73 @@ function Counter() {
|
|
|
478
649
|
}
|
|
479
650
|
```
|
|
480
651
|
|
|
652
|
+
The direct initializer form carries `edits`, including a `useValue` specifier beside an existing
|
|
653
|
+
`@legendapp/state/react` import. It carries none after an early return, where the new hook would be conditional.
|
|
481
654
|
A read inside a conditional, JSX, or iteration callback gets a hoisting instruction: add `const value =
|
|
482
|
-
useValue(path$)` at the top of the owner and read the binding there.
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
`
|
|
655
|
+
useValue(path$)` at the top of the owner and read the binding there. Inside `observer` and `reactiveObserver`
|
|
656
|
+
components the read already tracks and `useValue(path$)` performs the same `get()`, so only the direct initializer
|
|
657
|
+
form is reported, as `style` with the same edit. When the React Compiler compiles the component (declared, then
|
|
658
|
+
wrapped as `observer(Counter)`) and the read's value reaches the rendered output, the Compiler memoizes the `get()` like
|
|
659
|
+
any call and observer's re-render can reuse the stale result, so the read is a `change`, in JSX too. The rule stays silent for paths a `useValue` in the same owner
|
|
660
|
+
already covers (directly, through a selector, or through a `const` alias), for hook-argument snapshots such as
|
|
661
|
+
`useState(x$.get())`, for reads handed to a Legend input that tracks on its own (`Show if`, `For each`, a `Memo`
|
|
662
|
+
child, a `$` prop, or `when`), for `key` reads, and for `get(true)` or dynamically keyed paths.
|
|
486
663
|
|
|
487
|
-
###
|
|
664
|
+
### Select a copy when a memo keys on a mutated value
|
|
488
665
|
|
|
489
|
-
`
|
|
666
|
+
`snapshot-mutated-use-value` changes a `useValue` whose raw result keys a `useMemo` while another write mutates that
|
|
667
|
+
value in place.
|
|
490
668
|
|
|
491
669
|
```tsx
|
|
492
|
-
|
|
493
|
-
<Show if={ready$}>{() => <Panel />}</Show>; // After
|
|
670
|
+
// Elsewhere: library$.folders.push(folder), library$.folders[i].name.set(name), or counts$.assign({ b: 2 })
|
|
494
671
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
<Memo>{name$}</Memo>; // After
|
|
672
|
+
const folders = useValue(library$.folders); // Before
|
|
673
|
+
const folders = useValue(() => [...library$.folders.get()]); // After
|
|
674
|
+
const visible = useMemo(() => folders.filter((folder) => !folder.deleted), [folders]); // Unchanged
|
|
675
|
+
```
|
|
500
676
|
|
|
501
|
-
|
|
502
|
-
|
|
677
|
+
Legend applies child writes, array mutators, `assign`, and `delete` to the object it already holds, so `useValue`
|
|
678
|
+
rerenders the component with the same reference and the memo returns its previous result. A copy selected inside
|
|
679
|
+
`useValue` gets a new reference on every tracked change. If the derivation is cheap, computing it without `useMemo`
|
|
680
|
+
is equally correct. When that memo is the value's only reader and computes a primitive without side effects, the
|
|
681
|
+
finding instead recommends [selecting the primitive](#select-a-derived-primitive) and deleting both the memo and the
|
|
682
|
+
`useValue` binding.
|
|
503
683
|
|
|
504
|
-
when
|
|
505
|
-
when
|
|
506
|
-
|
|
684
|
+
The finding names each in-place write and fires only when the memo reads what the write changes: a membership write
|
|
685
|
+
against any element read, a field write against a read of that field. It is a `change` when every other dependency
|
|
686
|
+
keeps its identity across renders (module constants, refs, state setters, owned observables) and a `candidate` when
|
|
687
|
+
another dependency could change in the same update and recompute the memo. Writes that replace the value with
|
|
688
|
+
`set(next)`, writes to unread fields, `get(true)` reads, and bindings that are reassigned stay silent.
|
|
507
689
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
`
|
|
511
|
-
|
|
512
|
-
|
|
690
|
+
In a function the React Compiler compiles, the Compiler memoizes by reference without a `useMemo`: a method chain on
|
|
691
|
+
the raw value, or a call that receives it, whose result reaches the rendered output, such as
|
|
692
|
+
`{folders.map((folder) => <Row folder={folder} />)}`, keeps its cached result after an in-place write. The same finding
|
|
693
|
+
covers those calls; reads through a property such as `folders.length`, results that stay inside the render, and
|
|
694
|
+
values handed to hooks stay silent, because the Compiler does not cache them on the raw reference.
|
|
513
695
|
|
|
514
|
-
###
|
|
696
|
+
### Re-render a Memo child that reads parent values
|
|
515
697
|
|
|
516
|
-
`
|
|
698
|
+
`use-computed-for-parent-reads` changes a `<Memo>` whose child reads a value from its owner's render.
|
|
517
699
|
|
|
518
700
|
```tsx
|
|
519
|
-
const
|
|
520
|
-
const
|
|
521
|
-
|
|
701
|
+
const offset = useValue(feed$.offset);
|
|
702
|
+
const index = offset + position;
|
|
703
|
+
|
|
704
|
+
<Memo>{() => <Fork at={index} forks={forks$.get()} />}</Memo>; // Before
|
|
705
|
+
<Computed>{() => <Fork at={index} forks={forks$.get()} />}</Computed>; // After
|
|
522
706
|
```
|
|
523
707
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
708
|
+
`Memo` wraps `Computed` in `React.memo` with an equality check that ignores new children unless `scoped` is set, so
|
|
709
|
+
the owner's renders never reach the child. The child tracks the observables it reads, but every value it captures
|
|
710
|
+
from the owner stays at the Memo's first render. `Computed` re-renders with its parent and keeps the same tracking.
|
|
711
|
+
|
|
712
|
+
It is a `change` when a captured value changes whenever the owner re-renders for it: a `useValue`, `use$`, or
|
|
713
|
+
`useSelector` result, React state whose setter is used, a `useSyncExternalStore` result, or a value, callback, or
|
|
714
|
+
local render helper computed from one. It is a `candidate` when the child reads only props, context or custom-hook
|
|
715
|
+
results, or values computed from them, which may stay constant for the Memo's lifetime. Observables, including props
|
|
716
|
+
the component's type declares `Observable`, refs, state setters, owned observables, module values, and callbacks
|
|
717
|
+
memoized without changing dependencies keep their identity and stay silent, as do `scoped` Memos and values read
|
|
718
|
+
only inside event handlers.
|
|
530
719
|
|
|
531
720
|
## Keep effect timing correct
|
|
532
721
|
|
|
@@ -548,6 +737,37 @@ const changeQuery = (next: string) => {
|
|
|
548
737
|
|
|
549
738
|
Every query change must come through the proven event path.
|
|
550
739
|
|
|
740
|
+
### Reset state when an input changes
|
|
741
|
+
|
|
742
|
+
`reset-during-render` removes the stale commit an effect renders before it resets state for new props, params, or
|
|
743
|
+
loaded data.
|
|
744
|
+
|
|
745
|
+
```tsx
|
|
746
|
+
// Before
|
|
747
|
+
const [selected, setSelected] = useState(0);
|
|
748
|
+
useEffect(() => setSelected(0), [query]);
|
|
749
|
+
|
|
750
|
+
// After
|
|
751
|
+
const [selected, setSelected] = useState(0);
|
|
752
|
+
const [prevQuery, setPrevQuery] = useState(query);
|
|
753
|
+
if (!Object.is(query, prevQuery)) {
|
|
754
|
+
setPrevQuery(query);
|
|
755
|
+
setSelected(0);
|
|
756
|
+
}
|
|
757
|
+
```
|
|
758
|
+
|
|
759
|
+
The effect body must only set the owner's state from pure values, under at most one `if`, with no cleanup, and must
|
|
760
|
+
not read the state it resets. The effect's mount write must be a no-op so the first commit stays the same: each value
|
|
761
|
+
is the state's own initializer, or the `if` pins one input to literals, as in `kind === "a" || kind === "b"`, under
|
|
762
|
+
each of which the initializer evaluates to the written value. An effect that replaces a placeholder after mount keeps
|
|
763
|
+
its timing. The comparison settles only when each dependency keeps its identity while React reruns the owner. A state
|
|
764
|
+
value, a module binding, a `length` or other primitive constant, a memo that returns only such values, or a component
|
|
765
|
+
prop proves that, since React reruns a component after a render-phase update with the same props; a destructuring
|
|
766
|
+
default must be a primitive or a module binding. A custom hook's parameter qualifies when its declared type is a
|
|
767
|
+
string, number, bigint, boolean, literal, `null`, or `undefined`, which a pure caller recomputes to a value the
|
|
768
|
+
`Object.is` guard finds equal, even `NaN`. Any other value the owner computes, such as a hook result, leaves a review
|
|
769
|
+
that asks about it. A function, object, or array the owner rebuilds every render keeps the effect.
|
|
770
|
+
|
|
551
771
|
### React to an observable without rendering
|
|
552
772
|
|
|
553
773
|
Use `use-observe-effect` when a `useValue` result exists only to run an external side effect.
|
|
@@ -561,21 +781,75 @@ useEffect(() => syncTheme(theme), [theme]);
|
|
|
561
781
|
useObserveEffect(() => syncTheme(settings$.theme.get()));
|
|
562
782
|
```
|
|
563
783
|
|
|
564
|
-
Keep the React effect when the same value also renders. Moving it could change post-commit timing.
|
|
784
|
+
Keep the React effect when the same value also renders. Moving it could change post-commit timing. Keep it as well
|
|
785
|
+
when every parent that renders the component subscribes to the same observable: the parent's render already reruns
|
|
786
|
+
the component on each change, so dropping `useValue` saves nothing. When a parent might rerender it, through an
|
|
787
|
+
ancestor subscription or a memoized child whose props may be stable, the finding is a review.
|
|
565
788
|
|
|
566
|
-
|
|
789
|
+
The observer tracks every `get()` it runs synchronously, including reads before the first `await` of an async
|
|
790
|
+
function it calls. A read of an observable that is not a dependency would become a new trigger, so the finding
|
|
791
|
+
names it and tells you to `peek()` it instead:
|
|
567
792
|
|
|
568
|
-
|
|
793
|
+
```tsx
|
|
794
|
+
// Before
|
|
795
|
+
const isPlaying = useValue(player$.isPlaying);
|
|
796
|
+
useEffect(() => {
|
|
797
|
+
if (!isPlaying && window$.isOpen.get()) closeWindow();
|
|
798
|
+
}, [isPlaying]);
|
|
799
|
+
|
|
800
|
+
// After
|
|
801
|
+
useObserveEffect(() => {
|
|
802
|
+
if (!player$.isPlaying.get() && window$.isOpen.peek()) closeWindow();
|
|
803
|
+
});
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
Reads after an unconditional `await` and reads inside timers or promise callbacks stay untracked, so they are left
|
|
807
|
+
alone. The finding becomes a review when a read runs in a callback of unknown timing, or calls `get()` on a receiver
|
|
808
|
+
that is not proven to be an observable.
|
|
809
|
+
|
|
810
|
+
A function the effect calls runs inside the observer's pass too, and its reads cannot be peeked from the effect. A
|
|
811
|
+
project function, local or imported, is followed up to its first unconditional `await`; if it reads an observable
|
|
812
|
+
there, the finding becomes a review that names the call. So does any call whose code is not followed: an import from a
|
|
813
|
+
module out of view, a method of an application object, a callback prop, a value a hook returns, or a function held in
|
|
814
|
+
a variable. Globals, packages, React setters and refs, built-in methods of constants, and observable writes stay
|
|
815
|
+
convertible.
|
|
569
816
|
|
|
570
817
|
```tsx
|
|
571
|
-
|
|
572
|
-
|
|
818
|
+
// Stays a React effect: loadThread reads mail$.errorId before its first await, so an observer
|
|
819
|
+
// would refetch every time a failed load records its error.
|
|
820
|
+
useEffect(() => {
|
|
821
|
+
if (selectedId) void loadThread(selectedId);
|
|
822
|
+
}, [selectedId]);
|
|
823
|
+
```
|
|
824
|
+
|
|
825
|
+
### Keep empty-dependency lifecycle effects
|
|
826
|
+
|
|
827
|
+
Legend's `useMount(fn)` runs `useEffect(fn, [])` in production, and `useUnmount(fn)` is `useMount(() => fn)`. Rewriting
|
|
828
|
+
an empty-dependency effect with either removes no render or lifecycle cost, so the effect is `keep-effect`. Legend
|
|
829
|
+
State prefers `useMount` and `useUnmount` when writing new code; converting existing effects is optional.
|
|
830
|
+
|
|
831
|
+
```tsx
|
|
832
|
+
useEffect(() => {
|
|
833
|
+
preload();
|
|
834
|
+
}, []);
|
|
573
835
|
|
|
574
|
-
useEffect(() => () =>
|
|
575
|
-
useUnmount(() => stop()); // After
|
|
836
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
576
837
|
```
|
|
577
838
|
|
|
578
|
-
|
|
839
|
+
The only difference is in development under Strict Mode: `useUnmount` skips the teardown of the simulated unmount. A
|
|
840
|
+
cleanup-free `useMount` setup still runs twice there, as the React effect does.
|
|
841
|
+
|
|
842
|
+
### Keep layout work before paint
|
|
843
|
+
|
|
844
|
+
A `useLayoutEffect` finding reports `hook: "useEffect"`. The effect runs after DOM mutation and before paint, so it
|
|
845
|
+
can only be deleted with its derived state, move its write into the event, wait on the state it writes, or stay
|
|
846
|
+
`keep-effect`. `use-observe-effect`, Legend persistence, and lifecycle aliases would run its work after the first paint.
|
|
847
|
+
|
|
848
|
+
```tsx
|
|
849
|
+
useLayoutEffect(() => {
|
|
850
|
+
setHeight(ref.current?.offsetHeight ?? 0);
|
|
851
|
+
}, [label]);
|
|
852
|
+
```
|
|
579
853
|
|
|
580
854
|
### Persist an observable instead of writing storage
|
|
581
855
|
|
|
@@ -601,9 +875,7 @@ const filters$ = useObservable(
|
|
|
601
875
|
`synced` and `syncObservable` come from `@legendapp/state/sync`; the plugin matching the storage the effect wrote comes
|
|
602
876
|
from `@legendapp/state/persist-plugins/local-storage`. The finding stays a candidate because the storage key, the
|
|
603
877
|
serialized shape, and any mount effect that hydrates the same key need a manual check. While the persisted state stays
|
|
604
|
-
React, or a prop drives the write, the effect is `keep-effect`.
|
|
605
|
-
entry point, every such effect stays `keep-effect` and `capabilities.disabledRules` lists
|
|
606
|
-
`browser-storage-persistence` with reason `sync-export-missing`.
|
|
878
|
+
React, or a prop drives the write, the effect is `keep-effect`.
|
|
607
879
|
|
|
608
880
|
### Keep an effect while changing its storage
|
|
609
881
|
|
|
@@ -650,7 +922,7 @@ menu$.open.set((value) => !value); // Before
|
|
|
650
922
|
menu$.open.toggle(); // After
|
|
651
923
|
```
|
|
652
924
|
|
|
653
|
-
`toggle-observable` is a style finding.
|
|
925
|
+
`toggle-observable` is a style finding.
|
|
654
926
|
|
|
655
927
|
## Own observables once
|
|
656
928
|
|
|
@@ -666,18 +938,6 @@ stability, or context. `useObservable` also deactivates the node it returns when
|
|
|
666
938
|
node is the shared source. Nest one observable inside another only as an intentional link whose reads and writes
|
|
667
939
|
forward to the source.
|
|
668
940
|
|
|
669
|
-
### Snapshot an initial value instead of writing a computed
|
|
670
|
-
|
|
671
|
-
```tsx
|
|
672
|
-
const draft$ = useObservable(() => store$.user.name.get() || fallback); // Before
|
|
673
|
-
const draft$ = useObservable(store$.user.name.peek() || fallback); // After
|
|
674
|
-
draft$.set(event.target.value); // Unchanged
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
A function initializer with a tracked `get()` creates a computed observable, and a computed replaces any written
|
|
678
|
-
value on its next recomputation. The finding fires only when the owner also writes the observable; an initializer
|
|
679
|
-
that is never written stays a legitimate derivation, and a `linked` or `synced` body already declares its own setter.
|
|
680
|
-
|
|
681
941
|
## Final check
|
|
682
942
|
|
|
683
943
|
Before finishing:
|