The framework, while using typescript, has need of some extended functionality. The additional functionality is
- Supports on-the-fly compilation, nothing needs to be compiled ahead of time
 - Enhanced AST transformations, and transformer registration
- All AST transformations are single-file based, and runs without access to the 
TypeChecker 
 - All AST transformations are single-file based, and runs without access to the 
 - Intelligent caching of source files to minimize recompilation
 - Support for watching sources files:
- Detecting changes to files
 - Detecting changes to specific classes
 - Detecting changes to specific methods within classes
 
 - Allows for hot-reloading of classes during development
- Utilizes 
es2015Proxys to allow for swapping out implementation at runtime 
 - Utilizes 
 
Additionally, there is support for common AST transformation patterns to facilitate all the transformers used throughout the framework. Functionality includes:
getDecoratorIdent(d: ts.Decorator): ts.IdentifierGets the name of the decorator functionfindAnyDecorator(node: ts.Node, patterns: { [key: string]: Set<string> }, state: State): ts.Decorator | undefinedAttempts to find any matching decorators as defined in patternsaddImport(file: ts.SourceFile, imports: Import[])Will add an import to the existing source filefromLiteral(val: any)Converts a literal value to the corresponding AST nodesextendObjectLiteral(addTo: object, lit?: ts.ObjectLiteralExpression)
Extends an AST Node via a literal value, generally used to emulateObject.assignin the ASTgetPrimaryArgument<T = ts.Node>(node: ts.CallExpression | ts.Decorator | undefined): T | undefinedRetrieves the first argument of CallExpression or DecoratorgetObjectValue(node: ts.ObjectLiteralExpression | undefined, key: string)Extracts the literal value from an AST node if possibleimportingVisitorProvides a transformer visitor that collects imports, and adds them to the source file as neededimportIfExternal<T extends State>(typeNode: ts.TypeNode, state: State)Will import a reference if the type is not defined within the filebuildImportAliasMap(pathToType)Will generate an import lookup to be used for simple type resolution
Transformations are defined by support/transformation.<name>.ts as the filename. The schema for a transformer is
  export class CustomerTransformer {
    priority: 1, // Lower is higher priority
    phase: 'before'|'after', // The phase as defined by Typescript's AST processing
    transformer: (context: ts.TransformationContext) => {
       return (file: ts.SourceFile) => {
         ... modify source file ...
         return file;
       }
    }
  }