Fact Decorator Rough Sketch
@CacheControl this is very much just a rough sketch of what a "FactDecorator" that matched the "Operator Decorator" would look like.
The idea here is to add support for a way to declaratively manipulate fact values without needed to manually add new facts. I've created defaults for what I think the most common use cases are:
keyOf / valueOf - these work on the methods defined on Map but also use the Object.keys / Object.values methods to enumerate the keys and values of other objects. For instance you could now do:
const fact = new Fact("test", { editable: true });
const condition = {
fact: "keysOf:test",
operator: "contains",
value: "editable"
}
I've also added sizeOf which works on strings so:
const condition = {
fact: "sizeOf:password",
operator: "greaterThanInclusive",
value: 12
}
Finally I wanted to showcase how we could use this to potentially move the handling of JSON Path properties out of the Almanac and into something that would let us move the JSONPathPlus dependency to a peer-dependency which would make it much easier to tackle breaking changes.
@chris-pardy the approach makes sense to me!