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;
|
||
|
}
|