# TODOs for ease.js # # This is by no means a complete list. [ target: 0.1.0 ] Misc - Class module is becoming too large; refactor - Permit binding on class methods - Move tests to directly test propobj - Was never done after refactoring. It's tested as a consequence of being used in the class module. - Useful error when trying to extend from non-function (rather than CALL_NON_FUNCTION_AS_CONSTRUCTOR) Member Keywords - Restrictions; throw exceptions when unknown keywords are used - Concrete types must implement member with same visibility, or greater visibility, than the abstract implementation defined - Abstract keyword cannot be used with private members - toString() must be public - Should not be able to instantiate object with non-public constructor (singleton) Documentation - Ensure all docblocks contain only valid JSDoc tags - Begin technical documentation for developers - Include designs and project decisions - Wiki, LaTeX, Texinfo? - API documentation - Wiki, LaTeX, Texinfo? Client-Side - implement assert.deepEqual() [ future ] Misc - Deep cloning level for util.clone() - Optional preprocessing support - Ability to disable features that wouldn't impact base functionality - For example, one may wish to have type checking enabled for development but may not want the performance hit for their production code. Disabling type checking, as long as the proper types are passed to the functions, will not impact function logic. - Should be able to run source file without preprocessing, so C-style macros cannot be used (# is not a valid token) Member Keywords - const; immutable properties - final; methods cannot be overridden by subtypes - static; method/property accessible via class definition - event; designates a supported event Typing - Support JSDoc-style type definitions for parameters - Syntax: [ 'string', 'number', function( name, age ) {} ] - Optional; if a function is simply provided, rather than an array, no type checking will be performed - For abstract methods, simply leave the function off (last index) - Provide option to throw errors on any type mismatch - Auto-cast, unless casting is impossible, then throw error Reflection - Rather than exposing internal data via properties, fully encapsulate - Classes, not just modules like the rest of ease.js Patterns - Provide automated means to generate classes for common patterns (primarily GoF) - Generating classes at runtime gives us the powerful benefit of being able to generate the classes however we wish. Therefore, we do not need code generation techniques to generate classes. We can simply call a method. This will remove repetitive tasks and duplicate code needed to properly implement the various patterns, and serve as an excellent tool for those unfamiliar with them.