* Add Scope plumbing and custom operator extension point
Thread evaluation scope through the rules engine and delegate unknown
operators to an empty CustomOperators dispatcher, without changing behavior.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Fix project.pbxproj: restore RewardedAdTrackingMetadata entries
The RulesEngine registration edit accidentally dropped four
RewardedAdTrackingMetadata.swift entries from the Xcode project.
Restore them and normalize CustomOperators identifiers to 24 hex chars.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Promote firstArgEvaluated to shared Operators helpers
Move the unary-arg helper from LogicOperators to Operators so custom
operators can use the same json-logic-js spread convention.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Address review comments on custom operator extension point
Drop the cross-engine registration note from CustomOperators, and restore
the single-line var extra-args warning that was reflowed without changing
its text.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: move rules engine into core SDK as internal
Move the RulesEngineInternal sources and tests into the RevenueCat target
under Sources/RulesEngine and Tests/UnitTests/RulesEngine. The moved
symbols are marked internal so no new public API is exposed, and the
standalone RulesEngineInternal target is removed from Package manifests,
Tuist, the Xcode project, and CI. No usages yet.
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: namespace rules engine types under RulesEngine
Nest the generically-named rules engine types (Value, Evaluator,
Operators and the per-category operator enums), the JS coercion helpers,
and PrintLogger inside the RulesEngine enum so the subsystem exposes a
single top-level symbol instead of polluting the RevenueCat module's
internal namespace. RulesEngineLogger stays top-level (already prefixed).
Production cross-references resolve via enclosing scope; tests use local
typealiases or explicit RulesEngine. qualification.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Document why the rules engine owns its own logging abstraction
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* refactor: move rules engine into core SDK as internal
Move the RulesEngineInternal sources and tests into the RevenueCat target
under Sources/RulesEngine and Tests/UnitTests/RulesEngine. The moved
symbols are marked internal so no new public API is exposed, and the
standalone RulesEngineInternal target is removed from Package manifests,
Tuist, the Xcode project, and CI. No usages yet.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Document why the rules engine owns its own logging abstraction
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>