Strongly typed javascript objects, self-validating, detailed error reports