[ ] figure out what functionality is missing in Criteria + Shapes to support a wide range of scenarios a user might have
[ ] introduce & implement ICriterion.simplify() so that a user does not need to care about not providing empty arrays as criteria
[ ] write some unit tests
[ ] add a string array to the Song model "tags", so that there is some code in music-box that tests that part of the criteria
[ ] add "oneOf" (shape only) so we support endpoints that have "number: equals | in-range"
[ ] add symbols to the criterion object received by the endpoint so the user can differentiate between types of criteria if for a property, multiple types that produce the same object type are available
[ ] figure out how to deal with required & optional entity-criteria where there is an intersection between the two (afaict this is not handled at all)
[ ] finish implementation of mapping WhereEntityShape to ICriterionShape (basic cases already work, more complex do not)
[ ] don't forget about $even and $odd
[ ] add and-shape, required for searching text (e.g. and(includes("foo"), includes("bar"), ...))
[ ] update acceptCriterion() to receive new criteria object type (also consider giving it the ability to return a modified criterion, so that we can e.g. remove entries from an array of primitive criteria)
[ ] consider removing "never" in favor of "none", if possible
[ ] query options got shafted a bit; need to fix them
Task List