| 
									
										
										
										
											2015-09-21 16:48:16 -07:00
										 |  |  | import * as simple_library from './simple_library'; | 
					
						
							|  |  |  | import * as ng from 'angular2/angular2'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const LIB_MAP = { | 
					
						
							|  |  |  |   'simple_library': simple_library, | 
					
						
							|  |  |  |   'ng': ng | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const IGNORE = | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       captureStackTrace: true, | 
					
						
							|  |  |  |       stackTraceLimit: true, | 
					
						
							|  |  |  |       toString: true, | 
					
						
							|  |  |  |       originalException: true, | 
					
						
							|  |  |  |       originalStack: true, | 
					
						
							|  |  |  |       wrapperMessage: true, | 
					
						
							| 
									
										
										
										
											2015-11-03 15:53:28 +01:00
										 |  |  |       wrapperStack: true, '@@observable': true | 
					
						
							| 
									
										
										
										
											2015-09-21 16:48:16 -07:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function collectClassSymbols(symbols: string[], prefix: String, type: Function): | 
					
						
							|  |  |  |     void { | 
					
						
							|  |  |  |       // static
 | 
					
						
							|  |  |  |       for (var name in type) { | 
					
						
							|  |  |  |         if (IGNORE[name] || name.charAt(0) == '_') continue; | 
					
						
							|  |  |  |         var suf = type[name] instanceof Function ? '()' : ''; | 
					
						
							|  |  |  |         var symbol = `${prefix}#${name}${suf}`; | 
					
						
							|  |  |  |         symbols.push(symbol); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // instance
 | 
					
						
							|  |  |  |       for (var name in type.prototype) { | 
					
						
							|  |  |  |         if (IGNORE[name] || name.charAt(0) == '_') continue; | 
					
						
							|  |  |  |         if (name == 'constructor') continue; | 
					
						
							|  |  |  |         var suf = ''; | 
					
						
							|  |  |  |         try { | 
					
						
							|  |  |  |           if (type.prototype[name] instanceof Function) suf = '()'; | 
					
						
							|  |  |  |         } catch (e) { | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         var symbol = `${prefix}.${name}${suf}`; | 
					
						
							|  |  |  |         symbols.push(symbol); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function collectTopLevelSymbols(prefix: string, lib: any): | 
					
						
							|  |  |  |     string[] { | 
					
						
							|  |  |  |       var symbols: string[] = []; | 
					
						
							|  |  |  |       for (var name in lib) { | 
					
						
							|  |  |  |         var symbol = `${name}`; | 
					
						
							|  |  |  |         var ref = lib[name]; | 
					
						
							|  |  |  |         if (ref instanceof Function) { | 
					
						
							|  |  |  |           if (symbol.charAt(0) == symbol.charAt(0).toLowerCase()) { | 
					
						
							|  |  |  |             // assume it is top level function
 | 
					
						
							|  |  |  |             symbols.push(symbol + '()'); | 
					
						
							|  |  |  |           } else { | 
					
						
							|  |  |  |             symbols.push(symbol); | 
					
						
							|  |  |  |             collectClassSymbols(symbols, symbol, ref); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |           symbols.push(symbol); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       return symbols; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function getSymbolsFromLibrary(name: string): string[] { | 
					
						
							|  |  |  |   var symbols = collectTopLevelSymbols(name, LIB_MAP[name]); | 
					
						
							|  |  |  |   symbols.sort(); | 
					
						
							|  |  |  |   return symbols; | 
					
						
							|  |  |  | } |