ack-angular
Version:
Extra special directives, components, providers and pipes to aide in tackling everyday interface development needs in Angular2
83 lines (80 loc) • 8.71 kB
JavaScript
/** responsible for ack-angular pipe'in system into ackX */
export function invokeRotator(invoke //|(any[])=>any
) {
return getInvokerBy(invoke);
}
export function objectInvoker(object, plan) {
var rtn = object;
var subargs;
var item;
let newkey;
let key;
let typo;
//loop extra arguments as property collectors
for (let x = 0; x < plan.length; ++x) {
key = plan[x];
subargs = [];
//undefined error catcher
if (rtn == null) {
typo = typeof (rtn);
const msg = "TypeError: Cannot read property '" + key + "' of " + typo + ". Invoke instructions: " + JSON.stringify(plan);
throw new Error(msg);
}
let asFunc = key.constructor == Array;
//array where 1st arg is method and subs are positional arguments
if (asFunc) {
key = [];
key.push.apply(key, plan[x]); //clone array memory, do not touch original array
newkey = key.shift(); // first arg is name of key, remove it from array
subargs = key; //what is left in array is the arguments
key = newkey; //key to string
}
item = rtn[key];
let isFunc = item && item.constructor == Function;
if (asFunc && !isFunc) {
if (item == null || item.constructor !== Function) {
typo = typeof (item);
const msg = "TypeError: '" + key + "' of " + typo + " is not a function. Invoke instructions: " + JSON.stringify(plan);
throw new Error(msg);
}
}
if (isFunc) {
rtn = item.apply(rtn, subargs);
}
else {
rtn = item;
}
}
return rtn;
}
export function getInvokerBy(invoke) {
const isF = typeof invoke == 'function';
if (isF) {
return function (...args) {
var x = invoke(args[0]);
args.shift();
return objectInvoker(x, args);
};
}
return function (...plan) {
const a = plan[0];
plan[0] = plan[1];
plan[1] = a;
return objectInvoker(invoke, [plan]);
};
/*
return function(args:any[]):any{
const rtn = invoke[ args[1] ]( args[0] )
for(let x=0; x<args.length; ++x){
if( x<1 ){
delete args[x]
}else{
args[ x-1 ] = args[x]
}
}
args.length = args.length - 2
return rtn
}
*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlUm90YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnZva2VSb3RhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJEQUEyRDtBQUMzRCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFVLENBQUEsZUFBZTs7SUFFekIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLE1BQVUsRUFDVixJQUFtQjtJQUVuQixJQUFJLEdBQUcsR0FBQyxNQUFNLENBQUE7SUFDZCxJQUFJLE9BQVksQ0FBQTtJQUNoQixJQUFJLElBQVMsQ0FBQTtJQUNiLElBQUksTUFBYSxDQUFBO0lBQ2pCLElBQUksR0FBbUIsQ0FBQTtJQUN2QixJQUFJLElBQVcsQ0FBQTtJQUVmLDZDQUE2QztJQUM3QyxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBQztRQUNoQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2IsT0FBTyxHQUFHLEVBQUUsQ0FBQTtRQUVaLHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsSUFBRSxJQUFJLEVBQUU7WUFDYixJQUFJLEdBQUcsT0FBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLG1DQUFtQyxHQUFDLEdBQUcsR0FBQyxPQUFPLEdBQUUsSUFBSSxHQUFFLHlCQUF5QixHQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEgsTUFBTSxJQUFJLEtBQUssQ0FBRSxHQUFHLENBQUUsQ0FBQTtTQUN2QjtRQUVELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLElBQUUsS0FBSyxDQUFBO1FBRW5DLGlFQUFpRTtRQUNqRSxJQUFJLE1BQU0sRUFBRTtZQUNWLEdBQUcsR0FBRyxFQUFFLENBQUE7WUFDUixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQSxpREFBaUQ7WUFFN0UsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQVMsQ0FBQSxDQUFBLGlEQUFpRDtZQUM1RSxPQUFPLEdBQUcsR0FBRyxDQUFBLENBQUEsd0NBQXdDO1lBQ3JELEdBQUcsR0FBRyxNQUFNLENBQUEsQ0FBQSxlQUFlO1NBQzVCO1FBRUQsSUFBSSxHQUFHLEdBQUcsQ0FBVSxHQUFHLENBQUUsQ0FBQTtRQUV6QixJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBRSxRQUFRLENBQUE7UUFFL0MsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBRyxJQUFJLElBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUcsUUFBUSxFQUFFO2dCQUM1QyxJQUFJLEdBQUcsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUNuQixNQUFNLEdBQUcsR0FBRyxjQUFjLEdBQUMsR0FBRyxHQUFDLE9BQU8sR0FBRSxJQUFJLEdBQUUsMkNBQTJDLEdBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFDL0csTUFBTSxJQUFJLEtBQUssQ0FBRSxHQUFHLENBQUUsQ0FBQTthQUN2QjtTQUNGO1FBRUQsSUFBSSxNQUFNLEVBQUU7WUFDVixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDL0I7YUFBSTtZQUNILEdBQUcsR0FBRyxJQUFJLENBQUE7U0FDWDtLQUNGO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsTUFBVTtJQUVWLE1BQU0sR0FBRyxHQUFHLE9BQU8sTUFBTSxJQUFFLFVBQVUsQ0FBQTtJQUVyQyxJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sVUFBUyxHQUFHLElBQVM7WUFDMUIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUNaLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMvQixDQUFDLENBQUE7S0FDRjtJQUVELE9BQU8sVUFBUyxHQUFHLElBQVM7UUFDMUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVYLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDckMsQ0FBQyxDQUFBO0lBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7TUFnQkU7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIHJlc3BvbnNpYmxlIGZvciBhY2stYW5ndWxhciBwaXBlJ2luIHN5c3RlbSBpbnRvIGFja1ggKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VSb3RhdG9yKFxuICBpbnZva2U6YW55Ly98KGFueVtdKT0+YW55XG4pe1xuICByZXR1cm4gZ2V0SW52b2tlckJ5KGludm9rZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEludm9rZXIoXG4gIG9iamVjdDphbnksXG4gIHBsYW46KHN0cmluZ3xhbnkpW11cbil7XG4gIHZhciBydG49b2JqZWN0XG4gIHZhciBzdWJhcmdzOiBhbnlcbiAgdmFyIGl0ZW06IGFueVxuICBsZXQgbmV3a2V5OnN0cmluZ1xuICBsZXQga2V5OnN0cmluZ3xzdHJpbmdbXVxuICBsZXQgdHlwbzpzdHJpbmdcblxuICAvL2xvb3AgZXh0cmEgYXJndW1lbnRzIGFzIHByb3BlcnR5IGNvbGxlY3RvcnNcbiAgZm9yKGxldCB4PTA7IHggPCBwbGFuLmxlbmd0aDsgKyt4KXtcbiAgICBrZXkgPSBwbGFuW3hdXG4gICAgc3ViYXJncyA9IFtdXG5cbiAgICAvL3VuZGVmaW5lZCBlcnJvciBjYXRjaGVyXG4gICAgaWYoIHJ0bj09bnVsbCApe1xuICAgICAgdHlwbyA9IHR5cGVvZihydG4pXG4gICAgICBjb25zdCBtc2cgPSBcIlR5cGVFcnJvcjogQ2Fubm90IHJlYWQgcHJvcGVydHkgJ1wiK2tleStcIicgb2YgXCIrIHR5cG8gK1wiLiBJbnZva2UgaW5zdHJ1Y3Rpb25zOiBcIisgSlNPTi5zdHJpbmdpZnkocGxhbilcbiAgICAgIHRocm93IG5ldyBFcnJvciggbXNnIClcbiAgICB9XG5cbiAgICBsZXQgYXNGdW5jID0ga2V5LmNvbnN0cnVjdG9yPT1BcnJheVxuXG4gICAgLy9hcnJheSB3aGVyZSAxc3QgYXJnIGlzIG1ldGhvZCBhbmQgc3VicyBhcmUgcG9zaXRpb25hbCBhcmd1bWVudHNcbiAgICBpZiggYXNGdW5jICl7XG4gICAgICBrZXkgPSBbXVxuICAgICAga2V5LnB1c2guYXBwbHkoa2V5LCBwbGFuW3hdKS8vY2xvbmUgYXJyYXkgbWVtb3J5LCBkbyBub3QgdG91Y2ggb3JpZ2luYWwgYXJyYXlcblxuICAgICAgbmV3a2V5ID0ga2V5LnNoaWZ0KCkgYXMgYW55Ly8gZmlyc3QgYXJnIGlzIG5hbWUgb2Yga2V5LCByZW1vdmUgaXQgZnJvbSBhcnJheVxuICAgICAgc3ViYXJncyA9IGtleS8vd2hhdCBpcyBsZWZ0IGluIGFycmF5IGlzIHRoZSBhcmd1bWVudHNcbiAgICAgIGtleSA9IG5ld2tleS8va2V5IHRvIHN0cmluZ1xuICAgIH1cblxuICAgIGl0ZW0gPSBydG5bIDxzdHJpbmc+a2V5IF1cblxuICAgIGxldCBpc0Z1bmMgPSBpdGVtICYmIGl0ZW0uY29uc3RydWN0b3I9PUZ1bmN0aW9uXG5cbiAgICBpZiggYXNGdW5jICYmICFpc0Z1bmMgKXtcbiAgICAgIGlmKGl0ZW09PW51bGwgfHwgaXRlbS5jb25zdHJ1Y3RvciE9PUZ1bmN0aW9uICl7XG4gICAgICAgIHR5cG8gPSB0eXBlb2YoaXRlbSlcbiAgICAgICAgY29uc3QgbXNnID0gXCJUeXBlRXJyb3I6ICdcIitrZXkrXCInIG9mIFwiKyB0eXBvICtcIiBpcyBub3QgYSBmdW5jdGlvbi4gSW52b2tlIGluc3RydWN0aW9uczogXCIrIEpTT04uc3RyaW5naWZ5KHBsYW4pXG4gICAgICAgIHRocm93IG5ldyBFcnJvciggbXNnIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiggaXNGdW5jICl7XG4gICAgICBydG4gPSBpdGVtLmFwcGx5KHJ0biwgc3ViYXJncylcbiAgICB9ZWxzZXtcbiAgICAgIHJ0biA9IGl0ZW1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcnRuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZva2VyQnkoXG4gIGludm9rZTphbnlcbik6RnVuY3Rpb257XG4gIGNvbnN0IGlzRiA9IHR5cGVvZiBpbnZva2U9PSdmdW5jdGlvbidcblxuICBpZiggaXNGICl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueSk6YW55e1xuICAgICAgdmFyIHggPSBpbnZva2UoYXJnc1swXSk7XG4gICAgICBhcmdzLnNoaWZ0KClcbiAgICAgIHJldHVybiBvYmplY3RJbnZva2VyKHgsIGFyZ3MpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKC4uLnBsYW46IGFueSl7XG4gICAgY29uc3QgYSA9IHBsYW5bMF1cbiAgICBwbGFuWzBdID0gcGxhblsxXVxuICAgIHBsYW5bMV0gPSBhXG5cbiAgICByZXR1cm4gb2JqZWN0SW52b2tlcihpbnZva2UsW3BsYW5dKVxuICB9XG5cbi8qXG4gIHJldHVybiBmdW5jdGlvbihhcmdzOmFueVtdKTphbnl7XG4gICAgY29uc3QgcnRuID0gaW52b2tlWyBhcmdzWzFdIF0oIGFyZ3NbMF0gKVxuXG4gICAgZm9yKGxldCB4PTA7IHg8YXJncy5sZW5ndGg7ICsreCl7XG4gICAgICBpZiggeDwxICl7XG4gICAgICAgIGRlbGV0ZSBhcmdzW3hdXG4gICAgICB9ZWxzZXtcbiAgICAgICAgYXJnc1sgeC0xIF0gPSBhcmdzW3hdXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXJncy5sZW5ndGggPSBhcmdzLmxlbmd0aCAtIDJcblxuICAgIHJldHVybiBydG5cbiAgfVxuKi9cbn0iXX0=