70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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,
 | |
|       wrapperStack: true
 | |
|     }
 | |
| 
 | |
| 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;
 | |
| }
 |